Work

[펌] Stub code

runicode 2013. 11. 26. 14:23
분산개체 애플리케이션은 다음과 같은 목적을 추구합니다. 
  • 덩치가 큰 프로그램(개체)은 서버만 가지고 있는다. 
  • 프로그램 실행은 서버가 담당한다. 
  • 클라이언트에게는 이 프로그램(개체)을 조작하는 데 필요한 최소한의 코드만 전달한다. 

여기서 세번째 목적을 수행하는 데 사용되는 것, 즉, 프로그램(개체)을 조작하는 데 필요한 최소한의 코드가 바로 스텁과 스켈리턴입니다. 가령 TV 보기 서비스를 제공하기 위해 덩치가 큰 TV 가 아니라 이를 조작하는 리모콘만 전달해도 충분한 것입니다. 

 

스텁(stub)은 원래 연필 토막이나 담배꽁초처럼 쓰고 남은 조각을 말합니다. 원래 단어의 의미보다 분산개체 애플리케이션에서 스텁stub은 그 자체로 제 기능은 발휘하지 못하지만 원래 개체가 무엇인지 알아낼 수 있는 참조 역할을 하고, 원 개체의 기능조작을 위임받은 위임자proxy 역할을 하는 작은 개체로 생각하면 됩니다. 

 

스텁(stub)의 작동원리

원격 개체를 이용하고자 하는 쪽(클라이언트)은 그 원격 개체를 직접 조작하는 것이 아니라 그에 해당하는 스텁의 메쏘드를 불러내면, 이 스텁이 대신하여 원격 개체의 해당 메쏘드를 수행하는 것입니다.
원격 개체에 대응하는 스텁은 그 원격 개체가 이행하는 똑같은 원격 인터페이스들을 이행합니다. 이렇게 함으로써 스텁은 원격 개체가 이행하는 원격 인터페이스들중 하나로 캐스트(형변환)할 수 있습니다. 물론 이렇게 하면 수신 가상기계에서는 캐스트한 원격 인터페이스가 포함하는 메쏘드만 사용할 수 있습니다.

 

그러면 클라이언트가 어떻게 원격개체 메쏘드를 불러내어 조작하는지 구체적인 과정을 알아보겠습니다. 

  • 클라이언트는 조작하고자 하는 원격개체를 포함하는 원격(서버) JVM 과 접속하여 그 원격개체를 찾는다lookup.
  • 서버는 그 원격개체에 대응하는 원격 스텁을 클라이언트에게 전달한다.
  • 클라이언트는 대상 스텁의 원하는 메쏘드를 불러낸다. 이 과정에서 내부적으로 그 메쏘드의 파라미터들을 마샬링marshalling하여 원격 JVM 으로 전송한 뒤 그 응답 결과를 기다린다.
  • 서버의 스켈리턴은 호출자(클라이언트)가 보낸 마샬된 파라미터를 원래대로 복원(언마샬링unmarshal)한다.
  • 이 파라미터를 실제 원격 개체에게 전달하여 호출 대상 메쏘드를 불러낸다.
  • 호출 대상 메쏘드는 이행 결과 값이나 예외를 스켈리턴에게 되돌린다.
  • 그러면 스켈리턴은 이 되돌림값이나 예외를 마샬링하여 호출자에게 전달한다.
  • 마지막으로 원격 JVM(서버)으로부터 받은 되돌림값이나 예외를 언마샬링unmarshalling하여 이를 호출자에게 되돌린다.

[출처] 스텁(stub)|작성자 kamisoo