[펌글] Stub/Skeleton, RMI 통신 매커니즘

By | 1월 4, 2010
- 출처 : http://blog.naver.com/chetgood/80045310424 -

<Stub/Skeleton을 통한 RMI 통신 메커니즘>

 
미들웨어인 Stub/Skeleton에 대해 상세히 설명하겠습니다.
RMI가 외부에 보여지는 모습이라면, Stub과 Skeleton은 이런 메커니즘을 가능하게끔 RMI가 내부에서 여러가지 복잡한 과정을 처리하기 위해 사용하는 미들웨어입니다. Stub과 Skeleton은 우리가 만든 원격 객체를 rmic라는 컴파일러를 사용해서 만드는데, 이렇게 만들어진 Stub과 Skeleton은 각각 클라이언트와 서버에 위치하여 실제로 클라이언트와 서버 사이의 통신 과정을 처리해줍니다.
 

Stub은 클라이언트
프로그램에게 원격 객체가 마치 로컬에 있는 것처럼 보이도록 해줍니다. 실제로, 클라이언트 프로그램이 원격 객체의 메서드를 호출하면, 내부적으로는 Stub의 메서드가 호출이 됩니다. 호출된 Stub의 메서드는 클라이언트의 메서드 호출을 네트워크를 통해 원격 객체에게 전송해 줍니다. Stub은 원격 객체에게 메서드 호출을 전송해주기 위해 서 다음과 같은 단계를 거칩니다.
 
1.  원격 객체를 가지고 있는 서버의 JVM(자바 가상 머신)과 연결 상태를 만든다.
2. 원격지의 JVM에게 전송될 메서드 호출의 매개변수를 특정한 형식에 맞춰서 정렬 시키고(이 과정을 Marshaling이라고  합니다) 전송한다.
3. 원격 메서드의 실행 결과를 기다린다.
4. 원격 메서드의 반환 값이 전송되어 오면, 그 값을 읽어서 해석한다.(이 과정을 UnMarshaling이라고 한다).
5. 반환 값을 호출자에게 반환 한다.
 
※ 잠시 Marshaling과 UnMarshaling에 대해 설명을 드리고 넘어가겠습니다. 먼저 Marshaling은 데이터를 바이트로 쪼개서 TCP/IP 같은 통신 채널을 통해 전송될 수 있는 형태로 바꿔주는 과정입니다. 그와 반대로 UnMarshaling은 데이터를 전송받은 후에 원래의 형태로 복원하는 것을 말합니다. Marshaling을 수행하기 위해서는 ObjectOutputStream클래스를 사용하며, UnMarshaling을 수행하기 위해서는 ObjectInputStream클래스를 사용합니다.
→ 이런 면에서 보면 참 JAVA는 개발자가 사용하기 편하도록 만든 거 같다니까... ^^
 

서버는 클라이언트가 가지고 있는 Stub에 상응하는 Skeleton을 가지고 있습니다. Skeleton은 Stub이 하는 것과 반대의 일을 한다고 보시면 됩니다. Skeleton은 Stub으로부터 메서드 호출을 전송 받아서, 해당하는 원격 객체에게 호출을 넘겨주고 다시 그 결과를 Stub에게 전송하는 역할을 합니다. Skeleton은 다음과 같은 단계를 거쳐 클라이언트의 메서드 호출을 처리합니다.

 
1. 클라이언트의 Stub으로부터 메서드 호출이 전송되어 오기를 기다린다.
2. Stub이 메서드 호출을 전송해주면, 네트워크로부터 매개 변수 값을 읽고 해석한다.(UnMarshaling)
3. 해당하는 원격 객체의 메서드에게 매개 변수를 넘겨주고 실행시킨다.
4. 실행된 메서드의 결과를 특정한 형식에 맞춰서 정렬시키고 전송한다. (Marshaling)
 
 
※ Stub, Skeleton은 매개변수의 직렬화, 역 직렬화 같은 처리와 네트워크 레벨에서의 통신을 감춰줌으로써, 우리가 작성할 어플리케이션과 RMI의 내부 구조 사이의 인터페이스 역할을 합니다. 이런 특성으로 인해, 프로그래머는 마치 로컬에 존재하는 객체의 메서드를 호출하는 것처럼 일반적인 자바 플랫폼상의 프로그래밍 스타일을 그대로 사용할 수 있습니다. 이렇게 객체 지향적으로 만들어지는 분산 시스템을 분산 객체 모델(Distributed Object Model)이라고 합니다.
 
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments