▷ 클라이언트 리스너  
             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값으로 사용된다.