제2장 환경설정

본 장에서는 TCPGW 환경설정 방법에 대해 설명한다.

2.1. 개요

TCPGW는 TCPGW 라이브러리와 적절하게 구현한 custom.c, custom.h를 컴파일하여 생성한다. TCPGW 서버가 구성되려면 운영체제에 따라 디렉터리별로 다음과 같은 파일들이 존재해야 한다.

참고

TCPGW 라이브러리들은 Tmax를 설치할 때 각 디렉터리 아래에 생성되지만 custom.c나 custom.h는 별도로 제공되므로 필요할 경우 기술지원 담당자에게 요청해야 한다.

2.2. Tmax 환경 구성

TCPGW를 사용하기 위해서는 Tmax 환경 파일에 TCPGW를 서버로 등록해야 한다.

Tmax 서버 중 UCS 방식의 서버와 등록 방법이 비슷하며, SVRTYPE이 'UCS'가 아닌 'CUSTOM_GATEWAY'라는 것 외에는 차이점이 없다. TCPGW를 사용하기 위해 Tmax 환경 파일을 수정할 때는 SERVER 절과 SERVICE 절만 설정하면 된다.

다음은 Tmax 환경 파일의 예이다.

*DOMAIN    
tmax    SHMKEY=88000,
         MINCLH=1,
         MAXCLH=1,
         TPORTNO=8800
*NODE    
tmax1   TMAXDIR="/home/tmax",
         APPDIR="/home/tmax/appbin"
    
*SVRGROUP    
svg1    NODENAME=tmax1
    
*SERVER
tcpgw   SVGNAME=svg1,
         MIN=1,
         MAX=1,
         CPC=10,
         SVRTYPE=CUSTOM_GATEWAY,
         CLOPT="-- -P 5050 -N 10 -k 71673"
    
*SERVICE
TCPGW1
TCPGW2  SVRNAME=tcpgw, 
        SVCTIME=20,
        SVRNAME=tcpgw
참고

SERVER 절과 SERVICE 절의 세부 설정항목에 대한 설명은 Tmax Administration Guide”의 “제3장 환경 파일 설정”을 참고한다.

CLOPT 항목 (TCPGW 옵션)

TCPGW는 Tmax 환경 파일에 등록할 수 있는 항목이 제한되어 있는 관계로 CLOPT 항목에 많은 옵션을 설정할 수 있다. 옵션에 따라서 TCPGW 동작 방식이 다르므로 아래의 설명을 정확히 이해해야 한다.

다음은 TCPGW의 사용 옵션에 대한 설명이다.

2.2.1. 서버/클라이언트 TCPGW

다음은 서버/클라이언트 TCPGW 환경설정의 예이다.

*DOMAIN        
...        
*NODE        
...        
*SVRGROUP        
...        
*SERVER        
testtcpgw       SVGNAME = svg1,
                MIN = 1,
                MAX = 1,
                CPC = 10,
                SVRTYPE = CUSTOM_GATEWAY,
                # 클라이언트 TCPGW의 경우 
                CLOPT = "-- -r 168.126.185.131 -p 5050 -n 5 -k 71673 "
                # 서버 TCPGW의 경우 
                #CLOPT = "-- -P 5050 -N 5 -k 71673"
        
*SERVICE        
TESTTCPGW       SVRNAME = testtcpgw

위와 같이 환경 파일을 작성한 경우 testtcpgw라는 이름의 1개의 TCPGW는 Tmax가 boot할 때 함께 boot된다. testtcpgw의 서비스명은 TESTTCPGW이고 타임아웃 값은 설정되어 있지 않으므로 무한대기한다.

클라이언트 TCPGW의 경우 리모트 노드의 IP주소는 "168.126.185.131"이고, 리모트 노드의 Listen 포트 번호는 "5050"이 된다. testtcpgw는 boot할 때 리모트 노드와 5개의 연결을 맺는다. 서버 TCPGW의 경우 환경설정은 서버로 동작하는 것으로 Listen 포트 번호는 '5050"이고 리모트 노드와 testtcpgw는 5개의 연결을 맺게 된다.

