소프트웨어 개발에서 말하는 데이터 직렬화(serialization)는 한 마디로 간략하게 요약하자면
메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것을 말한다.
역직렬화(desrialization)는 그 반대로 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 다시 변환하는 것이다.
여기서 궁금증이 해결되지 못한 사람들이 많을 텐데(내가 그랬다) 내가 아는 대로 자세히 설명해보도록 하겠다.
앞서 얘기한대로 직렬화는 데이터를 저장 혹은 통신에 사용하기 위함인데 데이터를 그냥 사용하면 안 되고 왜 직렬화라는 과정을 거쳐야 할까?
우선 메모리(힙 영역, 스택 영역등)의 대한 기본적인 지식이 있어야 이해가 가능하다.
개발 언어로 무엇을 사용하던(C++, C, C#, Java 등,,) 사용하는 데이터들의 메모리 구조는 크게 2가지로 나뉜다.
이 두가지 데이터 중에서 디스크에 저장하거나 통신에는 값 형식 데이터(Value Type)만 가능하다.
참조 형식 데이터(Reference Type)는 실제 데이터 값이 아닌 힙에 할당되어있는 메모리 번지 주소를 가지고 있기 때문에 저장, 통신에 사용할 수 없다.
예를 들자면
포인터 변수 Class A 를 선언하고 객체를 만들어 그 주소 값이 0x00045523라고 가정하자.
그리고 이 값을 파일에 포함하여 저장했다고 해보자.