본문 바로가기

스프링 부트/자바

직렬화(Serialization)와 역직렬화(Deserialization)

 

직렬화 : 객체를 바이트 스트림으로 변환 .

역직렬화 : 직렬화된 데이터를 해석해서 객체 형태로 만듬.

 

현재 실행중인 서버의 메모리에 저장되어있는 { name: "직렬화" , id:12345 } 이 객체를 하드디스크에 저장하고 싶으면 어떻게 해야 할까?  ( 직렬화 )

저장해둔 객체를 다시 서버가 꺼내와서 똑같은 객체로 변환시키고 싶으면 어떻게 해야 할까? ( 역 직렬화 )

 

위 객체를 " {name: '직렬화' , id : 12345 } " 이렇게 하나의 문자열로 변환시켜서 파일에 저장해두고

나중에 해당 파일을 읽어와서 문자열을 파싱해 객체로 변환하는 방법도 있을것이고

 

[객체 프로퍼티  플래그 (ex 222) , 아스키코드("n") , 아스키코드("a") , ....  , 객체 값 플래그 , 객체 값 ....    , 객체 프로퍼티 플래그 , ] 

이런식의 바이트 스트림으로 변환해서 저장해두었다가 나중에 해당 바이트 스트림을 파싱해 사용 할 수도 있다.

 

어떤 방식으로든 현재 프로그램의 메모리속에 존재하는 객체를 밖으로 빼내고 싶을 때 직렬화를 사용한다. 

 

언제 사용?

- 데이터를 영속화해서 서버에 종료되어도 따로 남겨두고 싶을때 

- 외부에 데이터를 전송 할 때

 

 

언어별 다양한 직렬화 방식들

자바스크립트 

JSON.stringify()   :  json 객체를 문자열로 변환 (직렬화)

JSON.parse()   : 문자열을 json 객체로 변환 (역직렬화)

 

자바 스프링 

ObjectOutputStream() : 객체를 바이트 스트림으로 변환 (직렬화)

ObjectInputStream() : 바이트 스트림을 객체 형태로 변환 (역직렬화)

 

Gson.toJson() : 객체를 JSON 문자열로 변환 (직렬화)

Gson.fromJson() : JSON 문자열을 객체로 변환 (역직렬화)