고급 JAVA

JAVA -RMI, Remote Method Invocation (자바 원격함수호출)

햄찌개 2020. 10. 15. 15:55

RMI(Remote Method Invocation)?

 

1. 분산되어 존재하는 객체 간의 메시지 전송(메소드를 호출하는 것 포함)을 가능하게 하는 프로토콜.

 

현대 시스템 개발은 3계층 시스템이 주류로 이루고,  3계층인 데이터베이스, 애플리케이션, 클라이언트 모두 객체를 통하여 구현하고 저장하는 일이 많아졌습니다. 그래서 이렇게 분산되어 존재하는 객체간의 메시지 전송을 할 필요가 생겼고 이를 가능케 하는 것이 RMI 프로토콜입니다.

 

2. RMI 자체는 분산객체 간의 통신을 구현하는 모든 프로토콜을 의미함. (CORBA, DCOM …)

 

RMI Java RMI 이전부터 쓰여지던 단어로써 분산객체를 개념을 구현하는 CORBA, DCOM 등을 포함하는 의미입니다.

 

 Java RMI를 쓰는가?

 

1. 구현하기 쉽다.

 

보통 네트워크 프로그래밍을 하려면 보통 소켓을 많이 사용합니다. 하지만 소켓으로는 프로토콜을 구현하기가 매우 까다롭고 힘이 듭니다. 하지만 Java RMI Socket 통신 자체를 하부에 숨기고, 상위 레벨에서 수행하여, 분산객체 간의 데이터 전송을 메소드를 부르는 것과 같은 방법으로 구현하기 때문에 훨씬 구현하기 쉽습니다.

 

2. 신뢰성이 보장된다.

 

신뢰성이 보장됩니다. 상위 레벨의 통신계층에서 수행하기 때문에 통신에 대한 신뢰성이 확보되고 또한 자바 자체에서 제공하는 라이브러리이기 때문에 또 그렇습니다.

 

 

3. Java 플랫폼을 사용한다.

 

자바 플랫폼을 사용한다는 점입니다. 자바의 RMI JVM에서 언제든 활용하고, 사용할 수 있습니다. , 동종의 Java가 아니면 제약이 따를 수 있습니다. ( ex. sun java 와 gnu java 간의 RMI )

 

 

 

1.2 구조 및 과정

Server는 먼저 이름을 가지고 Registry bind를 해야합니다.

 

Client가 원격 참조를 설정하기 위해 레지스트리에서 서버 이름을 조회합니다.

 

stub은 파라미터를 skeleton에게 직렬화 하여 원격 메소드를 호출하고 결과를 다시 직렬화 하여 stub에게 돌려줍니다.

 

RMI 통신을 위한 서버 프로그래밍

(1) 과정
(가) RMI용 인터페이스를 정의한다.(Remote Interface을 상속 받아야 한다.)
(나) RMI용 인터페이스를 구현한 객체 생성
(다) 구현한 객체를 클라이언트에서 찾을 수 있도록 Registry객체를 생성해서 등록한다. (라) Registry서버에 서비스를 제공할 원격객체 등록하여 클라이언트에서 가져가 사용할 수 있도
록 한다.