마샬링 (컴퓨터 과학)

위키백과, 우리 모두의 백과사전.

컴퓨터 과학에서 마셜링(marshalling, l을 하나만 사용하여 marshaling이라고도 표기)이란 한 객체의 메모리에서 표현방식을 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정이다. 또한 이는 데이터를 컴퓨터 프로그램의 서로 다른 부분 간에 혹은 한 프로그램에서 다른 프로그램으로 이동해야 할 때도 사용된다. 마셜링은 직렬화(serialization)와 유사하며 한 오브젝트(여기서는 직렬화 된 오브젝트)로 멀리 떨어진 오브젝트와 통신하기 위해 사용된다. 이는 복잡한 통신을 단순화 하기 위해, 기본 요소(primitives) 대신 통신을 위한 맞춤형 오브젝트를 사용한다. 마셜링의 반대 개념으로 언마셜링(unmarshalling)이 있다 (디마셜링-demarshalling-이라고도 불리며, 역직렬화-deserialization-와 유사하다).

용도[편집]

마셜링은 프로세스간 또는 스레드간 데이터 전송에 필요한 원격 프로시저 호출(remote procedure call, RPC) 매커니즘의 구현에 사용된다. 마이크로소프트 COM(컴포넌트 오브젝트 모델, Component Object Model)에서 인터페이스 포인터(interface pointer)는 COM 아파트먼트 바운더리(COM apartment boundaries)를 지날 때[1] (즉, COM 라이브러리 인스턴스들의 경계를 지날 때)[2] 마셜링 되어야만 한다. 닷넷 프레임워크(.NET)에서, P/Invoke 프로세스 하의 관리되지 않은 타입과 CLR 타입 간의 변환은 마셜링을 요구하는 또 하나의 예이다.[3]

나아가 마셜링은 모질라 애플리케이션 프레임워크 내에서 제공되는 XPCOM 기술을 이용하는 스크립트와 응용 프로그램 내에서도 광범위하게 이용된다. 모질라 파이어폭스 브라우저는 이 프레임워크를 이용해 만들어진 인기있는 응용 프로그램이다. 이 프레임워크는 추가적으로 스크립트 언어가 교차 플랫폼 연결(XP연결)을 통해 XPCOM을 이용할 수 있게 한다.

직렬화와의 비교[편집]

"마셜링하다"라는 용어는 파이썬 표준 라이브러리(Python standard library)에서 "직렬화하다"는 용어와 동일하게 간주되지만,[4] 자바 계열 RFC 2713에서는 동일하게 간주되지 않는다.

오브젝트를 "마셜링한다"는 것은 그것의 상태와 코드베이스를 기록하는 것을 의미한다. 이것은 마셜링된 오브젝트가 "언마셜링" 될 때, 오브젝트의 클래스 정의를 아마도 자동적으로 로딩함으로써 원본 오브젝트의 사본을 얻는 방식으로 기록되는 방식이다. 직렬화 될 수 있거나 원격의 어떤 오브젝트라도 마셜링할 수 있다. 마셜링은 코드베이스를 기록한다는 점을 제외하면 직렬화와 유사하다. 마셜링이 직렬화와 다른 점은 원격 오브젝트(remote object)를 특별하게 다룬다는 점이다. (RFC 2713)

여기에서 사용되는 '코드베이스'의 의미는 소스 코드를 일컫는 더 일반적인 의미의 코드베이스가 아니라, 자바에 국한되어 오브젝트 코드가 로드되는 URL의 목록을 참조하기 위한 것이라는 의미로 사용된다.

오브젝트를 "직렬화한다"는 것은 오브젝트의 상태를 오브젝트의 사본으로 다시 변환할 수 있는 바이트 스트림으로 변환하는 것을 의미한다.

참고 문헌[편집]

  1. “Apartments and COM Threading Models”. 2015년 9월 23일에 원본 문서에서 보존된 문서. 2014년 1월 29일에 확인함. 
  2. “CoInitializeEx function (COM)”. 《Windows Desktop App Development》. 2013년 2월 22일에 확인함. 
  3. Interop Marshaling Overview
  4. Marshal Python module

같이 보기[편집]