마샬링 (컴퓨터 과학)

위키백과, 우리 모두의 백과사전.
둘러보기로 가기 검색하러 가기

컴퓨터 과학에서 마샬링(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의 목록을 참조하기 위한 것이라는 의미로 사용된다.

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

참고문헌[편집]

같이 보기[편집]