728x90
직렬화란?
- 객체를 다른 환경에 저장했다가 나중에 재구성 할 수 있게 만드는 방식
- object는 주소를 통해 reference 되기 때문에, 이미 가비지 컬렉터로 지워졌다면 그게 무슨 값인지 알수 없다. 따라서 byte로 직렬화하여 값을 유지하여 그대로 저장하고, 그것을 역직렬화하는 방식이다. (object를 byte로, byte를 object로)
자바 직렬화
- 쉬운 분산 객체생성
- byte stream을 만듦
언제 쓸까?
- 객체의 상태를 저장해야 할필요가 있을 때 - 파일, dB, 캐시
- 다른 vm에 정보를 전달할 필요가 있을 때 - RMI, 소켓
사용방법
- Serializable
- 객체 직렬화: java.io.ObjectOutputStream의 writeObject를 이용 - ByteArrayOutputStream.toByteArrayStream()
- 객체 역직렬화 : java.io.ObjectInputStream 의 readObject를 이용
직렬화 역직렬화 흐름
- Object -> writeObject -> (저장: DB, file, memory) -> readObject -> readResolve -> Object
잘 안쓰는 이유
- 보안
- 유지보수성
- 테스트
- 그외 : 싱글톤, 역직렬화 문제
- 문제를 해결하는 방식은 있지만 사실 굳이 복잡하게 할이유가 없다.
좋은 방법은 직렬화를 사용하지 않는 것이다.
- 새로운 시스템에 바이트 스트림으로 변환하는 좋은 메커니즘이 많음.
- 크로스 플랫폼에 적합한 데이터 표현
- json, csv, 프로토콜 버퍼
728x90
'개발 > java,spring,springboot' 카테고리의 다른 글
springboot logback - mongodb appender정의하기 (0) | 2022.04.05 |
---|---|
Spring cloud의 이해 & Spring cloud config 기본 사용 (0) | 2021.12.01 |
java exception 관리 - handling & safe (0) | 2021.08.18 |
Apache http request 응용(+Springboot) (0) | 2021.04.22 |
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'text/plain;charset=UTF-8' not supported (0) | 2021.04.22 |
댓글