▷ 클라이언트 리스너
1. HTTP/HTTPS 리스너 : static content와 JSP/Servlet, SOAP over HTTP 웹서비스에 대한 HTTP 요청을 웹컨테이너가
직접 받을 때 사용한다.
1) HTTP 리스너 설정
-. WEBMain.xml 편집
===============================================================================
<webserver-connection>
<http-listener>
<listener-id>http1</listener-id>
<port>19099</port>
<thread-pool>
<min>10</min>
<max>20</max>
<step>1</step>
</thread-pool>
</http-listener>
</webserver-connection>
===============================================================================
2) HTTPS 리스너 설정(로컬 테스트 용/실제 인증서를 받아야 하는 경우에 대해서는 매뉴얼을 참조하세요.)
: 필수 keystore, truststore 파일 설정 및 WEBMain.xml에 보안 리스너 설정
-. SSL Keystore 설정
===============================================================================
[root@C:\Documents and Settings\KIM]#keytool -genkey -alias jeusssl -keyalg RSA -validity 7 -keystore C:\TmaxSoft\JEUS5027\config\SMZZ13503\keystore
keystore 암호를 입력하십시오: jeus123
이름과 성을 입력하십시오.
[Unknown]: 150.28.68.247
조직 단위 이름을 입력하십시오.
[Unknown]: infra
조직 이름을 입력하십시오.
[Unknown]: tmax
구/군/시 이름을 입력하십시오?
[Unknown]: bundang
시/도 이름을 입력하십시오.
[Unknown]: sungnam
이 조직의 두 자리 국가 코드를 입력하십시오.
[Unknown]: KR
CN=150.28.68.247, OU=infra, O=tmax, L=bundang, ST=sungnam, C=KR이(가) 맞습니까?
[아니오]: y
<jeusssl>에 대한 키 암호를 입력하십시오.
(keystore 암호와 같은 경우 RETURN을 누르십시오): jeus123
===============================================================================
-. SSL Truststore 설정
a) keystore로부터 자제적으로 서명한 인증서를 “jeusssl.cer”라는 파일에 export
===============================================================================
[root@C:\Documents and Settings\KIM]#keytool -export -alias jeusssl -keystore C:\TmaxSoft\JEUS5027\config\SMZZ13503\keystore -rfc -file C:\TmaxSoft\JEUS5027\config\SMZZ13503\jeusssl.cer
keystore 암호를 입력하십시오: jeus123
인증서가 <C:\TmaxSoft\JEUS5027\config\SMZZ13503\jeusssl.cer> 파일에 저장되었습니다.
===============================================================================
b) 그 인증서를 JEUS_HOME\config\<node-name>\truststore의 JEUS SSL truststore로 import
===============================================================================
[root@C:\Documents and Settings\KIM]#keytool -import -alias jeussslcert -file C:\TmaxSoft\JEUS5027\config\SMZZ13503\jeusssl.cer -keystore C:\TmaxSoft\JEUS5027\config\SMZZ13503\truststore
keystore 암호를 입력하십시오: jeus123
소유자: CN=150.28.68.247, OU=infra, O=tmax, L=bundang, ST=sungnam, C=KR
발급자: CN=150.28.68.247, OU=infra, O=tmax, L=bundang, ST=sungnam, C=KR
일련 번호: 4a5189ae
개시일: Mon Jul 06 14:20:46 KST 2009 만료일: Mon Jul 13 14:20:46 KST 2009
인증서 지문:
MD5: E9:0B:8C:CB:26:C4:47:44:89:18:3D:69:D7:ED:DF:F6
SHA1: C9:48:08:69:7A:5B:6C:E1:62:24:E0:31:DB:A3:8E:5C:07:AD:45:01
이 인증서를 신뢰하십니까?[아니오]: y
인증이 keystore에 추가되었습니다.
===============================================================================
-. WEBMain.xml 편집
a) JEUS5.0 (fix13 이전)
===============================================================================
<webserver-connection>
<secure-listener>
<listener-id>SecureListener1</listener-id>
<port>443</port>
<output-buffer-size>8192</output-buffer-size>
<thread-pool>
<min>2</min>
<step>1</step>
<max-idle-time>300000</max-idle-time>
<max-wait-queue>4</max-wait-queue>
<max-queue>-1</max-queue>
</thread-pool>
<postdata-read-timeout>30000</postdata-read-timeout>
<scheme>https</scheme>
<back-log>50</back-log>
<server-access-control>false</server-access-control>
</secure-listener>
</webserver-connection>
===============================================================================
=> secure-listener는 JEUS5.0 fix13에서 삭제되었다.
secure-listener가 사라되고 SSL 통신이 각 리스너(http, tcp)에 삽입되었다.
이는 http listener와 tcp listener에 ssl-config 스키마로 설정할 수 있다.
b) JEUS5.0 fix13 ~ JEUS6.0
===============================================================================
<webserver-connection>
<http-listener>
<listener-id>ssl1</listener-id>
<port>443</port>
<output-buffer-size>8192</output-buffer-size>
<thread-pool>
<min>2</min>
<max>5</max>
<step>1</step>
<max-idle-time>300000</max-idle-time>
<max-wait-queue>4</max-wait-queue>
<max-queue>-1</max-queue>
</thread-pool>
<postdata-read-timeout>30000</postdata-read-timeout>
<back-log>50</back-log>
<server-access-control>false</server-access-control>
<scheme>https</scheme>
<ssl-config>
<enable-secure>true</enable-secure>
<keystore-pass>jeus123</keystore-pass>
<key-alias>jeusssl</key-alias>
<truststore-pass>jeus123</truststore-pass>
</ssl-config>
</http-listener>
</webserver-connection>
===============================================================================
*) <scheme>, <ssl-config> 태그 볼 것 : <scheme> 부분을 “https”로 설정한 부분과 <ssl-config> 하위에 설정한 부분에 주목!
c) WEBMain.xml에서의 <keystore-pass>, <truststore-pass> 설정을 JEUSMain.xml의 <command-option>에서 설정가능하다.
===============================================================================
<command-option>
-Djeus.ssl.keypass=jeus123
-Djeus.ssl.trustpass=jeus123
</command-option>
===============================================================================
*) 보안 리스너에게 keystore, truststore의 위치나 이 파일들의 암호를 알려주는 설정
2. TCP 리스너 설정 : TCP 리스너는 일반적인 리스너에 맞춤 프로토콜(HTTP를 사용하지 않음)을 사용하는 리스너이다.
TCP 리스너는 HTTP 또는 HTTPS 프로토콜을 가지고 사용할 수 없는 통신 요구사항이 있을 경우에만
사용한다.
1) 맞춤 통신 프로토콜 정의
-. 맞춤 통신 프로토콜(맞춤 메세지 구조) 내용
아래 sample의 header와 body내용 : “magic “ 수는 7777로, “type”은 0(요청),
“body length”는 128 바이트(고정 길이), “service name”은 “sample”
2) dispatcher 설정 클래스 구현 (프로토콜 설정 정보)
-. 정의된 프로토콜에 기반하여 구현한 SampleConfig.java(첨부)
3) TCP handler Servlet 구현 (프로토콜 구현)
-. 맞춤 프로토콜에 준하는 메시지를 처리할 수 있도록 구현한 SampleServlet.java(첨부)
4) 맞춤 프로토콜 구현을 위한 TCP 리스너 설정
-. SampleConfig.java 와 SampleServlet.java를 컴파일
===============================================================================
[root@D:\My Documents\00.업무문서\문서정리]#javac -classpath C:\TmaxSoft\JEUS5027\lib\system\jeus.jar SampleConfig.java SampleServlet.java
===============================================================================
-. SampleConfig.class 파일을 $JEUS_HOME\lib\application\sample\config 디렉토리에 넣는다.
-. SampleServlet.class를 $JEUS_HOME\webhome\app_home\tcpcontext\WEB-INF\classes\sample\servlet” 디렉토리에 넣는다.
-. web.xml 생성 (경로: C:\TmaxSoft\JEUS5027\webhome\app_home\tcpcontext\WEB-INF\web.xml)
: SampleServlet에 대한 정보를 넣는다.
===============================================================================
<?xml version="1.0"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>TCPHandlerApp</display-name>
<distributable/>
<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>
sample.servlet.SampleServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/sample</url-pattern>
</servlet-mapping>
</web-app>
===============================================================================
=> “sample”이라는 Servlet 이름과 URL 경로인 “/sample”로 매핑
-. WEBMain.xml 편집 (경로: $JEUS_HOME/config/`hostname`/`hostname`_container1/WEBMain.xml)
: 새로운 Context Group(TCPGroup) 그리고 TCP 리스너에 대한 설정 정보를 WEBMain.xml에 추가한다.
===============================================================================
<context-group>
<group-name>TCPGroup</group-name>
<webserver-connection>
<tcp-listener>
<listener-id>tcp1</listener-id>
<port>5555</port>
<thread-pool>
<min>25</min>
<max>30</max>
<step>2</step>
<max-idle-time>1000</max-idle-time>
</thread-pool>
<dispatcher-config-class>
sample.config.SampleConfig
</dispatcher-config-class>
</tcp-listener>
</webserver-connection>
</context-group>
===============================================================================
=> TCP 리스너 포트 (5555), sample.config.SampleConfig을 사용하기 위한 dispatcher 클래스의 설정,
앞에서 추가한 새로운 Context Group 의 이름(“tcpcontextgroup”) 살펴볼 것!
-. JEUSMain.xml 편집 (경로: $JEUS_HOME/config/`hostname`/JEUSMain.xml)
: 새로운 Context (“TCPSample”) 정보 추가
===============================================================================
<application>
<name>TCPSample</name>
<path>C:\TmaxSoft\JEUS5027\webhome\app_home\tcpcontext</path>
<deployment-target>
<target>
<engine-container-name>SMZZ13503_container1</engine-container-name>
<web-context-group>
<name>TCPGroup</name>
</web-context-group>
</target>
</deployment-target>
<deployment-type>COMPONENT</deployment-type>
<web-component/>
</application>
===============================================================================
-. jeus-web-dd.xml 생성 (경로: C:\TmaxSoft\JEUS5027\webhome\app_home\tcpcontext\WEB-INF\jeus-web-dd.xml)
===============================================================================
<?xml version="1.0"?>
<jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
<context-path>/tcptest</context-path>
<docbase>tcpcontext</docbase>
</jeus-web-dd>
===============================================================================
5) TCP 클라이언트 구현
-. TCP리스너와 소켓 연결을 맺고 이 연결을 통하여 메시지를 보내도록 구현한 Client.java(첨부)
6) TCP 클라이언트 컴파일과 구동
-. 150.28.68.247에 5555포트를 이용하여 운영되고 있다고 가정하고 TCP 클라이언트 컴파일
===============================================================================
[root@D:\My Documents\00.업무문서\문서정리]#javac -classpath C:\TmaxSoft\JEUS5027\lib\system\jeus.jar Client.java
===============================================================================
-. Client.class파일을 현재 작업 디렉토리(c:\tcptest) 아래의 “sample\client” 디렉토리 아래로 옮긴다.
-. Client.class를 다음과 같이 실행시킨다.(모두 한 줄에)
===============================================================================
[root@C:\tcptest]#java -classpath C:\TmaxSoft\JEUS5027\lib\system\jeus.jar;. sample.client.Client
===============================================================================
-. TCP 핸들러의 결과 값(SampleServlet 클래스)
a) JEUS 콘솔 상에 남겨진 결과값
===============================================================================
[SampleServlet] received magic = 7777
[SampleServlet] received type = 0
[SampleServlet] received body length = 128
[SampleServlet] received service name = sample
[SampleServlet] received msg1 = test request
[SampleServlet] received msg2 = test request2
===============================================================================
b) 클라이언트를 실행한 cmd창에 남겨진 결과값
===============================================================================
[Client] received magic = 7777
[Client] received type = 1
[Client] received body length = 128
[Client] received service name = sample
[Client] received msg1 = test response
[Client] received msg2 = test response2
===============================================================================
3. <webserver-connection>의 Timeout 값들의 의미(단위 : Millisecond)
1) read-timeout : default= 0(Infinity)
(http-listener/tmax-listener/ajp13-listener/tcp-listener/udp-listener에 read-timeout항목은
JEUS 5.0에서는 fix26 이후부터 설정 가능하다.)
-. webtob-listener : WebtoB 웹서버는 WebtoB설정파일의 "svrchktime"변수에 설정된 간격마다
Web Container에 지속적으로 "ping"을 보낸다. Web Container는 WebtoB가 보낸
"ping"들을 체크하기 위해 이 element에 시간간격을 설정한다.
만일 WebtoB ping이 여기서 설정한 시간 간격 내에 감지 되지 않는다면,통신링크는
깨진 걸로 간주되고 reset 된다.
따라서 이 element의 값은 보통 "svrchktime"값보다 크게 설정되어야 한다.
-. http-listener/tmax-listener
/ajp13-listener/tcp-listener
/udp-listener : 웹 서버/웹 클라이언트로부터 request를 읽어 올때 기다리는 최대의 시간을 설정한다.
만약 keep-alive 알고리즘을 사용한다면(HTTP version 1.1) 이 read-timeout설정 값이
0이 아닐경우 thread의 상황에 따라 재조절 될 수 있다.
2) postdata-read-timeout : default = 30000
-. 웹 서버/웹 클라이언트로부터 post-data를 읽어올 때 기다리는 최대 시간을 설정한다.
3) reconnect-timeout : default = -1 (무한한 timeout 주기), 0일 경우에는 재연결을 시도하지 않는다.
-. webtob-listener : WebtoB서버와 webtob-listener사이의 커넥션이 작업 동안에 연결이 끊어질 경우도
있다. 이런 경우에 재연결을 시도하게 되는데, 이 element는 재연결의 timeout값으로
사용된다. 만일 최근 모든 끊어진 WebtoB 커넥션이 해당값이 지나도 연결이 되지 않고
WebtoB 백업서버들이 정의되어 있으면 Web Container는 WebtoB 백업서버로
fail-over를 시도한다. 만일 WebtoB 백업서버에도 연결이 실패하면, 그 다음 서버로
계속해서 시도한다. 마지막 WebtoB 백업서버까지 실패하면, 다시 메인
webtob-listener와 연결을 시도한다.
-. tmax-listener : Tmax와 tmax-listener사이의 커넥션이 작업 동안에 연결이 끊어질 경우도 있다.
이런 경우에 재연결을 시도하게 되는데, 이 element는 재연결의 timeout값으로 사용된다.