본문 바로가기
프로그램 개발(분석, 설계, 코딩, 배포)/2. 개발

개발_RPC_COM 스텁 프록시 마샬링 언마샬링

by 3604 2022. 11. 4.
728x90

스텁 프록시 마샬링 언마샬링

참고 URL
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=178730&ref=178713

COM객체(로컬) - proxy - 마샬링 - (네트워크) - 언마샬링 - stub - COM객체(원격)

프록시와 스텁을 이해하시려면 먼져 com을 이해 하셔야 하구, com을 이해 하시려면 가  
상 함수를 이해 하셔야 합니다.  
  
1. 가상 함수  
가상 함수가 객체에 정의 의해 구현 될때 객체는 가상함수 table의 주소를 가지는 변수  
를 포함 합니다. 그리고 객체 영역 밖의 부분에 가상 함수 table의 생성 됩니다.  
가상 함수 table이란 현재 객체에 정의된 모든 가상 함수의 코드 주소를 저장 합니다.  
다시 말하면 가상 함수를 구현한 객체는 1개의 가상 함수 table pointer를 가진다는 이  
야기 입니다.  
  
2.COM  
위에서 말한 가상 함수 table pointer이란걸 com에서는 interface라고 합니다.  
다시 말하면 n개의 interface 에서 상속 받은 COM을 구현 하면 내부적으로 n개의 가상  
함수 table pointer(<-n개의 interface)를 가지고 있습니다.  
  
따라서 이것을 사용 하고자 하는 client application에서는 COM을 생성 하고, 원하는 가  
상 함수 table pointer을 얻고, 그리고 거기에 속한 함수를 골라 사용 합니다.  
  
근데 COM은 Application으로 load되는 메모리 영역에 따라 InPocess와 OutProcess로 다  
시 나뉩니다.  
  
3. 프로시 스텁  
InPocess의 경우 COM이 application의 메모리 영역의 일부로 올라오기 때문에 COM에서  
알려준 함수 table pointer를 application은 바로 사용 할수 있습니다.  
  
그러나 OutProcess는 COM이 load되는 메모리 영역이 applicaton과 다른 경우 입니다.  
가령 COM은 network환경에 있을 경우 입니다.  
이경우 COM이 알려준 함수 table pointer를 application은 이해 할수 가 없습니다.  
  
따라서 이런한 환경에서는, application은 COM을 마치 자기의 메모리 영역에 있다고 생  
가 하고 작업 할수 있는 방법이 제공 되어야 합니다.  
  
그래서 프록시(application영역에 존재)와 스텁(COM영역에 존재)이 필요 합니다.  
프록시는 COM이 제공 하는 인터페이스를 그대로 가지고 있으며, application이 access할  
수 있는 application의 영역에 존재 합니다.  
application이 프록시에 있는 interface를 이용해 함수를 call하면,  
프록시는 멀리 있는 스텀과 IPC를 통해 정보를 전달하고, 스텁은 다시 COM에게 요청 해  
서 결과를 다시 반대 과정을 거처 client에거 보냅니다.  
  
여기서, 가령, application과 COM이 함수를 인식 하는 방법이 다를수 있습니다.  
보낼땐 finc(short a)라구 했더니 받은쪽에서는 finc(unsigned int a)라고 인식 한다는  
지...다시말해 IPC할때 표준이 있어야 한다는 이야기 입니다.  
  
따라서 프록시는 요청을 표준화로 바꾸는 작업(마샬링)으로 바꾸는 일이 필요하구,  
이를 받은 스텁은 다시 COM이 알아 들을수 잇는 형태로 바꾸어(언마샬링)야 합니다.  
  
전체적인 개념을 잡으시는데 도움이 될까 해서 썼습니다.  
아마도 세부적인 사항까지 원하시면,,실제 소스를 함 보셔야 할겁니다. 그럼 수고 하세  
요  
728x90