반응형

개요

- 개발자 형님과 대화를 하다보니 직렬화와 마샬링이라는 단어를 계속 사용하셨다. 문맥상 어느정도 유추할 수는 있으나 그게 어떤 뜻인지 정확히 알지 못해서 찾아보게 되었다.


마샬링이란?

 

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

 

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


직렬화란?

 

직렬화(serialize)란 자바 언어에서 사용되는 Object 또는 Data를 다른 컴퓨터의 자바 시스템에서도 사용 할수 있도록 바이트 스트림(stream of bytes) 형태로 연속전인(serial) 데이터로 변환하는 포맷 변환 기술을 일컫는다. 그 반대 개념인 역직렬화는(Deserialize)는 바이트로 변환된 데이터를 원래대로 자바 시스템의 Object 또는 Data로 변환하는 기술이다.
이를 시스템적으로 살펴보면, JVM의 힙(heap) 혹은 스택(stack) 메모리에 상주하고 있는 객체 데이터를 직렬화를 통해 바이트 형태로 변환하여 데이터베이스나 파일과 같은 외부 저장소에 저장해두고, 다른 컴퓨터에서 이 파일을 가져와 역질렬화를 통해 자바 객체로 변환해서 JVM 메모리에 적재하는 것으로 보면 된다.


출처: https://inpa.tistory.com/entry/JAVA-☕-직렬화Serializable-완벽-마스터하기 [Inpa Dev 👨‍💻:티스토리]


마샬링과 직렬화에 다른점?

 

객체를 직렬화한다는 건 객체의 복사본으로 다시 변환할 수 있는 방식으로 바이스 스트림으로 변환하다는 것을 의미한다.

마샬링이라는 용어는 파이썬 표준 라이브러리에서 내부 파이썬 객체를 저장하는 특수한 유형의 직렬화에 사용된다.

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


마샬링과 직렬화의 차이점?

 

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

 

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

 

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

반응형
복사했습니다!