C# - 마샬링이란? (Marshalling)

업데이트:

마샬링

마샬링이란?

마샬링이란 한 객체의 메모리에서의 표현방식을 저장 또한 전송에 적합한 다른 데이터 형식으로 변환하는 과정입니다.

이는 데이터를 서로 다른 프로그램간에 전달할 필요가 있을 경우 사용합니다.

즉, 이는 직렬화와 유사하며 직렬화된 한 객체로, 멀리 떨어진 객체와 통신하기 위해 사용합니다.

이렇듯 복잡한 통신을 단순화하여 쉽게 데이터를 주고받을 수 있도록 해주는 것이 마샬링 입니다.


프로그래밍에서의 마샬링

클라이언트가 서로 다른 프로세스, 원격지의 메서드를 호출해야한다고 가정합시다.

서버에 넘겨지는 인자, 리턴 값들을 프로그래밍 인터페이스에 맞도록 데이터를 조직화하고, 미리 정해진 다른 형식으로 변환합니다. 이것이 프로그래밍에서의 마샬링 입니다.

이는 XML로의 마샬링, Byte 스트림으로의 마샬링 등 다양한 방법이 있는데 이처럼 데이터 교환시 어떠한 정해진 표준에 맞게 해당 데이터를 가공하는 것이 마샬링이라면, 가공된 데이터를 원격지에서 사용하기위한 과정을 언마샬링 이라고 합니다.

마살링도 참조 마샬링과 값 마샬링으로 구분할 수 있습니다.

  • 참조 마샬링(MBR): MarshalByRefObject 를 상속
    • 객체의 메모리를 통째로 저장한 후 다른 머신에서 객체를 복원해서 사용하는 기술
  • 값 마샬링(MBV): Serializable Attribute를 지정하거나 ISerializable 인터페이스를 구현
    • 참조 마샬링이란 객체를 핸들하기 위한 정보만을 묶어서 넘긴 후 그 정보를 이용해서 원격으로 객체를 핸들하는 기술

마살링은 직렬화와 유사하기도 합니다. 닷넷에서 객체를 저장하는 기술을 직렬화라고 하며, 복원하는 기술을 역직렬화라고 합니다. 이러한 직렬화와 마샬링의 차이는 다음 포스팅에서 다뤄보도록 하겠습니다.


결론

클라이언트에서 마샬링된 데이터를 서버나 다른 프로세스에 전달하게 되면, 그 원격지에서는 데이터를 받아 언마샬링하여 사용함으로써 상호간의 통신하며 데이터를 사용할 수 있습니다.

이전 포스팅에서 프로세스 통신에 대해 소개한 적이 있는데, 그 예제에서 사용했던 것이 바로 바이트 스트림으로의 마샬링 입니다.

댓글남기기