10. RMI (Remote Method Invocation)

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

12 장 자바 애플릿. 2 Applet 개요 Applet 프로그램 – 웹 페이지에 포함되어 구동 된다. 웹 브라우저나 애 플릿뷰어 (appletviewer) 에서 실행되는 프로그램 – 웹 브라우저 내에 Applet 을 해석하여 실행할 수 있 도록 Applet 구동용 인터프리터가.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
CHAP 22. 블루투스.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
최윤정 Java 프로그래밍 클래스 상속 최윤정
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
Ch.07-5 xml-rpc 사용하기 김상엽.
Network Lab. Young-Chul Hwang
PHP입문 Izayoi 김조흔.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈
Java RMI (Remote Method Invocation)
Java RMI (Remote Method Invocation)
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Lesson 9. 예외처리.
31강 JAVA 네트워크 JAVA 네트워크 InetAdress, URLConnection 클래스 Socket의 이해
Chapter 7. RAS(전화접속,VPN) & IAS
Visual Basic .NET 처음 사용하기.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
Chapter 06. UDP 서버/클라이언트.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
Java RMI (Remote Method Invocation)
Lesson 7. 클래스와 메소드 - 1.
Servlet 서블릿 기초 FORM 처리 서블릿의 API 세션과 쿠키 com.oreilly.servelet 패키지
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
10장. 예외처리.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
웹 어플리케이션 보안 2016년 2학기 3. Mongo db.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
RMI Messenger 지도 : 김정배 교수님 조봉진.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
MVC 모델을 이용한 웹 애플리케이션 작성 웹 애플리케이션 개발 순서를 알아본다 웹 애플리케이션의 실행 순서를 이해한다.
Lesson 2. 기본 데이터형.
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
JA A V W. 06.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
CHAP 21. 전화, SMS, 주소록.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
Introduction to JSP & Servlet
Java RMI (Remote Method Invocation)
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
3. 모듈 (5장. 모듈).
JSP Programming with a Workbook
MIDP 네트워크 프로그래밍 ps lab 김윤경.
프로그래밍 언어 학습을 위한 가상실습환경 창원대학교 이수현.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
CHAP 15. 데이터 스토리지.
7 생성자 함수.
6 객체.
JAVA 프로그래밍 16장 JNLP.
20 XMLHttpRequest.
Presentation transcript:

10. RMI (Remote Method Invocation) - 분 산 시 스 템 - 국립 창원대학교 컴퓨터공학과 이광휘 http://csl.changwon.ac.kr/

RMI란? (1/4) 자바가 제공하는 분산 객체들 간의 메서드의 호출 객체의 공간적인 제약 없이 객체의 메서드를 사용하여 통신 자바 객체들만의 통신 지원 네트워크상에 존재하는 원격지의 객체에 접근 그 객체의 메서드 호출 그 메서드는 매개변수를 가지고 작업을 수행 작업 결과를 반환

RMI란? (2/4) 분산 객체 모델 클라이언트/서버 모델에서 발전된 통신 모델 자신이 클라이언트이면서 동시에 다른 객체의 서버로 사용 양방향성인 클라이언트 클라이언트/서버 모델을 쉽게 구현 클라이언트와 서버를 객체 단위로 구현 미들웨어(CORBA)를 통해 편리한 서비스를 제공 받음

RMI란? (3/4) 분산 객체 모델과 일반 자바 플랫폼의 공통점 원격 객체의 메서드 호출 시 매개변수나 메서드의 결과값을 객체로 사용 가능 객체 모델에서의 형변환(casting) 연산자 분산 객체 모델에서도 그대로 사용 가능 객체 모델에서의 instanceof 연산자

RMI란? (4/4) 분산 객체 모델과 일반 자바 플랫폼의 차이점 원격 객체의 메서드 호출 시 매개변수나 메서드의 결과값으로 사용되는 객체는 본래 객체의 사본 원격 개체의 경우는 복사본이 아님 몇 개의 메서드들의 제한 java.lang.Object 클래스에서 JVM(Java Virtual Machine)과 관련 있는 일부 메서드 클라이언트 추가적으로, RMI 사용 중 발생 가능성이 있는 예외 처리

RMI 작동 원리 (1/14) 객체 참조자를 통한 메서드 호출 Calculator 참조자 calc.add(10, 5); Client calc.add(10, 5); clac 참조자 Int add(int a, int b){ … } Calculator

RMI 작동 원리 (2/14) RMI를 사용한 분산 시스템 구조 RMI Server Client client calc Calculator Int add(int a, int b){ … } calc.add(10, 5); 원격 참조자 원격 객체 RMI network Reference to

