1. RMI(Remote Method Invocation - 원격 메소드 호출)
  -> 네트웍상에 있는 원격컴퓨터의 객체 메소드를 호출하는
  JAVA의 분산처리 방법(스펙/규격)

2. RPC(Remote Protocol Call - 원격 함수 호출)
  (1) SUN사에서 RMI보다 먼저 개발한 분살처리 기법
  (2) 언어와 Process 에 독립적(C언어에서도 사용 가능)
  (3) 플랫폼과 호환성이 있어야 하기 때문에 RMI보다 오버해드가 크다.
  (4) 시본(원시) 데이터 타입만 주고 받을 수 있다.
  (5) 객체 지향적이지 못하다.

3. RMI의 특징
  (1) 원격메소드 호출시 Reference Type도 주고 받을 수 있다.
   (단, 직렬화 가능한 객체만...)
  (2) 언어는 Java를 이용하고, 플랫폼에 독립적이다.
  (3) 보안성이 뛰어나다.
  (4) 객체 지향적이다.

4. RMI 프로그램의 절차
  (1) Remote Interface 정의
 <1> java.rmi.Remote 인터페이스를 상속
 <2> Client 에서 호출할 메소드를 정의하고 RemoteException 표기
 <3> 접근제한자를 public 으로 한다.
 (ex : 001day/Echo.java)

  (2) 구현 클래스 시작
 <1> UnicastRemoteObject 부터 상속(extends)
 <2> 미리 제작된 원격인터페이스를 상속(implements)
 <3> 원격 메소드를 구현
 <4> 기본생성자를 구현하고, RemoteException 표기(처리)
 <5> 접근제한자는 public 으로 한다.
 (ex : 001day/EchoImpl.java) // 아이엠피엘 임플리먼츠

  (3) Server Application 제작
 <1> 원격 객체를 생성
 <2> rmiregistry(Naming서버)서버를 start 시킴
 <3> 원격 객체를 rmiregistry 서버에 등록 시킴

  cf) <2>번은 직접 명령어로 실행시킬 수도 있고
   Server Application 프로그램에서도 할 수 있다.
  (ex : 001day/EchoServer.java)


   
  (4) Client Application 제작
 <1> 네이밍 서버에 등록된 원격객체를 찾는다.
 <2> 원격 객체를 원격인터페이스로 형변환
 <3> 원격인터페이스의 메소드를 호출
 (ex : 001day/EchoClient.java)
 
5. RMI 프로그램의 실행 절차 (다음과 같이 파일을 위치 시킨다.)
  (1) SERVER 폴더 [RMI서버 컴퓨터(시스템)을 의미]
 <1> 위치 : 인터페이스.java, 구현클래스.java, 서버.java
 <2> 실행
  > javac *.java
  > rmic 구현클래스
  > start rmiregistry
  > java 서버

  (2) CLIENT 폴더 [RMI클라이언트 컴퓨터(시스템)을 의미]
 <1> 위치 : 인터페이스.class, 클래스.java, 구현클래스_Stub.class
 <2> 실행
  > javac *.java
  > java 클라이언트
 
 cf1) 서버측에서는 Stub 객체가 필요없지만, 클라이언트측에서는 반드시 필요.

 cf2) 서버프로그램과 Naming 서버는 반드시 하나의 컴퓨터에서 실행되어야 한다.
   (Naming 서버를 먼저 실행하고 서버를 실행해야 한다.)

 cf3) 하나의 port에서 서비스되고 있는 Naming 서버의 여러개의 이름이 다른
   객체를 등록할 수 있다.
  - Naming.bind() : 기존에 같은 이름의 객체가 있으면 익셉션 발생한다.
  - Naming.rebind() : 기존에 같은 이름의 객체가 있으면 덮어쓴다.
  (ex: 001day/Echo_many폴더)
 cf4) 여러개의 port에서 Naming 서버를 동시에 실행가능하고 각각의 Naming 서버에
   여러개의 이름이 다른 객체들을 등록할 수 있다.
  (ex: 001day/Echo_port폴더)

 cf5) 인터페이스란? [1] 껍대기 [2] 통로 [3] 메뉴판

6. 예제
  (1) Echo를 이용한 비유
 <1> EchoImpl - 식당
 <2> EchoClient - 고객(객체찾기, 메뉴주문)
 <3> EchoServer - 식당주인(객체생성/Naming 서버등록)
 <4> Echo - 메뉴판
 <5> Naming - 114
 <6> e.sayEcho() - 고객이 주문할 것을 만드는 주방장
 <7> String sayEcho() - 음식

  (2) Count // 속성 int count 있음

  (3) Msg // 속성 String msg 있음

Posted by Duritz

공지사항

Yesterday
Today
Total
05-18 14:19

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31