본문 바로가기

컴퓨터공학/Java

CS> RMI 아키텍쳐 기본 원리

Remote method invocation 

서로 다른 언어의 통신을 위한 CORBA(Common Object Request Broker Architecture)  기반으로 자바에 적용된 것이다.

순수 자바끼리 분산환경에서 JVM 간의 통신을 지원하기 위해 설계되었다.

서로 다른 JVM의 통신은 자바 프로그램간에 원격 통신이다. 

RMI는 기본적으로 원격 객체를 가지고 있는 RMI 서버 모듈과 원격 객체에 있는 Method를 호출하는 RMI 클라이언트 모듈로 구성되어있다. 

 

Basic RMI Architecture

RMI Registry는 Client 모듈과 Server 모듈을  연결시켜줄 수 있는 일종의 listener 서비스가 있다. 

서버에는 호출이 될 method를 갖고 있는 원격 객체(Remote object)가 있다.

클라이언트는 서버와는 별도의 JVM 에서 실행이 되는 자바 클라이언트 프로그램이다.

서버에서는 원격 객체를 bind or rebind method를 이용해서 RMI Registry 등록한다.

그리고 클라이언트의 호출을 기다린다. 

클라이언트는 RMI Registry에 접속해서 원격객체의 주소값 Remote reference를 가져온다. 

remote reference를 가지고 remote object 에 있는 remote method 호출하면서 통신이 가능하게 된다. 

 

예를 들면 유사한 작동원리는 구글과 웹 사이트를 생각하면된다. 

구글 서버에다가 자신의 사이트 주소를 남기고 유저의 요청을 기다린다.

유저 클라이언트는 구글 서버에 접속하여 사이트 주소를 얻고 접속한다. 

 

JAVA RMI Server

java.rmi.Remote 를 상속받은 interface를 선언한다.

RemoteException 을 throws 하여 구현한다.

remote object를 RMI registry 에 bind 한다. 

 

원격 객체는 이미 UnicastRemoteObject라는 기본 자바 클래스로 만들어져 있으니 이걸 상속 받고 구현하고자 하는 기능이 있는 인터페이스를 구현하여 구체화해서 원격 객체로 만든다.

 이 원격 객체를 bind하여 rmi에 넣는 것이 위 사진에 나타나는 과정이다.

 

lookkup 하여 remote object reference 를 얻는다. 

통신규약으로 정해져 있는 인터페이스를 지정한다.

원격 메서드를 호출한다.

 

정리

method invocation in distributed environments

 RMI는 분산 환경에서 이용하는 method invocation 이며 

RMI Server register remote object by bind( ) to RMI Registry

 원격 객체를 bind 메소드로 RMI Registry에 등록을 하면 

RMI Client lookups remote reference by lookup( ) from RMI Registry

 RMI  Client는 lookup 메소드로 RMI Regstry 에 등록되어 있는 Remote object reference를 찾아서 클라이언트와 서버 간에 통신이 가능하게 된다. 

centralise complicated business logic at server 

이러한 RMI을 이용하면 복잡하고 다양한 비즈니스 모듈을 서버에 모아서  

enable thin client

클라이언트는 단순히 호출만 할 수 있는 아키텍쳐가 가능하다. 

따라서 클라이언트의 경량화가 되는 장점이 있다.