각 경우의 [-k] 옵션으로 지정한 값은 custom.c의 함수(init_remote_info())의 인자로 전달되어 사용자가 저장해야 할 내용 등을 이 키를 이용하여 공유 메모리에 저장할 수 있다.

2.2.2. 서비스 블록형 TCPGW

TCPGW는 일단 리모트 노드와 연결이 이루어진 이후에는 서버/클라이언트 의미가 없이 동기형/비동기형 모두 사용할 수 있으므로 서버/클라이언트 모드를 별도로 설명하지 않는다.

*DOMAIN        
...        
*NODE        
...        
*SVRGROUP        
...        
*SERVER        
testtcpgw       SVGNAME = svg1,
                MIN = 1,
                MAX = 1,
                CPC = 10,
                SVRTYPE = CUSTOM_GATEWAY,
                #클라이언트 TCPGW의 경우 
                CLOPT = "-- -r 168.126.185.131 -p 5050 -n 5 -k 71673 -d 0"
                #서버 TCPGW의 경우 
                #CLOPT = "-- -P 5050 -N 5 -k 71673 –d 0"
        
*SERVICE        
TESTTCPGW       SVRNAME = testtcpgw, SVCTIME = 30

위와 같이 환경 파일을 작성한 경우 testtcpgw라는 이름의 1개의 TCPGW는 Tmax가 boot할 때 함께 boot된다.

testtcpgw의 서비스명은 TESTTCPGW이고 타임아웃은 30초이므로 30초 이내에 응답이 없으면 타임아웃을 반환한다. 타임아웃은 Tmax의 클라이언트나 서비스에서 리모트 노드로 요청한 것에 대해서만 타임아웃을 체크하고, 리모트 노드에서 요청한 서비스에 대해서는 요청한 해당 서비스에서 타임아웃을 설정해야 한다.

Tmax의 클라이언트나 서버에서 리모트 노드에 서비스를 요청할 때 TCPGW는 UID를 사용한다. UID는 메시지별 유일한 값으로써 요청에 대해 응답할 경우 반드시 TCPGW에 넘겨주어야 해당 서비스를 요청한 서비스나 클라이언트에게 돌려주게 된다.

리모트 노드에서 서비스를 요청할 때 TCPGW는 요청에 대한 응답을 요청한 채널에 전송한다. 단,요청한 채널이 끊어진 경우에 데이터는 소멸된다.

2.2.3. 서비스 NON 블록형 TCPGW

TCPGW는 일반적으로 Tmax의 서비스에서 리모트 노드로 서비스를 요청하는 경우에 주로 사용하며 일반 Tmax 클라이언트에서는 이 방식으로 직접 서비스를 호출할 수 없다. Tmax 클라이언트에서 직접 사용할 수 있는 방식은 블록형 방식이나 비동기 방식만 사용 가능하다.

*DOMAIN        
...        
*NODE        
...        
*SVRGROUP        
...        
*SERVER        
testtcpgw      SVGNAME = svg1,
               MIN = 1,
               MAX = 1,
               CPC = 5,
               SVRTYPE = CUSTOM_GATEWAY,
               #클라이언트 TCPGW의 경우 
               CLOPT = "-- -r 168.126.185.131 -p 5050 -n 5 -k 71673 -S RECVSVC 
                        -H 20 -d 0"
               #서버 TCPGW의 경우 
               #CLOPT = "-- -P 5050 -N 5 -k 71673 -S RECVSVC -H 20 –d 0"
sendsvr        MIN = 1, MAX = 1
secvsvr        MIN = 1, MAX = 1
        
*SERVICE        
TESTTCPGW      SVRNAME = testtcpgw, SVCTIME = 30
SENDSVC        SVRNAME = sendsvr
RECVSVC        SVRNAME = recvsvr

위와 같이 환경 파일을 작성한 경우 testtcpgw라는 이름의 1개의 TCPGW가 Tmax가 boot할 때 함께 boot된다.

