RMI를 사용하면 한 시스템의 Java 프로그램이 원격 객체의 메소드를 호출 할 수 있다.
Java에서는 RMI라는 원격 메소드 호출을 사용하면 원격 JVM에 있는 객체를 찾아서 해당 메소를 호출 할 수 있다. 클라이언트 보조 객체는 Stub, 서비스의 보조 객체는 skeleton 이라고 한다.

가장 기본적인 RMI 예제 코드이다.
RMI 인터페이스를 선언한다. 서버와 클라이언트가 가지고 있는 메소드를 공유할 목적으로 하는 인터페이스이다.
이때 반드시java.rmi.Remote를 extend 해야한다. 여기에 구현할 메소드는 클라이언트에서 호출할 RMI 메소드이며, 이 예제에서는 날짜를 받아오는 getDate() 메소드를 선언하였다. 원격 접속이 가능하여야 학기 때문에 public으로 선언하며, 메소드에서는 RemoteException 처리가 필수적이다.

RMI server의 main 클래스로, 서버를 구현한다. RMI 서버 구현에 있어서는
UnicastRemoteObject를 상속하여 구현하는 것이 가장 쉬운 방법이라고 한다.UnicastRemoteObject를 상속받으면 이가 통신의 하부 구조를 구현해주며, 객체를 직렬화해준다. main과 RemoteData.java에서 선언한 getDate() 메소드를 구현한다.
마찬가지로 RemoteException 처리를 위해 default 생성자를 정의한다.
22번째 라인에서 생성한 객체를 Naming에rebind시키는데, 이 때bind가 아닌rebind를 쓰는 이유는 이미 bind되어 있을 경우의 오류를 방지하기 위함이다. (자바 잘 몰라서 튜토리얼 찾아봄 ㅠ)

RMI client의 main 클래스로, 클라이언트를 구현한다. RemoteDateImpl에서 바인딩 이름을
DateServer로 주었기 때문에, host에서 받아올 때도 마찬가지로DateServer로 표시해준다.

매우매우 단순한 RMI 코드이다. 프록시 패턴을 이해할 수 있는 다양한 코드로 연습해봐야 한다.