본문 바로가기
인턴

[인턴 OJT 19일차] RMI

by 리잼 2023. 1. 9.
반응형

 

RMI ( Remote Method Invocation )

- 원격에 있는 메소드를 로컬에 있는 것처럼 호출하여 사용가능하게 하는 기술

- 분산되어 존재하는 객체 간의 메세지 전송( 메소드 포함 )을 가능하게 하는 프로토콜

- RMI 자체는 분산개체 간의 통신을 구현하는 모든 프로토콜을 의미함

 

장점

구현하기 쉽다

- 네트워크 프로그래밍 > Socket 많이 사용

- 소켓으로는 프로토콜을 구현하기가 매우 까다롭고 힘이든다

신뢰성 보장

- 상위 레벨의 통신 계층에서 수행하기 때문에 통신에 대한 신뢰성이 확보되고 또한 자바 자체에서 제공하는 Libarary

자바 플랫폼을 사용

- 자바는 RMI의 JVM에서 언제든 활용하고 사용 가능

- 단, 동종의 자바가 아니면 제약이 따름 ( sun java, gun java 간의 RMI)

 

RMI 구조 및 과정

클라이언트 <-> 서버가 아니라

클라이언트 <-> 레지스트리 <-> 서버

 

- 서버는 먼저 이름을 가지고 Registry에 bind 해야함

Registry registry = LocateRegistry.createRegistry(PORT);
			
			RMIBookInterface addressBookIf = 
					new AddressBookImpl();
			
			registry.rebind("ADDRESSBOOK", addressBookIf); // registry에 rebind
 

- Client가 원격 참조를 설정하기 위해 레지스터에서 서버 이름 조회

if (remote instanceof CalcInterface) { // 서버에 해당 인터페이스가 존재하는지 확인
				CalcInterface calc = (CalcInterface)remote; // 객체생성 없이 캐스팅하여 메서드 호출
				
				LOGGER.debug(String.format("1 + 2 = %s", calc.add(1, 2)));
			}
 
 

RMI 구성

Server

- 공통 인터페이스

- 구현 클래스

- 스켈레톤 클래스

- 서버실행 클래스

Client

- 공통 인터페이스

- stub 클래스 : Client만을 의미

- 클라이언트 실행 클래스

 

RMI 서버 작성 순서

1. 공통(원격) 인터페이스 작성 (서버, 클라이언트 모두 가지고 있어야함)

- Remote interface 상속 ( extends )받아야 함 ( interface가 interface에게 상속 받음 - implement )

- public interface이어야 함

- 모든 메서드는 RemoteException 처리 해야한다

- 원격처리 중 인터넷 상에서 예외가 발생할 수 있기 때문

- 매개변수 return 값은 직렬화된 객체 ( String 객체 등 기본형 ) 직렬화 ( Serilizable 인터페이스 구현 )

실습은 최상위 예외인 Exception으로 진행함
AddressBookVo

구현 클래스 작성

- interface를 implements 후 상속 받을 때 UnicastRemotObject 를상속받아야함

- 이것을 상속 받아야 RMI interface라고 인식

- 직렬화 가능 클래스를 뜻함

- 무조껀 Public .

- 반드시 생성자를 만들어야하고 , remoteException을 throws

- 상속받은 UnicastRemoteObject 생성자에서 예외가 발생하기때문

 
 
AddressBookImpl

RMI 클라이언트 작성

Select 조회
반응형