마샬링(Marshalling) 직렬화(Serialization) 차이

케니스·2023년 1월 19일
0

마샬링과 직렬화 차이

개발자들과 대화에서 마샬링과 직렬화는 어떤 차이가 있는지에 대한 주제가 논의로 발생해서 이에 대해서 궁금증이 생겨 이 두 개의 차이점을 알아보고 정리해보려고합니다.

마샬링이란?

위키피디아를 번역한 내용입니다.

미국식 철자는 Marshaling

CS에서 마샬링(Marshalling)은 파일로 저장하거나 네트워크 전송하기 위해서 객체의 데이터 포맷을 적합한 형태로 변환하여 메모리에 표현하는 과정입니다. 일반적으로 컴퓨터 프로그램에서 서로 다른 파트끼리 데이터를 전달하거나 하나의 프로그램에서 다른 프로그램으로 데이터를 전달할 때 사용됩니다.

마샬링(Marshalling)직렬화(Serialization)와 유사하거나 동의어일 수 있습니다. 마샬링은 클라이언트에서 서버에 어떠한 객체를 전달하려는 인텐트나 프로세스로 표현할 수 있습니다. 인텐트는 하나의 실행중인 프로그램에서 동일한 객체를 다른 실행중인 프로그램에도 가지고 있는 것입니다. 즉, 서버에 전송되어 표시되는 객체를 의미합니다.

직렬화는 바이트 스트림을 같은 데이터를 변환하는것에만 관심이 있으므로 인텐트를 가질 필요는 없습니다. 마샬링은 직렬화와 다른 방식으로 수행되지만 직렬화 형식을 일반적으로 사용합니다.

기본 오브젝트(primitives object) 대신 혼합 오브젝트(composite object)를 사용하기 때문에 복잡한 커뮤니케이션을 단순화 할 수 있습니다. 마샬링의 반대되는 개념으로 언마샬링이 있습니다.(언마샬링은 deserialization과 유사합니다)
언마샬링 인터페이스는 직렬화된 객체를 가지고와서 내부 데이터 구조로 변경합니다.

마샬링의 정확한 정의는 파이썬, 자바, 닷넷프레임워크등의 다양한 프로그래밍의 언어마다 다르며 일부의 컨텍스트에서는 직렬화와 같은 의미로 사용합니다.

직렬화와 다른점

객체를 직렬화한다는 건 객체의 복사본으로 다시 변환할 수 있는 방식으로 바이스 스트림으로 변환하다는 것을 의미합니다. 마샬링이라는 용어는 파이썬 표준 라이브러리에서 내부 파이썬 객체를 저장하는 특수한 유형의 직렬화에 사용됩니다.

마샬링은 원격 호출을 위해 객체를 직렬화할 때 사용됩니다. 마샬링된 객체는 원래 객체의 상태를 코드베이스를 포함하여 기록합니다(코드베이스는 소스코드가 아니라 객체 코드 URL 목록). 따라서 다시 객체 상태와 코드베이스를 변환하려면 언마샬링을 수행해야합니다. 따라서 객체를 "마샬링"한다는 것은 마샬링된 객체가 "비마샬링"될 때 객체의 상태와 코드베이스를 기록하여 원본 객체의 복사본을 얻을 수 있게하는 행위입니다.


차이점

마샬링은 객체의 메모리 구조에서 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정이다. 마샬링은 프로그램간 이동할 때 사용하는 변환 과정이라고 할 수 있다. 이 과정에서 비마샬링할 때 객체의 복사본을 얻을 수 있게 원격 객체의 상태와 코드베이스를 기록한다.

직렬화는 객체의 상태를 저장하기 위해 객체를 바이트 스트림(Byte Stream) 형태로 변환하는 것을 의미한다. 즉 객체에 저장된 데이터를 스트림 형태로 쓰기위해 연속적인 데이터로 변환하는 것이다

마샬링은 직렬화보다 더 큰 개념으로 사용된다. 그래서 직렬화 가능하거나 리모트 가능한 모든 객체는 마샬링이 가능하다. 즉 정리하면 큰 차이는 직렬화는 객체가 대상이고 마샬링은 변환 그 자체의 목적으로 코드베이스를 기록하는데 차이가 있다.

참고

profile
노력하는 개발자입니다.

0개의 댓글