Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


RMI Peering System Construct
 
여러분들이 RMI에 대하여 조금만 관심있게 공부하였다면 activation, callback, factory, agent등의
용어를 들어봤을것이다. 실제 RMI를 이용하여 채팅시스템을 만들 경우 서버측에 broadcast때문에
클라이언트의 정보가 몰리는 것을 볼수 있습니다. 우리가 보는 일반 메신져기반의 시스템들은
서버과 접속함과 동시에 자기자신의 친구들은 P2P(Peer to Peer)형태로 연결외어 있는 형태를 취합니다.
여기서는 그러한 접속정보가 있을경우 서버측에서 메신져 접속시 Real P2P형태로 연결시킬수 있는
RMI Peering Service를 구현해보겠습니다. ( 2003/02/28 ) 56
Written by ienvyou - 최지웅
1 of 1
 
정말 오랫만에 글을 기고하는 것 같슴다. 자신의 게으름이 가장 큰것같은 생각이구요.
요즘은 짤막짤막한 테크닉위주의 프로그램이 아닌 view framework단과 server측
component에 대한 코딩을 주로 하다보니 아티클로 올리기엔 너무나도 방대한 분량들이
되어버렸습니다. 이번편에서 만들어볼것은 이미 위의 요약을 통해서 여러분들이
모두 보았을것이라 생각해요.

이제 들어가볼까요?
우리가 채팅이나 메신져프로그램을 구현하다고 했을때 고려하는 방향은 아주 많을 것이에요.
일반 소켓프로그램으로 작성했을 경우 클라이언트와 서버를 어떤 방식으로(Server Centric인지 Peer to Peer)
구성할것인지를 가늠해봐야 할것이고 그러한 소켓프로그램을 작성했을 경우 실제 하나의 서버에서
수용할수 있는 클라이언트 스레드의 갯수, 시스템부하, 동시사용자수등을 고려하게 되는데
비록 여기서 보여줄 RMI라고 해서 위의 제한사항을 무시하는 것은 절대 아님다.
본 아티클은 그러한 측면의 접근이 아니라 구현의 측면에 중점을 둔것임다.
예전부터 필자는 Performance에 지대한 관심을 가져왔고, 지금도 당근 그렇겠죠.
분명 이 글보구 조용히 각설하구 본론만을 이야기해라~라는 분이 계시겠지만 할말은 하고 넘어가야죠..
그건 글 다 쓰고 나중에 쓰져...

들어감다.

일반 소켓프로그램의 3-tier를 이용한 프로그램을 CORBA의 꼬봉(?)정도인 RMI가 간단하게 구현할수
있다는 걸 여러분들은 다 아실겁니다. 모르시면 technical content의 rmi작성하기라는 제 글을 읽어보시구요..
근데 그걸 가지고 chatting을 만들라하면 callback이란 개념을 당연히 가지고 있어야겠죠?
즉, client도 listener비슷한걸 가지겠다 이겁니다. 그래서 서버가 클라이언트정보를 이용하여
다시 호출하는 형태죠.
어떻게 구성되어있는지 classdiagram을 보실까요?


서버측의 ParterServer와 PartnerServerImpl이란 서버 및 servant를 모두 한 클래스안에 집어넣어놨어요
헛갈리다고 욕하시면 이 글을 읽은 님이 의심(?)스럽슴다. "저희 연변에서는~~" 헤헤

작동방법을 보면요, 우선 서버측에 클라이언트가 자신의 객체를 callback시킬수 있도록 등록합니다.
그리고 그 reference를 서버는 메모리에 저장하면서 어떤 다른 친구(client)가 호출했을 경우에
그 친구의 reference를 요청한 클라이언트 측으로 되돌려줍니다.
그렇게 되면 실제 요청받은 측에서는 자신이 서버가 되어 다른 클라이언트의 요청을 처리할수 있는
RMI server로 돌변한 후에 각자가 통신을 하는 구조로 되어있습니다.



1. 먼저 PartnerServerImpl을 띄운다.

2. ParterImpl은 클라이언트로서 자신의 이름으로 객체를 찾을수 있게끔
서버에 등록후 자신의 이름을 서버측의 해쉬테이블에 등록한다.

3. 서버측은 연결이 되면 부하를 줄이기 위하여 서버의 해쉬테이블의
객체를 삭제하고 연결하고자하는 클라이언트의 remote reference를
요청한 클라이언트측으로 콜백한다.

4. 실제 연결을 맺은 클라이언트들은 자신들끼리 통신을 한다.

서버실행방법
java PartnerServerImpl host jndi name

클라이언트 실행방법
java PartnerImpl host port service yourname

host : PartnerServer가 돌고 있는 곳의 호스트아이피
port : Naming서비스되고 있는 포트
service : 서버측에서 돌고 있는 서비스명
your name : 내 이름을 등록하면 된다.

이 간단한 글 쓰는데 1시간이란 어마어마한 시간이 지났슴다. 여러분들
공부열심히 합시다 !!!
 
1
References
 
this articles source : rmi_peering_src.zip
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD