내용 목차
본 장에서는 TCPGW 환경설정 방법에 대해 설명한다.
TCPGW는 TCPGW 라이브러리와 적절하게 구현한 custom.c, custom.h를 컴파일하여 생성한다. TCPGW 서버가 구성되려면 운영체제에 따라 디렉터리별로 다음과 같은 파일들이 존재해야 한다.
UNIX
디렉터리 | 파일명 |
---|---|
lib | libtcpgw.a, libtcpgw.so, libtmaxgw.a, libtmaxgw.so |
lib64 | libtcpgw.a, libtcpgw.so, libtmaxgw.a, libtmaxgw.so |
Windows
디렉터리 | 파일명 |
---|---|
bin | tcpgw.dll, tmaxgw.dll |
lib | tcpgw.lib, tmaxgw.lib |
TCPGW 라이브러리들은 Tmax를 설치할 때 각 디렉터리 아래에 생성되지만 custom.c나 custom.h는 별도로 제공되므로 필요할 경우 기술지원 담당자에게 요청해야 한다.
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
MIN
TCPGW의 프로세스 개수를 지정하는 항목으로, 이 항목의 값이 1보다 클 경우에 TCPGW의 모드에 따라서 사용하는 포트 번호가 달라진다.
구분 | 설명 |
---|---|
서버 모드 | MIN 값이 2 이상이면 2개 이상의 프로세스에서 같은 포트를 Listen할 수 없으므로 TCPGW는 CLOPT 항목 (TCPGW 옵션)의 옵션 중 [–P] 옵션으로 입력하는 포트 번호에 자신의 서버 번호를 사용한다. 예를 들어 포트 번호가 5050이면 첫 번째 프로세스는 5050 포트 번호를, 두 번째 프로세스는 5051 포트 번호를 사용한다. 이런식으로 1씩 증가되면서 프로세스 개수만큼 포트를 사용한다. 그러므로 프로세스 수가 2개 이상이면 지정한 프로세스 수만큼 포트 번호가 사용 가능한지 확인해야 한다. |
클라이언트 모드 | 리모트 노드에서 하나의 포트 번호를 대기하고, 모든 TCPGW 프로세스는 리모트 노드에서 대기하고 있는 포트로 연결하는 방식이다. 클라이언트로 동작할 경우에는 3가지 방식으로 사용할 수 있다.
|
CPC
Tmax 엔진과 TCPGW 사이의 채널 수를 지정하는 항목으로, Tmax의 클라이언트나 서비스에서 리모트 노드로 요청하는 경우에는 동시에 요청하는 수만큼 CPC 수를 지정해야 한다. 이 경우에도 NON 블록형인 경우에는 동시 요청 수만큼 지정할 필요가 없이 적당한 수만큼만 지정하면 된다. 반대의 경우 TCPGW는 Tmax 엔진 tpacall로 요청하므로 많은 채널을 사용할 필요는 없다.
CLOPT
CLOPT 항목 (TCPGW 옵션) 설명을 참고한다.
SVCTIME
TCPGW는 하나의 서버 프로세스에 여러 개의 서비스를 지정하여 서비스마다 SVCTIME 값을 다르게 적용할 수 있다. 이를 위해서 SERVICE 절에 여러 개의 서비스를 지정하고, 서비스마다 SVCTIME 값을 다르게 지정하면 TCPGW는 해당 요청한 서비스별로 지정한 SVCTIME 값을 사용한다.
SERVER 절과 SERVICE 절의 세부 설정항목에 대한 설명은 “Tmax Administration Guide”의 “제3장 환경 파일 설정”을 참고한다.
TCPGW는 Tmax 환경 파일에 등록할 수 있는 항목이 제한되어 있는 관계로 CLOPT 항목에 많은 옵션을 설정할 수 있다. 옵션에 따라서 TCPGW 동작 방식이 다르므로 아래의 설명을 정확히 이해해야 한다.
다음은 TCPGW의 사용 옵션에 대한 설명이다.
서버 모드로 TCPGW가 동작할 경우에 Listen하고자 하는 IP 주소를 지정하는 옵션이다. 이 옵션은 지정한 IP 주소에 대해서만 연결을 받아들이는 경우에 사용한다.
TCPGW가 클라이언트 모드로 동작하는 경우에 [-M] 옵션과 함께 사용하여 동작 모드를 변경하여 TCPGW가 연결할 리모트 노드의 IP를 지정할 수 있다.
다음은 TCPGW는 들어오는 채널에 대해서는 "1.1.1.1" IP 주소에 8080 포트로 10개의 채널을 연결하고, 나가는 채널에 대해서는 "2.2.2.2" IP 주소에 8081 포트로 10개의 채널을 연결하는 예제이다. 이와 같이 클라이언트로 동작하는 경우에 리모트 노드의 IP 주소를 별도로 지정할 수 있다.
-R 1.1.1.1 –P 8080 –r 2.2.2.2 –p 8081 –M 1 –N 10 –n 10
IPv6 프로토콜을 사용하여 Listen하려면 -XSERVER_IPV6를 'Y'로 설정해야 한다.
-R 2011::100:100 –P 8080 -XSERVER_IPV6=Y –r 2.2.2.2 –p 8081 –M 1 –N 10 –n 10
TCPGW가 클라이언트 모드로 동작할 경우 리모트 노드의 IP 주소를 지정하는 옵션이다.
클라이언트 모드에서 백업 기능 및 멀티 서버 채널 정보 설정을 위해서 다음과 같이 문법이 강화되었다.
-r mainaddr[:mainport][/backupaddr[:backupport]][(type)][,...]mainaddr
backupaddr은 IP 주소이고 mainport, backupport는 포트 번호이다.
IPv6 프로토콜을 사용하는 경우 "-X CLIENT_IPV6=Y" 옵션을 함께 설정해야 한다. IPv6 프로토콜 환경에서는 mainaddr, backupaddr을 설정할 때 host 주소와 포트 번호를 구분하기 위해 대괄호([ ])로 address 부분을 감싸준다.
-r [2011::100:100]:8080(A)/[2011::100:200]:9090(A) -X CLIENT_IPV6=Y
type은 다음과 같이 설정할 수 있다.
설정 항목 | 설명 |
---|---|
I(IN CHANNEL) | IN CHANNEL이 [-N] 옵션으로 지정된 수만큼 생성된다. |
O(OUT CHANNEL) | OUT CHANNEL이 [-n] 옵션으로 지정된 수만큼 생성된다. |
A(ANY CHANNEL) | IN CHANNEL이 [-N] 옵션, OUTCHANNEL이 [-n] 옵션으로 지정된 수만큼 생성된다. |
서버 모드인 경우에는 Listen할 포트 번호이다. 해당 포트 번호는 다른 프로세스에서 사용하지 않은 포트 번호이어야 한다.
클라이언트 모드인 경우에는 [-R] 옵션에서 설명한 것처럼 클라이언트 포트 번호로도 사용할 수 있다.
리모트 노드가 대기하고 있는 포트 번호를 설정한다. 해당 포트 번호는 다른 프로세스에서 대기하지 않은 포트 번호이어야 한다.
서버 모드로 입력한 IP 주소와 포트 번호를 클라이언트 모드로 바꾸는 옵션이다.
[-R], [–P] 옵션으로 입력한 값은 서버 모드의 IP 주소와 포트 번호인데, 이를 연결하고자 하는 리모트 노드의 IP 주소와 포트 번호로 바뀌도록 하는 옵션이다.
"-M 0"은 기본적인 TCPGW의 모드 값이다. 그러나 "-M 1"로 설정하면 서버 모드에서 클라이언트 모드로 변경된다. (기본값: 0)
TCPGW와 통신하는 리모트 노드의 코드체계가 다를 경우에 데이터를 변환하는 옵션이다.
송수신 데이터를 ASCII EBCDIC, 조합형 한글, 완성형 한글로 변환한다. 옵션을 사용할 경우에 사용자는 송수신 데이터의 map 파일을 등록해야 한다.
코드 변환에 대해서는 “1.3.5. 코드 변환”을 참고한다. (기본값: 변환하지 않음)
리모트 노드에서 TCPGW로 들어오는 채널 수를 지정하는 옵션이다.
서버 모드나 클라이언트 모드에 관계없이 사용하는 옵션이다.
TCPGW에서 리모트 노드로 나가는 채널 수를 지정하는 옵션이다.
TCPGW가 클라이언트로 동작하는 경우에만 의미가 있다.
사용자가 공유 메모리를 확보하여 위에서 설명한 [-N], [–n]으로 주어진 채널의 상태를 사용자가 저장할 수 있도록 공유 메모리의 키값을 입력하는 옵션이다.
TCPGW는 이 옵션으로 미리 공유 메모리를 확보하지 않고 전적으로 사용자에게 전달하여 사용자가 임의로 사용하도록 전달하는 역할만 한다. 일반적으로 이 옵션은 TCPGW가 최초로 실행되었을 때 사용자 Routine(init_remote_info)를 호출할 때 넘겨주어서 사용자가 공유 메모리를 확보하는 데 사용한다.
특수 용도로 사용하는 CLOPT 항목의 옵션으로, 위에서 설명한 IP 주소나 포트 번호를 입력하지 않고 환경 파일에 등록해서 사용하는 옵션이다.
특수 용도로 사용하므로 일반 사용자는 사용할 수 없다.
TCPGW를 클라이언트로 사용하는 경우에 사용하는 옵션으로 [–r], [–p] 옵션이 하나의 리모트 노드의 IP와 연결한다면, [–f] 옵션은 여러 리모트 노드와의 연결을 맺기 위한 옵션이다. 이 경우에 연결할 리모트 정보를 별도의 파일에 등록하고 [–f] 옵션을 사용하여 해당 파일명을 지정하면 TCPGW는 해당 파일의 정보를 로드하여 리모트 노드와 연결한다.
[–r], [–p] 옵션과 함께 사용할 수 없고, TCPGW를 서버로 사용하는 경우에는 사용할 수 없다. 클라이언트 모드에서만 사용 가능하다.
[–f ] 옵션을 사용하려면 리모트 노드와 항상 연결을 맺고 있어야 하므로, 매번 요청할 때마다 리모트 노드에 연결하는 [–E] 옵션은 사용할 수 없다.
리모트가 IPv6 프로토콜을 사용하는 경우에는 ipaddr 입력 필드에 IPv6 형식의 주소를 입력하고 ipv6 입력 필드를 'Y'로 설정하면 IPv6 프로토콜로 소켓을 생성하여 연결한다. 이 파일에 지정한 ipv6 설정은 CLOPT 절에 지정한 '-X CLIENT_IPV6' 설정보다 우선적으로 적용된다.
TCPGW가 클라이언트 모드로 동작하면서 동시에 같은 TCPGW 프로세스가 2개 이상(MIN=2) 실행될 경우 리모트 노드와 연결하는 포트 번호를 지정하는 옵션이다. 옵션을 지정하면 TCPGW는 [-p]로 지정한 포트 번호에 서버 번호를 더한 포트 번호로 리모트 노드에 연결을 시도한다.
예를 들어 "-p 8080 –C" 옵션을 사용하고 MIN=3으로 설정했을 경우 첫 번째 TCPGW 프로세스는 8080 포트 번호를, 두 번째 TCPGW 프로세스는 8081 포트 번호를, 세 번째는 8082 포트 번호를 사용한다.
리모트 노드와 통신할 때 TCPGW로 들어오는 채널과 나가는 채널을 분리하여 사용하는 경우에 사용한다. 또는 요청이 Tmax에서 리모트 노드로 발생할 경우에만 의미가 있다.
TCPGW는 옵션이 지정되면 Tmax에서 들어온 요청을 나가는 채널로 전송한다. 그리고 리모트 노드로부터 나가는 채널로 데이터가 수신되면 이를 이전에 전송한 데이터의 ACK 응답으로 처리하고, 요청에 대한 응답은 들어오는 채널로 수신한다. 즉, TCPGW와 리모트 노드 사이에 요청한 데이터에 대해서 잘 받았다는 ACK 정보를 주고받는 경우에 사용하는 옵션이다. 반대로 요청에 대한 ACK는 보내지 않는다.
NON 블로킹 모드로 TCPGW를 사용하거나 또는 비동기 방식으로 사용할 때 TCPGW가 요청할 서비스명을 등록하는 옵션이다.
NON 블로킹 모드로 사용할 때 Tmax의 송신 서비스는 TCPGW로 tpforward하고, 리모트 노드에서 수신한 응답을 TCPGW는 수신 서비스에게 tprelay하기 위해서 relay될 서비스명을 등록한다. 또한, 비동기 통신방식에서 Tmax 클라이언트나 서비스는 TCPGW로 서비스를 요청(tpacall with TPNOREPLY)하고 끝난다. 이후에 리모트 노드에서 수신받은 응답은 일반적으로는 TPNOREPLY로 호출했으므로 데이터를 버리게 되는데, 서비스명을 지정하면 TCPGW는 지정한 서비스에 tpacall로 응답 데이터를 전달한다. 옵션으로 지정한 서비스는 반드시 등록된 서비스명이어야 한다.
Tmax 클라이언트나 서비스와 TCPGW 사이에 사용자 정보 데이터를 주고받는 경우에 사용한다. 옵션으로 지정한 데이터는 리모트 노드로 전송하지 않고 임시 TCPGW에서 보관하였다가 응답이 수신되면 사용자 정보 데이터에 응답 데이터를 붙여서 호출한 서비스에게 전달하는 경우에 사용한다.
일반적으로 NON 블로킹 모드로 사용할 때, 송신 서비스와 수신 서비스가 분리되어 있어 송신 서비스에서 수신 서비스에게 데이터를 전달하는 경우에 많이 사용한다. (기본값: 0)
[-H] 옵션과 동일한 옵션으로 [-H] 옵션은 동기 방식이나 비동기 방식 모두에 적용하는 옵션인데 반해 단지 tpforward에 tprelay로 사용하는 호출에 대해서만 적용된다. (기본값: 0)
리모트 노드에서 Tmax의 서비스를 호출하고 응답 데이터를 리모트 노드에 전송할 때 전송하는 채널을 선택하는 방법을 지정하는 옵션이다. 옵션을 지정하면 리모트 노드에서 요청한 응답은 반드시 요청한 채널에 전송하게 된다. 옵션을 지정하지 않으면 리모트 노드와 연결된 채널 중 임의의 사용 가능한 채널을 선택하여 전송한다. 추후 확장을 위하여 임의의 값을 설정해야 한다.
예를 들어 "-d 0"와 같이 사용하며, 현재 설정된 값은 무시된다.
TCPGW가 클라이언트 모드로 동작할 때 매 요청마다 채널을 연결하고 해제하는 경우에 사용한다.
옵션을 사용하면 리모트 노드와의 연결된 채널이 없기 때문에 리모트 노드에서 먼저 서비스를 요청할 수 없다. 또한 이 옵션을 사용하면 매번 채널이 연결되고 해제되므로 처리 속도가 감소된다. OUTBOUND 요청에 의한 연결 시도 실패의 경우 -X OUTBOUND_REQ 옵션을 사용하는 경우 outmsg_recovery가 호출 되고 TPESYSTEM 에러가 반환된다.
get_msg_info()에서 수신한 데이터가 비정상적인 경우에는 -1로 리턴하고, 환경설정 파일의 CLOPT 절에 [-e] 옵션을 설정하면 해당 채널이 종료된다. (TCPGW 3.9 버전 이상)
TCPGW를 비동기 통신 방식으로 사용할 때 사용하는 옵션이다.
비동기 통신 방식은 서비스를 요청하고 종료하는 형태로 서비스에 대한 응답도 TCPGW는 다른 서비스에 대한 요청으로 간주한다.
Tmax 클라이언트나 서비스에 TCPGW로 리모트 노드에 서비스를 요청할 때 사용자가 채널을 지정할 수 있도록 사용하는 옵션이다.
옵션을 사용하기 위해서는 사용자는 [-k] 옵션을 사용하여 채널에 대한 상태 정보를 보관하고 있어야 한다. 사용자가 지정한 채널이 사용할 수 없으면 TCPGW는 에러를 반환한다.
리모트 노드와 TCPGW 간 통신의 경우 둘 사이에는 많은 통신 장비나 또는 방어벽이 있을 수 있다. 이 경우에 특정 장비나 방어벽에 둘 사이의 채널이 일정시간 동안 사용하지 않으면 일방적으로 채널을 끊을 수 있다.
채널이 끊어진 경우 보통은 TCPGW나 리모트 노드의 프로세스에서 이를 감지하여 채널을 다시 연결할 수 있으나, 끊어진 것을 감지하지 못하는 경우가 종종 발생한다. 이를 위해서 TCPGW에서 이 옵션으로 지정한 시간(초) 동안 해당 채널이 사용되지 않으면 무조건 채널을 끊고 다시 연결을 맺도록 설정하는 경우에 사용하는 옵션이다.
리모트 노드에서 Tmax의 서비스를 요청한 이후에 서비스는 정상적으로 처리되었으나 결과를 리모트 노드에 전송할 수 없는 경우, 이전에 처리한 서비스에 대해서 취소 처리를 할 수 있도록 복구 서비스를 지정하는 옵션이다.
리모트 노드에서 Tmax의 서비스를 호출한 이후에 리모트 노드와 세션이 모두 끊어지면 서비스 처리 결과는 리모트 노드로 전송하지 않고 버려지게 된다. 이 경우에 서비스는 정상 처리하였으나 리모트 노드 입장에서는 오류로 판단하기 때문에 문제가 발생할 수 있다.
사용자가 이 옵션에 서비스명을 지정하면 게이트웨이는 리모트로 결과를 전송할 수 없는 경우에 리모트 노드로 전송할 데이터를 지정한 서비스로 호출하게 된다.
TCPGW가 클라이언트 모드로 동작하는 경우에 TCPGW는 먼저 리모트 노드와 연결을 맺게 된다. 리모트 노드와 맺어진 연결이 끊어지거나 또는 연결이 맺어지지 않는 경우에 옵션을 설정해 주지 않으면 일정시간(3초)이나 서비스 요청이 오는 경우에 다시 연결을 맺게 된다. 이럴 경우 잦은 리모트 노드와의 연결 시도때문에 시스템에 부하가 발생하게 된다.
시스템 부하 문제를 해결하기 위해 리모트 노드와의 연결을 시도하는 시간 간격(초)을 설정한 후 [–t] 옵션으로 시간을 지정해 주면 TCPGW는 이 시간 간격으로 리모트 노드와의 연결을 시도하게 된다.
리모트 노드로부터 데이터를 수신할 때 데이터의 끝을 나타내는 특정 문자 혹은 비트 스트림이 존재할 경우에 필요한 옵션이다.
옵션을 지정하면 데이터를 수신할 때 사용자의 chk_end_msg가 호출된다.
채널 장애 여부 감지(TCP 레벨의 PING/PONG) 기능을 활성화시킨다.
다음은 옵션의 인자별 처리내용에 대한 설명이다.
설정값 | 설명 |
---|---|
0 | 메인 채널 장애 복구가 감지되면 바로 메인 채널로 전환된다.(기본값) |
1 | 메인 채널 장애 복구가 감지 되더라도 안전한 시점(채널을 사용하지 않을 경우)에 메인 채널로 전환된다. |
옵션은 set_ping_msg 및 chk_pong_msg, reset_ping_msg 함수와 함께 사용된다.
[-x] 옵션을 통해 채널 장애 여부 감지 기능이 활성화된 경우에 set_extping_msg가 호출 될 때 사용 가능한 메시지 바디의 최대 크기를 지정한다. (기본값 : 0, 최댓값 : 268435455)
Ping 메시지를 전송할 때 reset_ping_msg 함수를 통해 전송할 메시지의 내용을 수정할 수 있다. 메시지 바디의 크기는 이 옵션으로 지정한 최대 크기 안에서 자유롭게 지정할 수 있다.
UID로 활용될 수 있는 메시지 번호(sequence number)의 최댓값을 설정하는 옵션이다. (기본값 : 50000, 최대 268435455까지 지정 가능)
[-y] 옵션으로 지정된 값보다 +1되어 적용된다. 따라서 기본값으로 1~500001까지 설정된다.
TCPGW는 리모트와의 통신을 하는 경우 매번 연결을 맺고 끊는 구조를 가질 수 있으며, 이 경우에 연결 끊김과 관련된 로그가 다량 발생할 수 있다. 이 옵션을 설정하면 연결이 끊길 때 발생하는 로그를 남기지 않도록 한다.
관련된 로그는 다음과 같다.
(E)SVR6102 remote socket closed (E)SVR6103 remote gateway closed : ipaddr (E)SVR0030 read error
TCPGW를 COUSIN으로 구성했을 경우 Channel IRT 기능(IRT COUSIN)이 동작하도록 설정하는 옵션이다.
TCPGW가 리모트와 연결되어 있지 않을 경우 COUSIN 그룹에 설정된 다른 TCPGW로 요청을 전달한다.
TCPGW가 클라이언트 모드로 동작하는 경우 리모트로 연결이 실패할 때 재시도 횟수를 설정하는 옵션이다.
옵션을 지정하지 않으면 기본적으로 한 번만 연결을 시도한다.
메인 주소로 재시도가 실패하면 그 다음에 백업 주소로 지정한 횟수만큼 재시도한다.
TCPGW가 클라이언트 모드로 동작하는 경우 리모트로 연결을 시도할 때 최대로 대기하는 타임아웃 시간을 설정하는 옵션이다. (기본값 : 3, 단위 : 초)
TCPGW가 서버 모드로 동작하는 경우에 Listen 소켓을 생성할 때 IPv6 프로토콜을 사용할 것인지 여부를 지정하는 옵션이다.
다음은 각 설정값에 대한 설명이다.
설정값 | 설명 |
---|---|
N | IPv4 프로토콜을 사용한다. 옵션을 설정하지 않는 경우도 동일하다. |
Y | IPv6 프로토콜을 사용한다. |
TCPGW가 클라이언트 모드로 동작하는 경우 리모트 연결을 위한 소켓을 생성할 때 IPv6 프로토콜을 사용할 것인지 여부를 지정하는 옵션이다.
다음은 각 설정값에 대한 설명이다.
설정값 | 설명 |
---|---|
N | IPv4 프로토콜을 사용한다. 옵션을 설정하지 않는 경우도 동일하다. |
Y | IPv6 프로토콜을 사용한다. |
다음은 서버/클라이언트 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())의 인자로 전달되어 사용자가 저장해야 할 내용 등을 이 키를 이용하여 공유 메모리에 저장할 수 있다.
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는 요청에 대한 응답을 요청한 채널에 전송한다. 단,요청한 채널이 끊어진 경우에 데이터는 소멸된다.
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를 반드시 사용해야 한다.
리모트 노드에서 요청하는 서비스에 대한 동기형 비동기형 구분은 [-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 개수를 적당하게 지정해야 한다.
보통 리모트 노드와 통신할 때 두 채널 사이에는 복잡한 통신 장비를 거쳐서 통신이 이루어지거나 또는 방어벽을 사이에 두는 경우가 많다. 이러한 경우에 둘 사이의 채널이 일정시간 동안 사용하지 않으면 통신 장비나 또는 방어벽에서 해당 채널을 끊어서 둘 사이에 통신이 이루어지지 않는 경우가 발생한다.
이를 방지하기 위해 둘 사이에 일정간격으로 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
다음은 여러 노드의 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 N 3 2011::100:100 7737 5 5 Y 4 2011::100:200 7747 5 5 Y
설정 파일의 각 항목에 대한 설명은 아래와 같다.
설정 항목 | 설명 |
---|---|
tcpgw_no | TCPGW 프로세스 번호로 0부터 시작한다. |
ip_addr | 리모트 호스트명이나 IP 주소이다. |
port_no | 리모트 포트 번호이다. |
in_channel | 요청이 전달된 INPUT 채널 번호이다. |
out_channel | 응답을 전달하는 OUPUT 채널 번호이다. |
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 Y/N 0 2011::100:200/2011::200:200 7727 5 5 Y 1 192.168.1.1/192.168.1.2 7737/7738 5 5 1 www.tmax.co.kr 7747/7748 5 5 Y/N
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"를 보관하고 나머지 데이터만 리모트 노드에 전송한다. 리모트 노드로부터 응답을 수신받으면 보관되어 있는 사용자 헤더와 응답 데이터를 붙여서 반환한다.
사용자 헤더는 사용자가 임의로 사용할 수 있는 데이터로, 여러 가지 방법으로 사용할 수 있다.
다음은 사용자 헤더를 사용하는 일반적인 방법이다.
tprelay나 비동기 서비스명 지정
NON 블록형 방식으로 사용할 경우 사용자 헤더에 tprelay될 서비스를 지정할 수 있다. 이 경우에 [-S] 옵션으로 지정한 것보다 우선한다. 사용자 헤더에도 서비스를 지정하고, [-S] 옵션으로 서비스를 지정한 경우 TCPGW는 먼저 사용자 헤더에서 사용자 함수(get_service_name)를 호출하여 서비스를 찾는다. 서비스를 찾지 못한 경우 [-S] 옵션으로 지정한 서비스를 사용한다.
비동기형 방식(tpacall에 TPNOREPLAY)으로 호출한 경우에도 응답 데이터에 대해서 위와 동일하게 처리한다.
키 데이터 보관
NON 블로킹 모드로 사용할 경우 송신과 수신 서비스로 분리된다. 송신 서비스에서 데이터베이스에 적절한 작업을 처리하고 리모트 노드로 데이터를 전송하고 송신 서비스는 종료된다. 나중에 수신 서비스에서 송신 서비스에서 처리한 데이터베이스의 키 정보를 알고자 하는 경우나, 또는 수신 서비스에 리모트 노드에서 오류가 발생한 경우 데이터베이스를 되돌려 놓기 위한 중요한 데이터를 보관하는 경우에 많이 사용한다.
[-E] 옵션을 사용하여 매번 요청할 때마다 채널을 연결하고 해제할 수 있다. 이런 경우에도 백업 채널을 지정할 수 있다. CLOPT 항목에 [-r] 옵션을 사용하여 메인 서버 및 백업 서버의 주소와 포트 번호를 지정하여 백업 채널을 설정한다.
다음은 환경설정에 대한 예이다.
SERVER 이름 CLOPT = literalㅇ
다음은 CLOPT의 사용법에 대한 예이다.
CLOPT = "-- -r [ip]:[port]/[backup ip]:[backup port] –E"
NODE 절에 CRYPTPORT를 지정할 경우, CRYPTPORT에 지정된 포트로 접속한 클라이언트의 데이터만이 암호화된다. NODE 절 설정 항목에 대한 자세한 설명은 “Tmax Administration Guide”의 “제3장 환경 파일 설정”을 참고한다.
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”