RMI 작동 원리 (3/14) 클라이언트/서버 통신 메커니즘 RMI에서 서버의 역할 원격 객체(Remote Object) 생성 생성된 원격 객체의 참조자(Remote Reference)를 만들어 저장 클라이언트가 서버에 접속 시 원격 참조자 전달 클라이언트가 원격 참조자를 통한 메서드 호출 대기

RMI 작동 원리 (4/14) 클라이언트/서버 통신 메커니즘(계속) RMI에서 클라이언트의 역할 서버에게 사용하려는 메서드를 가진 원격 객체의 참조자 요청 서버로부터 참조자를 넘겨 받음 원격 참조자를 사용하여 메서드 호출

RMI 작동 원리 (5/14) RMI의 기본적인 통신 메커니즘 CLIENT SERVER REMOTE OBJECT (1) 원격 객체 생성 (2) 원격 객체의 참조자 검색요청 (3) 원격 객체의 참조자 반환 (4) 메서드 호출

RMI 작동 원리 (6/14) 원격 참조자를 ‘ro1’이라는 이름으로 RMI Registry에 저장 CLIENT SERVER REMOTE OBJECT ro1 REFERENCE 로컬상에서 일어나는 일 네트워크상에서 일어나는 일 RMI Registry (1) 원격 객체 생성 (5) 메서드 호출 (3) ‘ro1’이라는 이름으로 원격 참조자 검색 요청 (2) ‘ro1’이라는 이름으로 원격 참조자를 저장 (4) 원격 객체의 참조자 반환

RMI 작동 원리 (7/14) Stub/Skeleton을 통한 RMI 통신 메커니즘 Stub과 Skeleton은 미들웨어 생성된 원격 객체를 rmic라는 컴파일러를 통해 만듦 클라이언트와 서버에 위치하여 서로의 통신 과정을 처리

RMI 작동 원리 (8/14) Stub 클라이언트의 메서드 호출을 원격 객체에게 전송 메서드 호출의 매개 변수를 Marshaling 서버로부터 반환된 값을 UnMarshaling 해서 클라이언트에게 전달

RMI 작동 원리 (9/14) Marshaling UnMarshaling 통신 채널로 전송될 수 있는 형태로 바꾸는 것 (바이트 단위) ObjectOutputStream 클래스 사용 UnMarshaling 데이터를 전송 받은 후 원래의 형태로 복원하는 것 ObjectInputStream 클래스 사용

RMI 작동 원리 (10/14) Stub의 메서드 호출 전송을 위한 단계 서버의 자바 가상 머신(JVM)과 연결 설정 전송될 메서드의 매개변수를 특정한 형식에 맞춰 정렬(Marshaling) 전송 원격 메서드의 실행 결과를 기다림 반환값이 전송되어 오면, 이를 읽고 해석(UnMarshaling) 반환값을 호출자에게 반환

RMI 작동 원리 (11/14) Skeleton 클라이언트의 메서드 호출에서 매개변수를 UnMarshaling 해당 원격 객체의 메서드 호출 결과 값을 Marshaling해서 클라이언트에게 전송

RMI 작동 원리 (12/14) Skeleton의 클라이언트 메서드 호출 처리 단계 클라이언트로부터 메서드 호출이 전송되기를 대기 UnMarshaling 매개 변수를 넘겨주고 실행 Marshaling

RMI 작동 원리 (13/14) 원격 메서드 호출 Server Client CLIENT Stub 5 10 2. Marshaling Skeleton 4. UnMarshaling 1. add(5, 10); 3. 전송 REMOTE OBJECT int add(int a, int b) 5. add(5, 10);

RMI 작동 원리 (14/14) 메서드 결과 반환 Server Client CLIENT Stub 15 4. UnMarshaling Skeleton 2. Marshaling 5. 15 반환 3. 전송 REMOTE OBJECT int add(int a, int b) 1. 15 반환

RMI 어플리케이션 예제작성 (1/11) 일반적인 RMI 어플리케이션 구성도 java.rmi.server.RemoteObject java.rmi.server.RemoteServer java.rmi.server.UnicastRemoteObject 클라이언트 프로그램 원격 객체의 메서드를 정의한 인터페이스 실제로 메서드를 구현할 원격 객체 메서드 호출 상속 관계 구현 관계 RMI에서 제공되는 패키지 구현해야 하는 것들

RMI 어플리케이션 예제작성 (2/11) 현금 입출금기를 간단하게 모형화 한 예제 사용자가 현금 입출금기를 통해 서버에 접속 잔액 확인하거나 입금 또는 출금 작업 잔액 확인, 입금, 출금을 요청하는 클라이언트 프로그램 요청을 처리해 주는 서버 프로그램으로 구성

RMI 어플리케이션 예제작성 (3/11) RMI 어플리케이션의 기본적 6단계 과정 1 단계 : 서비스할 원격 객체의 인터페이스 작성 2 단계 : 원격 객체 및 서버 프로그램 작성 3 단계 : Stub / Skeleton 생성 4 단계 : 원격 객체를 사용할 클라이언트 프로그램 작성 5 단계 : RMI Registry 실행 6 단계 : 서버 프로그램과 클라이언트 프로그램 실행

