2016년 6월 6일 월요일

Marshalling

마샬링(Marshalling)은 하나 이상의 데이터 항목을 우선 순위에 따라 통신 채널을 통해 전송할 때 팩킹(packing)하는 과정이다.
이러한 packing 과정은 연속되지않은 메모리 위치상에 저장된 값에 관한 정보를 모을 뿐만 아니라 플랫폼 별로 상이한 데이터 타입을 메시지를 주고 받음에 있어 합의된 표준 형식으로 변환하여 준다.




RPC(Remote Procedure Call)와 같은 경우 프로시저의 파라미터는 네트워크를 통해 프로시저가 수행될 곳으로 전송이 되고 프로시저는 그 곳에서 실행이 된다. 프로시저의 수행이 끝나고 그 결과를 다시 네트워크를 통해 호출자에게 넘겨줌으로써 마치 일반적인 프로시저가 호출되는 것 처럼 동작한다. 이 과정에서 네트워크의 호출 부분은 사용자에게 감춰짐으로써 사용자는 일반 프로시저 호출을 하듯이 네트워크 너머의 프로시저를 호출할 수 있는 것이다.
이러한 네트워크간의 프로시저 호출에는 상이한 운영체제와 언어간에 표준화된 메시지전송 규약이 필요하게 되며 이러한 규약에 맞춰서 파라미터를 하나의 네트워크 데이터로 Packing하는 마샬링이 필요하게 된다.

즉, 파라미터는 표준 표현방법으로 마샬링 되어야한다. 파라미터는 integer와 같은 단순한 타입과 C의 구조체나 파스칼의 레코드와 같은 복합 타입으로 구성되어 있다. 더군다나 각 타입은 자기 자신만의 표현방법을 가지고 있기 때문에, 다양한 파라미터 타입을 실제로 통신을 하는 모듈이 이해할 수 있도록 해야 한다. 예를 들어 4바이트의 character는 인터프리트가 되지 않는다. 반면에 4바이트의 integer는 자신의 바이트 예약순서에 따라 인터프리트될 필요가 있는 것이다.

이렇게 마샬링 되어 전송된 네트워크 데이터를 다시 이해할 수 있는 데이터로 풀어내는(unpacking)하는 것을 언마샬링(Unmarshalling)이라고 하며 RPC나 자바의 RMI와 같은 경우 데이터를 마샬링하여 네트워크를 통해 원격 프로시저에 전송하고 그 데이터를 언마샬링하여 이해할 수 있는 데이터로 만든 후 요청된 작업을 수행하여 그 결과를 다시 마샬링 하여 원래 호출자에게 전송하는 것이다.

댓글 없음:

댓글 쓰기