ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 리모팅(Spring Remoting)
    Spring 2012. 1. 30. 20:50
    지난 몇 년간 엔터프라이즈 어플리케이션 개발 분야에서 스프링은 사실상의 표준으로 자리잡았으며 지금도 그 영역을 무한대로 확장해 나가고 있다. 요즘은 스프링 없이 자바기반의 엔터프라이즈 어플리케이션을 개발한다는 건 거의 상상도 하지 못할 일이 되어 버렸다.

    그 중에 오늘 소개할 스프링 리모팅 기술은 EJB의 특징적 기능이었던 분산 애플리케이션 개발을 스프링에서도 가능하게 해주는 기술이다. 즉, 리모팅 기능을 사용하면 여러 노드에 분산되어 배포된 기능들을 마치 로컬에 있는 함수를 호출하듯 사용할 수 있게 된다. 
     
    EJB2 기반의 애플리케이션 서버에서는 분산 어플리케이션 구성을 위해 RMI/IIOP 구현체를 제공했지만 스프링에서는 RMI외에도 다양한 방식을 제공한다. 단, 스프링 기반의 리모팅의 경우 EJB와는 달리 분산 트랜잭션까지 지원하지는 않는다.

    스프링은 다음과 같은 방식의 리모팅 프로토콜을 지원한다.
    • RMI (Remote Method Invocation) - RMIProxyFactoryBean과 RmiServiceExporter를 이용한다.
    • 스프링의 Http Invoker - HTTP 프로토콜을 이용하며 , 전송하는 객체는 Serialization이 되어야한다. 또한 원격 접근을 위한 메소드는 인터페이스를 통해 선언되어야 한다. HttpInvokerFactoryBean과 HttpInvokerServiceExporter 클래스를 이용한다.
    • Hessian - Http기반의 경량 바이너리 프로토콜을 사용한다. HessianProxyFactoryBean 과 HessianServiceExporter 을 이용한다. (http://hessian.caucho.com/)
    • Burlap - Hessian의 XML 버전, BurlapProxyFactoryBean 과 BurlapServiceExporter을 이용한다.
    그 외에도 스프링은 리모팅을 위해 JAX-RPC, JAX-WS, JMS등의 프로토콜을 지원한다. 스프링 리모팅 기능을 사용하는 방법은 무척이나 간단하다. 서비스를 노출하는 서버 부분과 서비스를 사용하는 클라이언트 부분에서 적절한 설정을 추가하면 끝이다. 다음은 Http Invoker를 사용할 때 서버측 설정과 클라이언트 설정이다.

    > 서버측
     

    <bean name="/RemoteService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
      <property name="service" ref="ServiceBean"/>
      <property name="serviceInterface" value="package.ServiceInterface"/>
    </bean>



    > 클라이언트 측

    <bean id="ServiceBean" 

          class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">

          <property name="serviceUrl"
             value="http:/hostname:8080/context-root/RemoteService" />
          <property name="serviceInterface" value=" package.ServiceInterface " />
    </bean> 

     

    이 설정에 추가적으로 web.xml에 DispatchServlet을 선언하고 서비스를 노출할 URL 패턴을 지정하면 끝이다. 만약, 스프링 MVC를 이미 사용하고 있다면 이 설정은 굳이 할 필요가 없다.

    > web.xml 

    <servlet>
      <servlet-name>remote-service</servlet-name>
      <servlet-class>
                        org.springframework.web.servlet.DispatcherServlet
              </servlet-class>
      <init-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>
                   /WEB-INF/remoteApplicationContext.xml
                   </param-value>
              </init-param>   
      <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
      <servlet-name>remote-service</servlet-name>
      <url-pattern>/remote/*</url-pattern>
    </servlet-mapping>

     
    다음은 여러 리모팅 방법에 성능을 측정한 자료이다. 좀 옛날 자료이긴 한데 적용할 컨텍스트에 맞는 리모팅 방법을 선택할 때 한 번 쯤  참고하면 되겠다.

    'Spring' 카테고리의 다른 글

    메이븐과 연동해서 스프링 프로파일 설정하기  (0) 2013.03.12
Designed by Tistory.