RMI 어플리케이션 예제작성 (4/11) 1 단계 (원격 객체의 인터페이스 작성) java.rmi.Remote 인터페이스 상속 모든 메서드는 public 접근 지정자로 선언 java.rmi.RemoteException을 발생 Bank.java (서버와 클라이언트에서 사용할 인터페이스를 생성한 예제) import java.rmi.*; public interface Bank extends Remote { public int getBalance() throws RemoteException; public int deposit(int amount) throws RemoteException; public int withdraw(int amount) throws RemoteException; }

RMI 어플리케이션 예제작성 (5/11) 2 단계 (원격 객체 및 서버 프로그램 작성) 원격 인터페이스의 메서드들을 구현 java.rmi.server.UnicastRemoteObject 클래스를 상속 RMI Registry에 원격 개체의 참조자를 등록

RMI 어플리케이션 예제작성 (6/11) 2 단계 (원격 객체 및 서버 프로그램 작성) (계속) BankImpl.java (RMI에서의 서버 클래스 예제) import java.rmi.*; import java.rmi.server.*; public class BankImpl extends UnicastRemoteObject implements Bank { private int total; public BankImpl(int total) throws RemoteException { this.total = total; } public int getBalance() throws RemoteException { return total; } public int deposit(int amount) throws RemoteException { total += amount; return getBalance(); } public int withdraw(int amount) throws RemoteException { total -= amount; public static void main(String[] args) throws Exception { BankImpl bankip = new BankImpl(10000); Naming.rebind("//localhost/BankIp", bankip); System.out.println("bank was rebinded with name 'BankIp");

RMI 어플리케이션 예제작성 (7/11) 3 단계 (Stub / Skeleton 생성) rmic 컴파일러를 사용해서 Stub / Skeleton 생성 C:\JavaExample>rmic BankImpl C:\JavaExample>dir ... BankImpl_Skel.class BankImpl_Stub.class

RMI 어플리케이션 예제작성 (8/11) 4 단계 (원격 객체를 사용할 클라이언트 프로그램 작성) 서버의 RMI Registry로부터 원격 참조자 얻어오기 원격 참조자를 통해 메서드 호출하기

RMI 어플리케이션 예제작성 (9/11) 4 단계 (원격 객체를 사용할 클라이언트 프로그램 작성) (계속) BankClient.java (RMI에서의 클라이언트 클래스 예제) import java.rmi.*; public class BankClient { public static void main(String[] args) throws Exception { int balance = 0; Bank bank = (Bank)Naming.lookup("//localhost/BankIp"); System.out.println("Bank was given from Server"); balance = bank.getBalance(); System.out.println("current balance : " + balance); balance = bank.deposit(1000); System.out.println("deposit 1000"); balance = bank.withdraw(5000); System.out.println("withdraw 5000"); }

RMI 어플리케이션 예제작성 (10/11) 5 단계 (RMI Registry 실행) 특정 포트에서 실행 : rmiregistry port번호 C:\JavaExample>rmiregistry 기본 포트인 1099에서 실행 C:\JavaExample>rmiregistry 20000 특정 포트인 20000에서 실행 ▪ Naming.rebind(“//203.246.6.102:20000/Bank”);  서버 프로그램 ▪ Naming.lookup(“//203.246.6.102:20000/Bank”);  클라이언트 프로그램 명시적 기술

RMI 어플리케이션 예제작성 (11/11) 6 단계 (서버 프로그램과 클라이언트 프로그램 실행) C:\JavaExample>java BankImpl bank was rebinded with name ‘Bank’ 서버 프로그램은 RMI Registry가 실행된 서버에서 실행 C:\JavaExample>java BankClinet Bank was given from Server current balance : 10000 deposit 1000 current balance : 11000 withdraw 5000 current balance : 6000

애플릿에서 RMI 사용 (1/3) 애플릿과 서버의 연결 Applet Server Web Browser 네트워크 소켓

애플릿에서 RMI 사용 (2/3) 애플릿에서 RMI를 사용하기 위한 파일 배치 Web Browser Server Applet Web Pages Remote Object Applet Code Stub RMI Registry 등록 애플릿이 로딩된 서버에 있는 RMI Registry에만 연결 가능 로딩

애플릿에서 RMI 사용 (3/3) 애플릿에서 RMI 사용하기 애플릿의 보안상의 제약 때문에 다음은 같은 서버에 존재해야 함 애플릿을 포함하는 웹 페이지들 애플릿 코드 Stub 클래스 원격 객체 RMI Registry

참고 문헌 최영관, 소설같은 자바, JABOOK, 2001년 12월.