본문 바로가기

0x02 Platform & Framework/0x023 WebService

분산개체 애플리케이션에서의 스텁(stub), 스켈레톤(Skeleton)

웹서비스 프로그래밍을 하기전에 앞서 앞서 말했던 RPC방식에서 중요한 개념인 스텁과 스켈레톤에 대해서 알고갑시다^^ 잘 정리가 된 글이 있어 가져왔습니다.


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

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

 

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

 

스텁(stub)의 작동원리

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

 

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

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

스텁(Stub)과 스켈레톤(Skeleton)


스텁은 객체 그 자체와 동일한 비즈니스 메소드를 가진 인터페이스를 구현하지만, 스텁의 메소드는 비즈니스 로직 자체를 담고있지는 않으며, 클라이언트가 스텁의 비즈니스 메소드를 호출하면 호출된 메소드 명과 매개변수로 전달된 값들이 스트림 형태로 네트워크를 통해 스켈레톤에 전달된다.

 

해당 스트림을 스켈레톤이 받게 되면 스켈레톤은 스트림을 분석하여 어떤 메소드가 요청되었는지를 파악하고, 서버에 있는 객체의 비즈니스 메소드를 호출하게 된다. 메소드의 실행 결과값은 다시 스켈레톤에 의해 스텁으로 전달되며, 스텁은 마치 해당 비즈니스 로직을 로컬 컴퓨터에서 처리한 것처럼 클라이언트 애플리케이션에 결과값을 전달한다.


짐작하겠지만, 이 과정은 네트웍을 통한 자료교환을 포함하므로, 로칼에서의 메소드 콜보다는 훨씬 많은 시간을 소모한다. 따라서 원거리 호출의 횟수를 줄이는 것은 수행성능 향상을 위해 반드시 고려되어야 할 사항이다.

 

아래 그림은 Java RMI를 이용하였을 경우의 클라이언트 측의 스텁과 서버측의 스켈레톤의 형상을 보여주고 있다.