Development/.Net FrameWork

닷넷 리모팅 서비스

연탄집게 2011. 8. 31. 11:04

기본 개념 

  닷넷 리모팅 서비스는 서로 다른 프로세스 내의 Application Domain 간 혹은 다른 호스트 간에 존재 하는 클레스를 접근(통신)하기 위한 기술이라 할 수 있다. 앞에서 언급했듯이 기존 닷넷 엔터프라이즈 서비스라 할 수 있는 기술로는 DCOM이 있었다. 그러나 DCOM은 플렛폼에 많은 제약사항이 있었고 유연성이 많이 떨어 졌다. 즉, 닷넷 리모팅 서비스는 DCOM의 단점을 극복하기 위해 나온 진보된 기술이라 할 수 있다.

 

어플리케이션 도메인과 닷넷 리모팅 서비스와의 관계

  리모팅은 원격 Application Domain 의 클레스를 엑세스하기 위한 기술이다. Application Domain은 CLR에서 Application이 수행되는 추상적인 공간을 말한다. 또한 운영체제에서 말하는 프로세스 보다는 더 작고 가벼운 개념으로써, 하나의 운영체제의 프로세스는 여러 개의 Applicaton Domain을 호스팅 할 수 있다.

  서로 다른 Application Domain은 상호 독집적이며 다른 도메인에 대해 보호 받게 되고, 서로 공유 하는 것이 없다. 한 Application Domain은 다른 Application Domain의 어떤 객체나 코드로 직접 엑세스 할 수 없으며 한 Application Domain의 치명적 오류가 다른 Application Domain에 영향을 주지 않는다. 따라서 Application Domain사이에서 통신 할 방법이 필요하게 되었는데 이것이 닷넷 리모팅이라 할 수 있다.

 

마샬링

  마샬링은 스레드나 프로세스 경계를 통과하는 메소드 호출을 데이터로 만들어서 전송하는 기술을 말한다.

  다시 말하자면, 프로세스A가 호출에 관련되어 있는 매개변수, 리턴값 등을 일련의 바이트 스트림으로 변경하여 이것을 프로세스B에게 IPC나 네트워크 등의 방법을 통해 전송한다. 이러한 일련의 작업을 마샬링이라 한다. 또한 프로세스B는 마샬링된 데이터를 받이 매개변수 등을 추출해 호출을 위한 스택 프레임을 구축해 메소드는 호출한다. 이를 언마샬링이라 한다.

 

  객체를 마샬링 하는 방법에는 Marshal By Value(MBV)와 Marshal By Reference(MBR)이 있다.

  MBV는 객체의 데이터가 바이트스트림으로 직렬화 되고 직렬화한 객체 데이터가 전송되며 언마샬링 과정에서 직렬화한 객체 데이터가 전송되며 언마샬링 과정에서 먀샬링된 데이터를 추출해 새로운 복사본을 만든다. 반면 MBR은 복사가 아닌 객체의 참조만이 목적지에 도달한다. 이 때 객체에 대한 참조를 프록시(Proxy)라 한다.

  닷넷에서 마샬링은 기본적으로 MBV를 사용한다.

 

* 객체가 마샬링 되는 과정

 

 

채널과 포맷터

  닷넷 리모팅 서비스에서 채널이란 메세지를 전송할 때 어떤 방법으로 어떤 프로토콜로 전송할 지를 결정하는 것을 말한다. 기본적으로 HTTP채털과 TCP채널이 있다. 또한 포맷터란 원격 메소드 호출을 메세지 형태로 바꾸는 것을 말하며 기본적으로 SOAP포맷터와 바이너리 포맷터가 있다.

  TCP채널은 바이너리 포맷터를 기본적으로 사용하며, HTTP채널은 SOAP 포맷터를 디폴트로 사용한다.

  HTTP채널을 사용하는 SOAP포맷터는 방화벽 밖에 인터넷 환경에서 사용하기 유리 하지만 XML형태로 되어 있기 때문에 성능이 상대적으로 떨어진다. 반면 TCP채널을 사용하는 바이너리 포맷터는 인터넷 환경에서는 적당하지 못하나 성능은 매우 우수하다.

 

SingleCall, Sinlgeton

  닷넷리모팅에서 원격객체를 호출할 때 취하는 모드로는 SingleCall방식과 Singleton방식 그리고 Client Activation방식이 있다.

  SingleCall방식은 호출시 마다 객체가 생성되고, 생성된 객체는 호출을 처리하고 가비지컬렉션으로 남게된다.

  Singleton방식은 하나의 객체가 모든 클라이언트를 처리한다. 따라서 전역적으로 상태를 유지시키고 싶을 때 사용하는 방식이다.

  마지막으로 Client Activation방식이 있는데 이 방식은 Client가 수명주기를 관리 하는 방식이다. 즉, 클라이언트 측에서 타임아웃을 설정하거나 명시적으로 수명주기를 결정하는 명령어를 수행할 수 있다.