: RMI 기능이 필요한 시점이라서 예전에 공부했었던 자바 RMI를 다시 들추어보았다. 개념은 이해하겠지만 웹 어플리케이션에서
어떻게 RMI를 사용해야할지 방향을 잡지 못했는데 스프링에서 여러가지 리모팅 기법을 손쉽게 사용할 수 있도록 제공한다고해서 찾아본 결과... 결국엔 테스트에 성공했다. 이 글을 보시는분들도 꼭 테스트에서 성공하길 바라면서 스프링에서 RMI를 사용하는 방법을 정리해봐야겠다.
● RMI란?
: RMI, Remote Method Invokation, 우리말로는 원격 메서드 호출 정도의 의미가 되겠다. 일반적으로는 하나의 JVM을 사용해서 하나의 어플리케이션안에서 메서드를 호출해서 어떤 작업을 처리한다. 원격 메서드 호출은 말 그대로 원격지에 있는 다른 어플리케이션의 메서드를 호출해서 사용하는 기법이다. 원격지라고 하면 멀리 떨어져있는 곳이라고 생각할 수도 있겠지만 테스트 결과, 같은 서버내에서 다른 어플리케이션 내에서의 메서드 호출도 된다. 원격지 즉, 다른 아이피를 사용하는곳에 있는 어플리케이션의 메서드를 호출해서 마치 로컬에 있는 자신의 메서드인것처럼 사용할 수 가 있다.
● 테스트 환경
여기서 테스트 할 환경은 2개의 스프링 기반의 웹 어플리케이션간의 통신을 주고받는것이다. 하나는 서버가 될것이고, 다른 하나는 클라이언트가 될것이다. 여기서의 서버라는것이 WAS를 말하는 것이 아니고, 서비스를 제공해주는측이라는 의미이다. 서비스를 제공한다는 말은 쉽게 말하자면 서버측의 메서드를 클라이언트측에서 사용을 할수있도록 한다는 말이다.
클라이언트는 WAS 환경이 아니어도 상관없지만 웹기반의 테스트를 실시할것이기때문에 서버측도 WAS에서 돌아가고, 클라이언트측도 WAS에서 돌아간다.
쉽게 말해서 2대의 웹사이트가 돌아가는데 1대는 웹사이트로서 돌아가면서 RMI 서버의 역할을 하고, 또 다른 한대 역시 웹사이트로 돌아가면서 RMI 클라이언트의 역할을 한다는 것이다.
- RMI 클라이언트가 RMI 서버측에 파라미터로 이름을 제공을 하면 RMI 서버측에서 그 이름을 받아서 해당 이름에 대한 메시지를 RMI 클라이언트쪽으로 리턴해주는 예제를 구현해 보겠다.
하나의 PC에서 2대의 이클립스를 띄워놓고 할려면 한쪽에는 이클립스상에 RMI 서버 역할을 할 톰캣을 가동해야 되고, 나머지 한대에서는 main() 메서드를 이용하거나, Junit 테스트 케이스를 작성해서 RMI 서버 역할을 하는 이클립스쪽의 프로젝트에 있는 메서드를 호출하면된다.
실제 테스트는 한대의 PC로도 해보았고, 2대의 PC로도 해보았으며, 2대의 PC에 이클립스상에서 톰캣을 둘다 돌려놓고도 해보았으며, RMI 서버 역할을 할 PC에서 실제로 톰캣에 war 파일을 배포해서 돌려보았는데 모두다 잘 된다...
어떤환경이든지 간에 원리는 똑같으므로, 여기서는 2대의 PC상에서 테스트를 진행한 과정을 설명하도록 하겠다.
설명을 하기전에 먼저 그림을 그려서 어떤식으로 돌아가는지를 파악하면 더 쉽게 테스트를 할 수 있을것 같다.
오늘은 퇴근을 해야하는관계로 나머지는 내일 정리를 하도록 한다...