testtcpgw의 서비스명은 TESTTCPGW이고 타임아웃이 30초이므로 30초 이내에 응답이 없으면 타임아웃을 반환한다. 리모트 노드의 응답이 지정한 시간(30초)을 초과하면 TCPGW는 타임아웃을 RECVSVC에 전달(tprelay)한다. RECVSVC 서비스에서는 반드시 tpurcode 값을 확인하여 값이 0보다 크면 에러가 발생한 경우이므로 이에 대한 적절한 처리를 해야한다. 타임아웃뿐만 아니라 모든 에러에 대해서는 tpurcode에 값이 전달되며, 에러에 대한 자세한 사항은 “Appendix A. TCPGW 에러 코드”를 참고한다.

Tmax의 클라이언트나 서버에서 먼저 SENDSVC 서비스를 호출하면 SENDSVC에서 사전 작업을 수행한 후에 TESTTCPGW 서비스로 제어권을 전달한다(tpforward). TCPGW는 일단 Tmax 엔진에 채널 해제 메시지를 전송한 후에 리모트 노드로 서비스를 요청하고, 서비스에 응답을 수신할 때 [-S] 옵션에 지정한 서비스로 결과를 전달(tprelay)한다. RECVSVC는 처리 결과에 대한 작업을 수행한 후 반환하면 원래 SENDSVC를 호출한 클라이언트나 서비스에게로 응답이 전달된다. 이 방식을 사용하면 적은 수의 서비스(SENDSVC)를 가지고 보다 많은 처리를 할 수 있다. 블록형과 같이 UID를 반드시 사용해야 한다.

2.2.4. 리모트 동기형과 비동기형 TCPGW

리모트 노드에서 요청하는 서비스에 대한 동기형 비동기형 구분은 [-d] 옵션을 사용하는지에 따라서 결정되거나 또는 사용자 정의 함수(get_msg_info)에서 flags에 TPNOREPLY를 설정하면 된다.

전자의 경우 [-d] 옵션을 사용하지 않으면 서비스에 대한 응답은 다른 채널로 전송될 수 있다. 후자인 경우에는 리모트 노드로 응답을 전송하지 않는다. [-d] 옵션을 지정한 경우에도 사용자 정의 함수(get_msg_info)에서 flags에 TPNOREPLY를 설정하면 서비스 응답은 리모트 노드에 전송되지 않는다.

*DOMAIN        
...        
*NODE        
...        
*SVRGROUP        
...        
*SERVER        
testtcpgw       SVGNAME =  svg1,
                MIN = 1,
                MAX = 1,
                CPC = 5,
                SVRTYPE = CUSTOM_GATEWAY,
                #비동기형 
                CLOPT = " -- -P 5050 -N 5 -k 71673",
                #동기형 
                #CLOPT = "-- -P 5050 -N 5 -k 71673 –d 0"
        
*SERVICE        
TESTTCPGW       SVRNAME = testtcpgw

리모트 노드에서 Tmax의 서비스를 요청하는 경우 TCPGW는 tpacall을 사용함으로 응답을 받지 않고 동시에 tpacall을 사용할 수 있는 개수가 제한되어있다.(기본값 8개) 동시에 요청이 8개 이상인 경우에는 DOMAIN 절의 MAXSACALL 개수를 적당하게 지정해야 한다.

2.2.5. 재연결 TCPGW

보통 리모트 노드와 통신할 때 두 채널 사이에는 복잡한 통신 장비를 거쳐서 통신이 이루어지거나 또는 방어벽을 사이에 두는 경우가 많다. 이러한 경우에 둘 사이의 채널이 일정시간 동안 사용하지 않으면 통신 장비나 또는 방어벽에서 해당 채널을 끊어서 둘 사이에 통신이 이루어지지 않는 경우가 발생한다.

이를 방지하기 위해 둘 사이에 일정간격으로 signal를 주고받을 수도 있으나 이를 위해서는 TCPGW뿐만 아니라 상대방의 프로그램을 감안해야 하기 때문에 이 방법을 사용하지 않고 일정시간 동안 해당 채널을 사용하지 않으면 채널을 끊고 다시 연결하는 방법을 사용한다.

다음과 같이 설정하면 TCPGW는 600초(10분) 간격으로 600초 동안 한 번도 사용하지 않은 채널은 연결을 끊고 다시 연결을 맺는다.

