환경설정
본 장에서는 Tmax에서 제공되는 X.25 게이트웨이의 환경 구성 및 설정 방법에 대해 기술한다.
1. 개요
X25GW 서버가 구성되려면 다음과 같은 파일들이 존재해야 한다.
-
UNIX
다음은 UNIX에서 사용되는 파일이다.
디렉터리 파일명 lib
lbx25gw.a, libx25gw.so, libtmaxgw.a, libtmaxgw.so
lib64
lbx25gw.a, libx25gw.so, libtmaxgw.a, libtmaxgw.so
-
Windows
다음은 Windows에서 사용되는 파일이다.
디렉터리 파일명 lib
x25gw.dll, tmaxgw.dll
lib64
x25gw.lib, tmaxgw.lib
위의 파일(X25GW 라이브러리)들은 Tmax 설치할 때 각 디렉터리 아래에 만들어지지만 custom.c나 custom.h는 따로 제공되므로 필요할 경우 기술지원 담당자에게 요청해야 한다.
X25GW 라이브러리와 적절하게 구현한 custom.c, custom.h를 컴파일하여 X25GW를 생성하게 된다.
2. Tmax 환경 구성
X25GW를 사용하기 위해서는 Tmax 환경 파일에 X25GW를 서버로 등록해야 한다. Tmax 서버 중 UCS형 서버와 등록 방법이 비슷한데, 차이점은 SVRTYPE이 UCS에서 CUSTOM_GATEWAY라는 것이다. X25GW를 사용하기 위해 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 x25gw SVGNAME = svg1, MIN = 1, MAX = 1, CPC = 10, SVRTYPE=CUSTOM_GATEWAY, CLOPT=”-- -F /home/tmax/config/x25gw.cfg –N 4096 –h 20” *SERVICE X25GW1 SVRNAME=x25gw, SVCTIME=20 X25GW2 SVRNAME=x25gw, SVCTIME=25
X25GW의 프로세스 개수를 지정하는 항목으로써 이 항목의 값이 1보다 클 경우에는 X25GW 환경 파일에 프로세스별로 채널 정보를 다르게 정의해야 한다 (채널 환경 파일 내용을 참고한다).
항목 | 설명 |
---|---|
MIN |
X25GW의 프로세스 개수를 지정하는 항목으로 항목의 값이 1보다 클 경우에는 X25GW 환경 파일에 프로세스별로 채널 정보를 다르게 정의해야 한다. 자세한 내용은 채널 환경 파일 내용을 참고한다. |
CPC |
Tmax 엔진과 X25GW 간의 채널 수를 지정하는 항목으로써, Tmax의 클라이언트나 서비스에서 리모트 노드로 요청하는 경우에는 동시에 요청하는 수만큼 CPC 수를 지정해야 한다. NON 블록형인 경우에는 동시 요청 수만큼 지정할 필요가 없이 적당한 수만큼만 지정하면 된다. 반대인 경우에는 X25GW는 Tmax 엔진으로 tpacall로 요청하므로 많은 채널을 사용할 필요는 없다. |
CLOPT |
자세한 내용은 CLOPT 항목 (X25GW 옵션) 내용을 참고한다. |
SVCTIME |
X25GW는 하나의 서버 프로세스에 여러 개의 서비스를 지정하여 서비스마다 SVCTIME 값을 다르게 적용할 수 있다. 이를 위해서 *SERVICE 절에 여러 개의 서비스를 지정하고, 서비스마다 SVCTIME 값을 다르게 지정하면 X25GW는 해당 요청한 서비스별로 지정한 서비스 Time 값을 사용한다. |
CLOPT 항목 (X25GW 옵션)
X25GW는 Tmax 환경 파일에 등록할 수 있는 항목이 제한되어 있는 관계로 CLOPT 항목에 많은 옵션을 설정할 수 있다. 옵션에 따라서 X25GW이 동작 방식이 다르므로 아래의 설명을 정확히 이해해야 한다.
옵션 | 설명 |
---|---|
[-r] |
리모트 노드와 채널이 끊어졌을 때 재연결할 때 연결 횟수를 지정하는 옵션이다. X25GW는 리모트 노드와 채널별로 지정한 횟수를 초과하여 끊어진 경우에는 재연결을 시도하지 않는다. (기본값: 무한) |
[-N] |
X25GW와 리모트 노드 간에 송수신하는 가장 큰 메시지의 사이즈이다. X25GW에서는 옵션에서 지정한 사이즈만큼 메모리를 확보하여 수신받기 때문에 넉넉한 사이즈를 지정해야 한다. |
[-n] |
X25GW와 리모트 노드 간에 한 번에 송수신할 수 있는 사이즈를 지정한다. [-N] 옵션으로 지정한 전체 메시지를 이 옵션에서 지정한 사이즈 단위로 송수신한다. 옵션의 사이즈는 [-N] 옵션의 값보다 클 수 없다. (기본값: [-N] 옵션과 같다.) |
[-t] |
X25GW에서 사용하는 채널 중 리모트 노드와 연결이 끊어진 경우 즉시 리모트 노드와 채널을 연결하지 않고 설정 시간마다 연결할 수 있도록 시간(초)를 지정하는 옵션이다. X25GW는 주어진 시간 간격으로 채널이 끊어진 경우 재연결을 시도한다. (기본값: 3초) |
[-k] |
사용자가 공유 메모리를 확보하여 X25GW 환경 파일에서 정의한 채널의 상태를 사용자가 저장할 수 있도록 공유 메모리의 키 값을 입력하는 옵션이다. X25GW는 공유 메모리를 확보하지 않고 전적으로 사용자에게 전달하여 사용자가 임의로 사용하도록 전달하는 역할만 한다. X25GW가 최초 실행하는 경우 사용자 Routine(init_remote_info)를 호출할 때 넘겨주어서 사용자가 공유 메모리를 확보하는데 사용한다. |
[-F] |
X25GW의 채널 정보가 등록되어 있는 환경 파일명을 지정하는 항목이다. |
[-S] |
NON 블로킹(blocking) 모드로 X25GW를 사용하거나 또는 비동기 방식으로 사용할 때 X25GW가 요청할 서비스명을 등록하는 옵션이다. NON 블로킹(blocking) 모드로 사용할 때 Tmax의 송신 서비스는 X25GW로 tpforward하고, 리모트 노드에서 수신한 응답을 X25GW는 수신 서비스에게 tprelay하기 위해서 relay될 서비스명을 등록한다. 비동기 통신방식에서 Tmax 클라이언트나 서비스는 X25GW로 서비스를 요청(tpacall with TPNOREPLY)하고 끝난다. 이후에 리모트 노드에서 수신받은 응답은 일반적으로는 TPNOREPLY로 호출했으므로 데이터를 버리게 되는데, 이 옵션에 서비스명을 지정하면 X25GW는 지정한 서비스에 tpacall로 응답 데이터를 전달한다. 이 옵션으로 지정한 서비스는 반드시 등록되어 있는 서비스명이어야 한다. |
[-H] |
Tmax 클라이언트나 서비스와 X25GW 사이에 사용자 정보 데이터를 주고받고자 하는 경우에 사용한다. 옵션으로 지정한 데이터는 리모트 노드로 전송하지 않고 임시 X25GW에서 보관하였다가 응답이 수신되면 사용자 정보 데이터에 응답 데이터를 붙여서 호출한 서비스에게 전달하려는 경우에 사용한다. NON 블로킹(blocking) 모드로 사용할 때 송신 서비스와 수신 서비스가 분리되어 있어 송신 서비스에서 수신 서비스에게 데이터를 전달하려는 경우에 많이 사용한다. |
[-h] |
위의 [-H] 옵션과 동일한 옵션이다. 위의 옵션은 동기 방식이나 비동기 방식 모두에 적용하는 옵션인데 반해 이 옵션은 단지 tpforward에 tprelay로 사용하는 호출에 대해서만 적용된다. |
[-a] |
X25GW를 비동기 통신 방식으로 사용하고자 할 때 사용하는 옵션이다. 비동기 통신 방식은 서비스를 요청하고 종료하는 형태이다. 서비스에 대한 응답도 X25GW는 다른 서비스에 대한 요청으로 간주한다. |
[-u] |
Tmax 클라이언트나 서비스에 X25GW로 리모트 노드에 서비스를 요청할 때 사용자가 채널를 지정할 수 있도록 사용하는 옵션이다. 옵션을 사용하기 위해서는 사용자는 [-k] 옵션을 사용하여 채널에 대한 상태 정보를 보관하고 있어야 한다. 사용자가 지정한 채널이 사용할 수 없으면 X25GW는 에러를 반환한다. |
[-Y] |
리모트 노드에서 Tmax의 서비스를 요청한 이후에 서비스는 정상적으로 처리되었으나 결과를 리모트 노드에 전송할 수 없는 경우 이전에 처리한 서비스에 대해서 취소 처리를 할 수 있도록 복구 서비스를 지정하는 옵션이다. 리모트 노드에서 Tmax의 서비스를 호출한 이후에 리모트 노드와 세션이 모두 끊어지면 서비스 처리 결과는 리모트 노드로 전송하지 않고 버려지게 된다. 이 경우에 서비스는 정상 처리하였으나 리모트 노드 입장에서는 오류로 보기 때문에 문제가 발생할 수 있다. 이런 경우에 사용자가 이 옵션에 서비스명을 지정하면 게이트웨이는 리모트로 결과를 전송할 수 없는 경우에 리모트 노드로 전송할 데이터를 지정한 서비스로 호출하게 된다. |
[-y] |
UID로 활용될 수 있는 메시지 번호(sequence number)의 최댓값을 설정하는 옵션이다. (기본값: 50000, 최대 268435455까지 지정 가능) |
2.1. 서비스 블록형 X25GW
X25GW는 리모트 노드와 연결이 이루어지면 동기형/비동기형 모두 사용할 수 있다.
*DOMAIN … *NODE … *SVRGROUP … *SERVER x25gw SVGNAME=svg1, MIN=1, MAX=1, CPC=10, SVRTYPE=CUSTOM_GATEWAY, CLOPT=”-- -F /home/tmax/config/x25gw.cfg” *SERVICE X25GW SVRNAME=x25gw, SVCTIME=30
위와 같이 환경 파일을 작성한 경우 x25gw라는 이름의 X25GW는 1개가 Tmax boot될 때 기동된다. X25GW의 서비스명은 X25GW이고 Timeout이 30초이므로 30초 이내에 응답이 없으면 타임아웃을 반환한다. 단, Timeout은 Tmax의 클라이언트나 서비스에서 리모트 노드로 요청한 것에 대해서만 타임아웃을 체크하고, 리모트 노드에서 요청한 서비스에 대해서는 요청한 해당 서비스에서 타임아웃을 설정해야 한다.
Tmax의 클라이언트나 서버에서 리모트 노드에 서비스를 요청할 때 X25GW는 UID를 사용한다. UID는 메시지별 유일한 값으로써 요청에 대한 응답시 반드시 X25GW에 넘겨주어야 해당 서비스를 요청한 서비스나 클라이언트에게 돌려주게 된다.
리모트 노드에서 서비스를 요청할 때 X25GW는 요청에 대한 응답을 요청한 채널에 전송한다. 단, 요청한 채널이 끊어진 경우에 데이터는 소멸된다.
2.2. 서비스 NON 블록형 X25GW
일반적으로 Tmax의 서비스에서 리모트 노드로 서비스를 요청하는 경우에 주로 사용한다. 그래서 일반 Tmax 클라이언트에서는 직접 이 방식으로 서비스를 호출할 수 없다. Tmax 클라이언트에서 직접 사용할 수 있는 방식은 블록형 방식이나 비동기 방식만 사용 가능하다.
*DOMAIN … *NODE … *SVRGROUP … *SERVER x25gw SVGNAME=svg1, MIN=1, MAX=1, CPC=5, SVRTYPE=CUSTOM_GATEWAY, CLOPT=”-- -F /home/tmax/config/x25gw.cfg –S RECVSVC –H 20” sendsvr MIN=1, MAX=1 secvsvr MIN=1, MAX=1 *SERVICE X25GW SVRNAME=x25gw, SVCTIME=30 SENDSVC SVRNAME=sendsvr RECVSVC SVRNAME=recvsvr
위와 같이 환경 파일을 작성한 경우 x25gw라는 이름의 X25GW 1개가 Tmax boot될 때 기동된다. x25gw의 서비스명은 X25GW이고 Timeout이 30초이므로 30초 이내에 응답이 없으면 타임아웃을 반환한다.
Tmax의 클라이언트나 서버에서 먼저 SENDSVC 서비스를 호출하면 SENDSVC에서 사전 작업을 수행한 후에 X25GW 서비스로 컨트롤을 넘긴다. (tpforward)
X25GW는 일단 Tmax 엔진에 채널 해제 메시지를 전송한 후에 리모트 노드로 서비스를 요청하고, 서비스에 응답을 수신시 [-S] 옵션에 지정한 서비스로 결과를 전달(tprelay)한다. RECVSVC는 처리 결과에 대한 작업을 수행후 반환하면 원래 SENDSVC를 호출한 클라이언트나 서비스에게로 응답이 전달된다. 이 방식을 사용하면적은 수의 서비스(SENDSVC)를 가지고 보다 많은 처리를 할 수 있다. 블록형처럼 반드시 UID는 사용해야 한다.
리모트 노드의 응답이 지정한 시간(30초)를 초과하면 X25GW는 타임아웃을 RECVSVC에 전달(tprelay)한다. 그래서 RECVSVC 서비스에서는 반드시 tpurcode 값을 확인하여 값이 0보다 크면 에러가 발생한 경우이므로 이에 대한 적절한 처리를 해야 한다. Timeout 뿐만 아니라 모든 에러에 대해서는 tpurcode에 값이 전달됨으로 더 자세한 내용은 X25GW 에러 코드를 참고한다.
2.3. 리모트 동기형과 비동기형 X25GW
리모트 노드에서 요청하는 서비스에 대한 동기형 비동기형 구분은 X25GW 환경 파일의 Reply 타입에 따라서 결정되거나, 또는 사용자 정의 함수(get_msg_info)에서 flags에 TPNOREPLY를 설정하면 된다. 전자의 경우에는 Reply 타입을 “no”로 설정하면 서비스에 대한 응답은 다른 채널로 전송될 수 있다. 후자인 경우에는 리모트 노드로 응답을 전송하지 않는다.
*DOMAIN … *NODE … *SVRGROUP … *SERVER x25gw SVGNAME=svg1, MIN=1, MAX=1, CPC=5, SVRTYPE=CUSTOM_GATEWAY, CLOPT=”-- -F /home/tmax/config/x25gw.cfg” *SERVICE X25GW SVRNAME=x25gw
사용자 정의 함수(get_msg_info)에서 flags에 TPNOREPLY를 설정하면 서비스 응답은 리모트 노드에 전송되지 않는다. 리모트 노드에서 Tmax의 서비스를 요청할 때 X25GW는 tpacall를 사용함으로 응답을 받지 않고 동시에 tpacall를 사용할 수 있는 개수가 제한 되어있다. (기본값: 8개) 동시에 요청이 8개 이상인 경우에는 *DOMAIN 절에 MAXSACALL 개수를 적당하게 지정해야 한다.
3. X25GW 채널 환경설정
X25GW는 리모트 노드와 통신하기 위한 채널 정보를 별도의 파일에 등록하고, 해당 파일의 이름을 [-F] 옵션에 등록해 주어야 한다. X25GW 채널 정보 파일에 등록하는 방법은 X25GW를 시용하는 머신(Machine)에 따라 조금씩 차이가 있다. 그러므로 사용자는 머신별 채널 정보를 정확히 등록해야만 리모트 노드와 원할한 통신이 이루어 짐으로 채널 정보 등록의 각각의 항목에 대해서 명확히 이해해야 한다.
먼저, 각 항목에 대해서 설명한 후에 각 머신별로 차이점을 설명할 것이다.
3.1. 채널 환경 파일
################################################################ ################################################################ # x25gw_no | link_no | start_LCN_no | num_LCN | dir | reply_dedicated | # devpath [| group_id] # # x25gw_no : x25gw process number. 0부터 시작함. # link_no : x25 link number # start_LCN_no : LCN (LU) 시작 번호 # num_LCN : LCN (LU) 갯수 # (start_LCN_no ~ (start_LCN_no + num_LCN)) # dir : LCN 채널 방향 # in - 대외기관 to tmax request 전용 (Send) # out - tmax to 대외기관 request 전용 (Receive) # any - any direction # reply_dedicated : yes이면 이 LCN으로 request된 메시지의 응답은 반드시 이 LCN으로 나감. # no이면 아무거나 빈 LCN으로 나감 # devpath : x25 device path # group_id : 채널 그룹명 (생략 가능) ################################################################ 0 0 3 2 out no /dev/x25pkt 0 0 1 2 in no /dev/x25pkt
다음은 기본적인 채널 환경 파일 항목에 대한 설명이다.
항목 | 설명 |
---|---|
x25gw_no |
Tmax 설정 파일의 MIN 항목이 2이상인 경우 하나의 X25GW 채널 정보 파일에 모두 등록할 수 있다. X25GW 프로세스를 구분하기 위한 게이트웨이 번호이다. X25GW 프로세스는 자신의 게이트웨이 번호에 해당하는 채널 정보를 로드하여 리모트 노드와 연결한다. 0부터 시작해서 MIN 항목의 값 – 1까지 표현한다. |
link_no |
아래의 LCN이 속해 있는 Link 번호를 등록한다. 하나의 Link에는 많은 LCN(LU)를 가질수 있다. 즉, 많은 LCN이 하나의 Link를 공유하여 리모트 노드와 통신한다. |
start_LCN_no |
논리적인 번호로 하나의 물리적인 Link를 많은 Logical LU로 분할하여 리모트 노드와 LU별로 통신할 수 있다. LU의 시작 번호를 입력한다. |
num_LCN |
시작 LCN 번호부터 Logical LU의 개수를 지정하는 항목이다. X25GW는 시작 LCN 부터 LCN 개수 만큼의 채널을 리모트 노드와 연결한다. |
dir |
지정한 채널이 IN_CHANNEL인지 OUT_CHANNEL 또는 ANY_CHANNEL인지를 구분하는 항목이다.
|
reply_dedicated |
리모트 노드에서 Tmax 서비스를 호출한 이후에 응답이 어느 채널로 나가는지를 지정하는 항목이다.
|
devpath |
X25GW의 디바이스 이름을 지정하는 항목이다. 머신마다 약간씩 다르다. |
group_id |
채널을 그룹별로 구분해서 사용해야할 때 등록하여 사용할 수 있다. 2개 이상의 채널이 같은 그룹에 속하면, Round-Robin 방식의 로드 분산을 지원한다. |
3.2. 머신별 채널 환경 파일
다음은 머신별 채널 환경 파일에 대한 설명이다.
머신 | 항목명 | 설명 |
---|---|---|
IBM SUN |
채널 환경 파일에서 설명한 방법대로 등록한다. |
|
HP |
devpath |
HP 머신에서는 디바이스명 항목에 디바이스명을 입력하지 않고 인터페이스명을(Link 이름)을 입력한다. 나머지 항목은 IBM이나 SUN과 동일한다. |
NCR |
start_LCN_no |
NCR 머신은 LCN(LU)별로 로컬명이 따로 존재하기 때문에 LCN별로 로컬명을 따로 지정해야만 한다. 항상 1로 한다. |
num_LCN |
항상 1을 입력한다. |
|
devpath |
NCR는 로컬명과 리모트 이름으로 서로 연결함으로 로컬명과 리모트명을 LCN별로 등록해 주어야 한다. 각 LCN에 해당하는 로컬 이름을 등록하는 항목이다. |
|
devpath2 |
NCR인 경우만 사용하는 항목으로 리모트 LCN명을 입력한다. |
4. 사용자 헤더 환경설정
X25GW는 사용자 헤더를 설정하여 사용할 수 있다. 사용자 헤더는 Tmax 클라이언트나 서비스에서 리모트 노드로 서비스를 요청하는 경우에만 사용 가능하고, 그 반대인 경우에는 사용할 수 없다. 사용자 헤더로 지정한 데이터는 리모트 노드로 전송되지 않고 임시 X25GW에서 UID 별로 보관하였다가 응답이 오면 응답 데이터에서 UID를 찿아서 해당 UID의 사용자 헤더 데이터와 응답 데이터를 전달하게 된다. 사용자 헤더 데이터의 길이는 최대(256Bytes)까지만 사용할 수 있다.
사용자 헤더는 어떤 모드에서도 사용할 수 있는 옵션이다. 사용자 헤더는 2가지로 나누어서 지정할 수 있는데, tpforward 방식으로 사용할 때(NON 블로킹(blocking))와 그 외의 다른 서비스(블록형, 비동기형)를 사용하는 경우 사용자 헤더 길이를 다르게 지정할 수 있다.
*DOMAIN … *NODE … *SVRGROUP … *SERVER x25gw SVGNAME=svg1, MIN=1, MAX=1, CPC=10, SVRTYPE=CUSTOM_GATEWAY, CLOPT=”-- -F /home/tmax/config/x25gw.cfg –H 9 –h 10” *SERVICE X25GW SVRNAME=x25gw
[-H] 옵션은 모든 종류의 서비스 요청에 대해서 사용자 헤더를 지정할 때 사용하는 옵션이다. 그에 반해 [-h] 옵션은 단지 tpforward 방식(NON 블로킹(blocking))에서만 사용할 수 있는 옵션이다. X25GW는 사용자 헤더가 지정되었을 경우 리모트 노드로 전송하는 데이터 중에서 처음부터 일반 서비스는 9Bytes, tpforward인 경우에는 10Bytes를 보관하고 나머지 데이터만 리모트 노드에 전송한다(위의 설정인 경우).
리모트 노드로부터 응답을 수신받으면 보관되어있는 사용자 헤더와 응답 데이터를 붙여서 반환한다. 사용자 헤더는 사용자가 임의로 사용할 수 있는 데이터로 여러 가지 방법으로 사용할 수 있다.
다음은 사용자 헤더를 사용하는 일반적인 방법이다.
-
tprelay나 비동기 서비스명 지정
사용자 헤더에 NON 블록형 방식으로 사용할 경우 tprelay될 서비스를 지정할 수 있다. 이 경우에 [-S] 옵션으로 지정한 것보다 우선한다. 사용자 헤더에도 서비스를 지정하고, [-S] 옵션으로 서비스를 지정하였을 경우 X25GW는 먼저 사용자 헤더에서 사용자 함수(get_service_name)를 호출하여 서비스를 찾고, 여기에서 서비스를 찾지 못한 경우 [-S] 옵션으로 지정한 서비스를 사용한다.
비동기형 방식(tpacall에 TPNOREPLAY)로 호출하였을 경우에도 응답 데이터에 대해서 위와 동일하게 처리한다.
-
Key 데이터 보관
NON 블로킹(blocking) 모드로 사용할 경우 송신과 수신 서비스로 분리되는데 송신 서비스에서 데이터베이스에 적절한 작업을 처리하고 리모트 노드로 데이터를 전송하고 송신 서비스는 종료된다. 나중에 수신 서비스에서 송신 서비스에서 처리한 데이터베이스의 Key 정보를 알고자 하는 경우나, 또는 수신 서비스에 리모트 노드에서 오류가 발생한 경우 데이터베이스를 되돌려 놓기 위한 중요한 데이터를 보관할 경우에 많이 사용한다.