카테고리 없음
직렬화(Serialization)와 마샬링(Marshalling)에 대해서
수마트
2020. 1. 29. 22:36
1. 직렬화(Serialization)
직렬화는 객체의 상태를 저장하기 위해서 객체를 바이트 스트림(Byte Stream) 으로 변환하는 것을 의미한다.
1.1 바이트 스트림(Byte Stream)
바이트 스트림이란(Byte Stream) 끊임없이 연속되는 바이트 열을 의미한다.
즉, 직렬화(Serialization)는 객체에 저장된 데이터를 스트림(stream)에 쓰기 위해서 연속적인(serial) 데이터로 변환하는 것이라 보면 된다.
1.2 직렬화 활용
- 파일 저장소 (File storage) : 프로그램 실행 중에 생성된 데이터를 영구 저장소(파일 시스템) 등에 저장한 후, 이후에 프로그램이 다시 실행되었을 때 저장된 데이터를 메로리 상에 객체(혹은 구조체) 형태로 복구해 사용한다.
- 네트워크 통신 (Network communication) : 네크워크 상에 떨어져 있는 프로그램 간에 데이터를 주고 받기 위해 데이터를 직렬화한 후, 패킷(packet)에 담아 전송한다.
- 데이터베이스 (Database) : 복잡한 형태의 객체를 데이터베이스에 저장할 때 직렬화한 문자열 형태로 테이블의 컬럼에 저장하기도 한다.
- 웹 환경 (Web environment) : 웹 서버에서 브라우저(클라이언트)로 구조화된 데이터를 전송할 때 직렬화 한 후 JSON 형식 등을 전달하는 방식이 점차 많이 사용되고 있다.
2. 마샬링(Marshalling)
객체의 메모리 구조를 저장이나 전송을 위해서 적당한 자료형태로 변형하는 것을 의미한다.
또한 이는 데이터를 컴퓨터 프로그램의 서로 다른 부분 간에 혹은 한 프로그램에서 다른 프로그램으로 이동해야 할 때도 사용된다.
구체적으로 말하자면 managed data 형을 unmanaged data 형으로 변환시키는 과정이라 할 수 있다.
managed data 와 unmanaged data에 관한 이해는 여기를 참고 하고 이해하였다.
3. 차이점
마샬링(Marshalling)과 직렬화(Serialization)의 가장 큰 차이점은 직렬화는 객체가 대상이지만 마샬링은 변환자체의 목적이 있다.
직렬화(Serialization)는 구조화된 객체를 가져와 복사하여 byte stream으로 변환하는 것으로 주로 네트워크 간의 데이터를 주고 받을 때 유용하며 마샬링(Marshalling)은 데이터 코드 베이스를 기반으로 가져와 만드는 것이라고 보면 된다. 그래서 주로 마샬링(Marshalling)은 다른 언어 혹은 다른 플랫폼에서 서로 데이터를 주고 받을 때 사용한다.