*DOMAIN        
...        
*NODE        
...        
*SVRGROUP        
...        
*SERVER        
testtcpgw       SVGNAME = svg1,
                MIN = 1,
                MAX = 1,
                CPC = 5,
                SVRTYPE = CUSTOM_GATEWAY,
                #비동기형 
                CLOPT = " -- -P 5050 -N 5 -k 71673 -w 600"
                #동기형 
                #CLOPT = "-- -P 5050 -N 5 -k 71673 -w 600"
        
*SERVICE        
TESTTCPGW       SVRNAME = testtcpgw

2.2.6. 여러 리모트 노드와 연결 클라이언트 TCPGW

다음은 여러 노드의 IP와 연결을 맺는 클라이언트 TCPGW의 환경설정 예이다.

*DOMAIN        
...        
*NODE        
...        
*SVRGROUP        
...        
*SERVER        
testtcpgw       SVGNAME = svg1,
                MIN = 4,    #아래 설정 파일의 환경과 동일한 수(addr)로 변경
                MAX = 4,
                CPC = 10,
                SVRTYPE = CUSTOM_GATEWAY,
                CLOPT = "-- -f config -n 5 -k 71673"
        
*SERVICE        
TESTTCPGW       SVRNAME=testtcpgw

다음은 설정 파일의 예제이다.

# tcpgw_no     ip_addr          port_no     in_channel     out_channel
0            192.168.1.1         7717       5              5
1            192.168.1.2         7727       5              5
2            192.168.1.3         7737       5              5
3            192.168.1.4         7747       5              5

다음은 IPv6 프로토콜 환경에서의 설정 파일의 예제이다.

# tcpgw_no     ip_addr          port_no     in_channel     out_channel    ipv6
1            192.168.1.1         7717       5              5
2            www.tmax.co.kr      7727       5              5              IPV4
3            2011::100:100       7737       5              5              IPV6
4            2011::100:200       7747       5              5              IPV6

설정 파일의 각 항목에 대한 설명은 아래와 같다.

설정 항목설명
tcpgw_noTCPGW 프로세스 번호로 0부터 시작한다.
ip_addr리모트 호스트명이나 IP 주소이다.
port_no리모트 포트 번호이다.
in_channel요청이 전달된 INPUT 채널 번호이다.
out_channel응답을 전달하는 OUPUT 채널 번호이다.
ipv6
  • IPV6 또는 Y : IPv6 프로토콜을 사용하여 소켓을 생성하도록 지정한다.

  • IPV4 또는 N : IPv4 프로토콜을 사용한다. 설정하지 않는 경우도 동일하게 처리된다. (기본값)

  • SDP : InfiniBand의 SDP를 사용한다. IPV4 또는 IPV6와 함께 지정할 수 있다.

설정 파일의 ip_addr, port_no, ipv6 항목들은 메인과 백업으로 작성해서 메인 연결이 실패할 경우 백업 설정으로 연결을 시도한다. 백업 설정을 하지 않은 경우 메인과 백업에 같은 값이 설정된다.

# tcpgw_no     ip_addr                      port_no         in_channel     out_channel    ipv6
0            2011::100:100/192.168.1.3      7717            5              5              IPV6/IPV4
0            2011::100:200/2011::200:200    7727            5              5              IPV6
1            192.168.1.1/192.168.1.2        7737/7738       5              5
1            www.tmax.co.kr                 7747/7748       5              5              IPV6/IPV4

2.3. 사용자 헤더 환경설정 및 사용 방법

TCPGW는 서버/클라이언트 모드, 동기형/비동기형 방식 모두에서 사용자 헤더를 설정하여 사용할 수 있다. 사용자 헤더는 Tmax 클라이언트나 서비스에서 리모트 노드로 서비스를 요청하는 경우에만 사용 가능하고, 그 반대인 경우에는 사용할 수 없다.

사용자 헤더로 지정한 데이터는 리모트 노드로 전송되지 않고 임시 TCPGW에서 UID별로 보관하였다가 응답이 오면 응답 데이터에서 UID를 찾아서 해당 UID의 사용자 헤더 데이터와 응답 데이터를 전달하게 된다. 사용자 헤더 데이터의 길이는 최대(256 Bytes)까지만 사용할 수 있다.

