프로그래밍

JBoss 5: 웹서버와 웹서비스 서버 물리적으로 분리하기

panpro 2010. 2. 9. 20:08
드디어 성공.
웹서버와 웹서비스 서버를 물리적으로 완전히 분리했다.

웹서비스 서버는 JBoss 5 Community Edition을 사용했다. (AIX 6.1)
Web서버는 Windows Server 2008. -.-; 머신이 싸길래.

웹서버와 웹서비스 서버는 완전히 분리되어 있다.

웹서버는 80번 포트를 오픈하고 아파치 서버를 올려 바깥에 내놨고(공인IP),
웹서비스 서버는 tomcat connector를 위한 포트만 오픈하고 죄다 닫아버렸다. 그리고 이 서버는 내부에 있다.(사설 IP)

나의 목표는 웹서비스를 포함한 모든 요청을 전부 웹서버가 받아서 웹서버가 처리할 건 지가 알아서 처리하고, 웹서비스 서버가 처리할 건 웹서비스 서버가 처리하도록 하는 거였다.

방법은 비교적 간단하고 세팅도 그리 어렵지 않다.

1. jk_mod를 다운로드 받아 $APACHE/modules에 복사
2. 약간의 환경세팅

위 과정은 인터넷 뒤져보면 잘 나와있고, 아파치 홈페이지에도 설명되어 있으니 생략.

다 잘 되었다고 생각했었는데, 맨 끝에 문제가 발생했다. 
wsdl에 접속 location이 명시되어 있는데, 이게 기본적으로 서버 자체의 ip를 물고 들어가게 된다.

그러니까, 

현재 상황은 이렇다.

웹서버가 http://www.hello.co.kr 이고,
웹서비스 요청은 http://10.1.1.5:8080/helloWS 으로 받고 있다. 

이 상황에서, 

웹서버가 웹서비스 요청을 포함한 모든 요청을 받도록 하기 위해,

웹서버에게 http://www.hello.co.kr/helloWS 로 요청을 보내면 이 요청이 방화벽 안의 웹서비스에게로 날아가서 그놈이 처리하도록 되어 있는 거다.

다 잘되었는데, wsdl의 맨 끝에 

<<service name="helloWS">
-   <port binding="tns:HelloEndpointInterfaceBinding" name="HelloEndpointInterfacePort">
        <soap:address location="http://10.1.1.5:8080/helloWS" />
  </port>
</service>

이렇게 되어 있어서 결국 아무런 처리도 안되고 있었다.

왜냐, 외부에서는 10.1.1.5 서버에 연결할 수 없기 때문에. (방화벽 정책 자체를 그렇게 설정해 놨으니까)

그런데 이 문제 비교적 쉽게 해결했다.

JBoss 서버를 띄어놓은 상태에서 mvn install 에 성공하면 JBoss가 기록하는 로그에 (debug 모드) wsdl을 어디에 publish했다는 기록이 남는다.

이런 식이다.

19:33:18,234 INFO  [WSDLFilePublisher] WSDL published to: file:/usr/local/jboss/jboss-5.1.0.GA/server/default/data/wsdl/helloWS-1.0.war/HELLOWS4208386379691609677.wsdl

그럼 그냥 단순히 저 파일을 열어서 맨 끝에 address location만 바꿔주면 된다.

<service name="helloWS">
-   <port binding="tns:HelloEndpointInterfaceBinding" name="HelloEndpointInterfacePort">
        <soap:address location="http://www.hello.cl.kr/helloWS" />
  </port>
</service>

이렇게 바꿔줬다. 아주 잘되고 있다.

자. 이게 한가지 꼭 짚고 넘어가야 할 것이 있다.
아마도 몇몇 설정만 바꾸면 wsdl이 항상 내가 원하는대로 나오게 할 수 있을 거다. 어디를 바꿔야 할지 아는 분 꼭 알려주시기 바랍니다.