본문 바로가기

C#

[C#] 마샬링이란(marshalling)

◈ 정의

프로그래밍에서 마샬링은 RPC, RMI 등에서 클라이언트가 원격지(서로 다른 프로세스)의 메서드를 호출 시

서버에 넘겨지는 인자, 원격지 함수의 리턴 값들을 프로그래밍 인터페이스에 맞도록 그 데이터를 조직화하고,

미리 정해진 다른 형식으로 변환하는 과정



◈ 설명

1) XML로 마샬링, byte 스트림으로 마샬링 등 데이터 교환시 어떠한 정해진 표준에 맞게 해당 데이터를 가공하는 것을 마샬링, 언마샬링 이라고 한다.


2) 클라이언트에서 마샬링된 데이터를 서버에 전달하게 되면, 서버에서는 그 데이터를 언마샬링하여 사용함으로써 원격지(다른 프로세스)간의

데이터 사용이 가능하게 된다.


3) 동일 어플리케이션 도메인에 존재하는 객체의 메서드를 호출할 때의 매개변수나 결과값을 전달할때에는 스택을 통하여 전달된다. 

하지만 동일한 어플리케이션 도메인이 아닌 경우에 서로 다른 스택을 사용하기 때문에 객체의 메서드를 호출하거나 결과값을 전달할 때, 

스택을 사용할 수 없다. 이러한 경우에는 메소드를 호출하기 위하여 사용되는 매개변수는 바이트 스트림(메모리 버퍼)에 기록되고 기록된 데이터가 네트워크나 기타 방법을 통하여 전달이 된다. 이렇게 매개변수나 결과값을 바이트 스트림으로 변환하는 것을 마샬링(Marshaling)이라고 하며, 바이트 스트림으로 부터 매개변수나 결과값을 추출하는 것을 언마샬링(Unmarshaling)이라고 한다.



◈ 종류

1) MBV(Marshal By Value) : 메모리의 내용을 그대로 복사하는 값에 의한 마샬링

 - 정수나 문자열과 같은 기본 데이터 타입

 - 목적지에는 객체 복사본이 생성되고 클라이언트는 복사본에 접근한다.


2) MBR(Marshal By Reference) : 객체의 참조(Object Reference)에 의한 마샬링

클라이언트는 원본 객체에 접근한다.

'C#' 카테고리의 다른 글

[C#] MemberwiseClone() 함수  (0) 2018.07.16
[C#] enum의 Flag 연산  (0) 2018.07.16
[C#] Delegate  (0) 2018.07.16
[C#] Boxing / UnBoxing / as  (0) 2018.07.11
[C#] 서로 다른 3가지 Timer  (0) 2018.07.11