다음은 사용자 헤더 환경설정의 예이다.

*DOMAIN        
...        
*NODE        
...        
*SVRGROUP        
...        
*SERVER        
testtcpgw       SVGNAME = svg1,
                MIN = 1,
                MAX = 1,
                CPC = 10,
                SVRTYPE = CUSTOM_GATEWAY,
                #클라이언트 TCPGW의 경우 
                CLOPT = "-- -r 168.126.185.131 -p 5050 -n 5 -H 9 -h 10"
                #서버 TCPGW의 경우  
                #CLOPT = "-- -P 5050 -N 5 -H 9 -h 10"
        
*SERVICE        
TESTTCPGW       SVRNAME = testtcpgw

사용자 헤더는 어떤 모드에서도 사용할 수 있는 옵션이다. 사용자 헤더는 2가지로 나누어서 지정할 수 있는데, tpforward 방식으로 사용할 때(NON 블로킹)와 그 외의 다른 서비스(블록형, 비동기형)를 사용하는 경우 사용자 헤더 길이를 다르게 지정할 수 있다.

[-H] 옵션은 모든 종류의 서비스 요청에 대해서 사용자 헤더를 지정할 때 사용하는 옵션이다. 그에 반해 [-h] 옵션은 단지 tpforward 방식(NON 블로킹)에서만 사용할 수 있는 옵션이다.

위의 환경설정의 경우 TCPGW는 사용자 헤더가 지정되었을 경우 리모트 노드로 전송하는 데이터 중에서 처음부터 일반 서비스는 "9Bytes", tpforward인 경우에는 "10Bytes"를 보관하고 나머지 데이터만 리모트 노드에 전송한다. 리모트 노드로부터 응답을 수신받으면 보관되어 있는 사용자 헤더와 응답 데이터를 붙여서 반환한다.

사용자 헤더는 사용자가 임의로 사용할 수 있는 데이터로 여러 가지 방법으로 사용할 수 있다.

다음은 사용자 헤더를 사용하는 일반적인 방법이다.

2.4. 채널 백업 설정

[-E] 옵션을 사용하여 매번 요청할 때마다 채널을 연결하고 해제할 수 있다. 이런 경우에도 백업 채널을 지정할 수 있다. CLOPT 항목에 [-r] 옵션을 사용하여 메인 서버 및 백업 서버의 주소와 포트 번호를 지정하여 백업 채널을 설정한다.

다음은 환경설정에 대한 예이다.

SERVER 이름         CLOPT = literalㅇ

다음은 CLOPT의 사용법에 대한 예이다.

CLOPT =  "-- -r [ip]:[port]/[backup ip]:[backup port] –E"
참고

NODE 절에 CRYPTPORT를 지정할 경우 CRYPTPORT에 지정된 포트로 접속한 클라이언트의 데이터만이 암호화된다. NODE 절 설정 항목에 대한 자세한 설명은 Tmax Administration Guide”의 “제3장 환경 파일 설정”을 참고한다.

2.5. Ping 메시지 체크 시 데이터 전송

set_ping_msg() 함수와 chk_pong_msg() 함수를 사용하여 Ping 메시지를 전송하여 채널의 장애 여부를 주기적으로 감시할 수 있다. 이 경우에 Ping 메시지는 헤더만 있기 때문에 데이터 부분을 전송할 수 없다.

set_ping_msg(), chk_pong_msg() 함수 대신에 set_extping_msg(), chk_extpong_msg(), reset_extping_msg() 함수를 사용한다. 이 함수들에 대한 자세한 설명은 “3.3. custom.c”를 참고한다.

다음은 환경설정에 대한 예이다.

[DEFAULT :]
SERVER 이름     [,CLOPT = -b len]
항목설명
CLOPT = -b len선택 항목으로 Ping 메시지 데이터의 최대 크기를 지정한다.

다음과 같이 CLOPT 항목에 [-r] 옵션을 설정하여 Ping 메시지의 데이터를 추가하여 전송할 수 있다.

CLOPT = “-- -r 192.168.1.31 –p 5060 –n 1 –x 1 –b 64”