본문 바로가기

Programming/etc

RPC와 XML-RPC에 대해.

기말고사 준비과정에서 정리한 RPC와 XML-RPC에 대해 적어보겠습니다.

RPC는 한 프로그램이 네트워크상의 다른 컴퓨터에 위치하고 있는 프로그램에
서비스를 요청하는 데 사용되는 프로토콜로써,
이때 서비스를 요청하는 프로그램이 클라이언트이고, 서비스를 제공하는 프로그램이 서버입니다.
단지, 소켓만을 이용하여서도 비슷한, 어쩜 동일한 서비스제공이 가능하겠지만 RPC가 제공하는 다양한 기능들로
인하여 손쉽게 다른 컴퓨터와의 통신을 마치 로컬함수를 호출하듯이 사용이 가능합니다.
다른 정상적인 또는 자체적인 프로시저의 호출과 마찬가지로, RPC도 요청하는 프로그램이 원격절차의 처리결과가
반환될 때까지 일시정지되어야 하는 동기운영입니다. 그러나 가벼운 프로세서의 사용이나, 같은 주소공간을
공유하는 스레드 등은 여러개의 RPC들을 동시에 수행될 수 있도록 허용합니다.

RPC는 windows인증, MSMQ, Exchange Server, SMS Server, DCOM, DTC 등등 열거하기도 힘들만큼 많은
(사실 전산과로 처음 접해보는 용어가 몇몇 있을만큼...ㅠㅠ)
windows 운영체제 서비스와 독립 서버 제품군에서 사용되고 있습니다. 이때 앞에서 열거한 DTC가 RTC를 사용한다는
점은 현 시점에서 중요합니다.
DTC란 분산 트랜잭션을 관장하는 마이크로소프트의 TM(Transaction Manager)이자 COM+를 이용하여
SQL Server와 트랜잭션을 사용하려치면 반드시 사용해야 하는 중요한 서비스입니다. 그런데 이러한 DTC가 사용하는
프로토콜이 바로 RTC입니다.

XML-RTC란 다른 기종의 운영체제에서 인터넷을 통하여 다른 환경에서 수행되는 프로시져를 호출할 수 있도록 하는 규정과 그 구현입니다. 전송은 HTTP를 이용하며, 인코딩은 XML을 이용합니다. RPC는 이기종간의 컴퓨터에서 이루어질 수 있기 때문에, 파라미터 전송방법은 좀 더 일반화된 형태를 취해야합니다. 여러가지 구성방법이 있겠지만, XML-RPC는 인수나 계산결과를 주고 받기 위해서 XML문서형식을 사용합니다. XML은 문서교환 형식의 표준으로 자리를 잡아가고 있습니다.(이젠 일반화되지 않았나요? ㅎㅎ) 이렇게 함으로써 기종이나 플랫폼에 상관없이 표준화된 문서로 정보를 교환할 수 있습니다.
XML-RPC는 파이썬, 자바, 펄, Tcl, COM, PHP, ASP, Apple Script, REBOL, RealBasic, C/C++ 등으로 구현되어 있습니다.


RPC의 실제 수행과정
RPC를 사용하는 프로그램 문장들이 실행프로그램으로 컴파일 될 떄, 컴파일 된 코드내에 RPC의 대리인처럼
동작하는 '스터브'가 포함됩니다. 그 프로그램이 실행되어 절차호출이 이루어질 때 스터브는 그 요구를 받아서
그것을 로컬컴퓨터 내에 있는 클라이언트 런타임 프로그램에게 전달합니다.
클라이언트 런타임 프로그램은 원격 컴퓨터와 서버프로그램과 어떻게 접촉해야하는지에 대한 지식을 가지고 있으므로,
네트워크를 통해 원격절차를 요구하는 메시지를 보냅니다. 이와 유사하게 서버는 런타임 프로그램과 원격절차 그 자신과
인터페이스를 하는 스터브를 포함합니다. 처리결과들은 같은 방식으로 되돌려집니다.