내용 목차
본 장에서는 TCP/IP 게이트웨이 시스템의 개요와 동작 방식, 서비스 유형에 대해 기술한다.
TCP/IP 게이트웨이(TCP/IP Gateway, 이하 TCPGW)는 Tmax에서 제공하는 게이트웨이로, Tmax 서버와 Non-Tmax 서버(이하 리모트 노드)사이의 인터페이스를 담당한다. TCPGW는 Tmax 서버의 한 종류로써 TCP/IP로 연결되어 있는 UNIX/Windows 서버 등과의 게이트웨이 역할을 한다.
리모트 노드에서 보내온 메시지를 TCPGW는 해당 서비스를 tpacall하며, 서비스 결과는 처음 요청한 리모트 노드 서버로 전송한다. 반대로 Tmax의 서비스에서 tpcall이나 기타 다른 방식으로 서비스를 요청하면 TCPGW는 리모트 노드로 요청 메시지를 보낸 후 응답이 오면 자신을 호출한 서비스로 tpreturn한다. 소켓을 열고 메시지를 주고받는 일 등과 같은 타 시스템과 TCP/IP로 연결하기 위해 필요한 복잡한 작업은 모두 TCPGW에서 처리하기 때문에 개발자는 업무 로직만을 작성하면 된다.
TCPGW의 기본 동작 방식은 다음과 같이 2가지로 구분할 수 있다.
Tmax에서 서비스 요청
[그림 1.1]에서 점선으로 표시된 방식으로, Tmax 클라이언트는 서비스로부터 서비스 요청을 받아서 리모트 노드로 서비스를 요청할 수 있다. 이와 같은 서비스를 INBOUND 서비스라고 한다.
리모트 노드로부터 서비스 요청
[그림 1.1]에서 실선으로 표시된 방식으로, TCPGW는 리모트 노드로부터 서비스 요청을 받아서 처리할 수 있다. 이와 같은 서비스를 OUTBOUND 서비스라고 한다.
또한 TCPGW는 동기적 호출 방식과 비동기적 호출방식으로 동작한다.
[그림 1.2]에서 점선으로 표시된 방식으로, Tmax 클라이언트나 서비스에서 TCPGW를 즉시 호출하고 응답이 올 때까지 기다리는 방식이다.
[그림 1.2]에서 실선으로 표시된 방식으로, Tmax 클라이언트가 Tmax 서비스를 호출하면 그 서비스에서 TCPGW로 제어권이 넘어가서 해당 서비스는 다른 서비스 요청을 받을 수 있다. TCPGW가 리모트 노드로부터 응답을 받게 되면 응답을 처리하는 서비스로 요청을 넘겨주는 방식이다.
Tmax에 설치되는 TCPGW는 Tmax 서버의 한 종류로, Tmax 환경 파일에 서버로 등록해야만 사용할 수 있다. 일반 서버는 TCS나 UCS용 서버 라이브러리를 이용하여 서버를 생성하지만, TCPGW는 외부와 통신을 담당하는 라이브러리(libtcpgw.a, libtcpgw.so)와 사용자가 작성한 프로그램(custom.c)과 링크하여 서버를 생성한다. Tmax 환경설정에 대한 자세한 내용은 “제2장 환경설정”과 “제3장 사용자 프로그램과 함수”에서 설명한다.
TCPGW는 Tmax에서 제공하는 라이브러리(libtcpgw.a, libtcpgw.so)와 개발자가 작성하는 custom.c, custom.h를 함께 링크하여 생성된다. 이렇게 생성된 TCPGW는 리모트 노드와 통신을 하며, Tmax 클라이언트의 요청을 리모트 노드로 보내기도 하고 리모트 노드의 요청을 Tmax 서비스에서 처리하도록 중간역할을 한다.
TCPGW는 동작하는 방식에 따라 동기형 TCPGW와 비동기형 TCPGW로 구분할 수 있고, 기동하는 방법에 따라 서버 TCPGW와 클라이언트 TCPGW로 구분할 수 있다. 서버와 클라이언트 모드는 리모트 노드와 TCPGW가 연결될 때 어떤 쪽에서 먼저 연결을 시도하는지에 따른 모드이다. 일단 상대방과 연결되면 어느 쪽에서든 먼저 서비스를 요청할 수 있기 때문에 서버나 클라이언트 모드는 의미가 없다.
동기형 방식은 Tmax의 클라이언트나 서버에서 서비스를 요청하고 서비스를 요청한 클라이언트나 서버로 응답이 오는 방식을 말한다. 반대로 리모트 노드에서 서비스를 요청하면 TCPGW는 Tmax의 서비스를 요청하고 그 결과를 서비스를 요청한 리모트 노드에 되돌려주는 방식이다.
전자의 경우 리모트 노드로 서비스를 요청한 Tmax 서비스가 블록되는가, 또는 블록되지 않는가에 따라 TCPGW는 다르게 동작한다. 후자의 경우에는 리모트 노드에서 요청한 처리 결과를 돌려줄 때 요청한 채널로 돌려주는 방식이다.
Tmax의 클라이언트나 서버에서 동기형 방식으로 리리모트 노드에 서비스를 요청할 경우에는 반드시 TCPGW와 리모트 노드 간에 UID(Unique Id.)를 서로 공유해야 한다.
Tmax의 서버나 클라이언트에서 TCPGW로 서비스를 요청하고, 그 결과가 올때까지 기다리는 가장 일반적인 방식이다. Tmax 클라이언트의 요청을 받은 서비스에서 TCPGW 서비스로 tpcall을 하면 리모트 노드에서 처리 결과를 송신할 때까지 Tmax 서비스(그림에서 SVC1)가 블록되어 있게 된다.
TCPGW를 동작시키면 Tmax 클라이언트에서 호출한 Tmax 서비스는 TCPGW를 호출한 후에 결과를 받을 때까지 블록이 되어 있게 된다. tpacall을 한 경우도 tpgetrply로 응답을 받는 곳에서 블록이 되기 때문에 tpcall과 마찬가지로 블록이 되게 된다. 많은 수의 요청을 받아들이기 위해서는 블록이 되는 시간까지 감안하여 많은 수의 서버를 실행해야 한다.
대외기관 통신에서는 대외기관의 장애(머신, 네트워크)에 따라서 많은 수의 서버를 필요로 하기 때문에 서비스 블록형 방식이 적합하다.
다음은 블록형 동기 방식으로 서비스 호출하는 경우 TCPGW 동작 구조이다.
TCPGW와 리모트 노드는 연결되어 있는 상태이다.
Tmax 클라이언트는 Tmax 서비스를 tpcall한다.
Tmax 서비스에서는 클라이언트의 요청을 받아들여 TCPGW로 서비스를 tpcall한다.
TCPGW는 연결되어 있는 리모트 노드에 서비스를 요청한다.
리모트 노드에서 결과가 오면 에러인지 아닌지를 판단한다.
TCPGW 서비스를 호출한 Tmax 서비스로 tpreturn한다.
결과를 받은 Tmax 서비스는 Tmax 클라이언트로 tpreturn한다.
서비스 NON 블록형 방식은 Tmax 클라이언트에서 직접 TCPGW를 요청하는 방식에서는 사용할 수 없고, TCPGW에 서비스를 요청하고 결과를 수신하는 서버를 중간에 두어서 처리하는 방식이다. 즉, TCPGW 앞에 송신 서비스와 수신 서비스를 두고 Tmax 클라이언트는 송신 서비스를 호출하고, 송신 서비스는 TCPGW로 서비스를 전달하고 서비스를 종료한다.
TCPGW는 리모트 노드로 서비스를 요청하여 그 결과를 수신하면, 해당 결과를 수신 서비스에게 전달한다. 수신 서비스는 TCPGW로부터 결과를 수신받아 클라이언트에게 전달하면 서비스 사이클이 종료되는 방식이다. 결과적으로 클라이언트는 서비스를 요청하고 결과를 받는 동기방식이나, 서버는 요청을 전달하고 종료하는 비동기방식과 같이 동작한다.
서비스 NON 블록형 방식은 블록형 방식에서 수행하는 방식보다도 적은 서버로도 많은 처리를 할 수 있다. 블록형 방식은 서비스가 TCPGW를 호출하고 블록되기 때문에 동시에 많은 처리를 위해서는 보다 많은 서버 프로세스를 실행해야 하지만, NON 블록형 방식에서는 자신의 일만 처리하고 서비스를 종료하기 때문에 적은 서버 프로세스로도 많은 일을 할 수 있다.
대외기관 간에 통신을 처리하는 경우에는 NON 블록형 방식이 보다 효율적이다.
다음은 서비스 NON 블록형 방식으로 서비스를 호출하는 경우 TCPGW 동작 구조이다.
TCPGW와 리모트 노드는 연결되어 있는 상태이다.
Tmax 클라이언트는 Tmax 서비스를 tpcall한다.
Tmax 서비스에서는 클라이언트의 요청을 받아들여 TCPGW 서비스를 tpforward한다.
TCPGW 는 연결되어 있는 리모트 노드에 메시지를 전송한다.
리모트 노드에서 결과가 오면 에러인지 아닌지를 판단한다.
리모트 노드 결과를 tprelay할 서비스로 tprelay한다.
TCPGW 서비스로부터 결과를 받은 서비스(Tmax 클라이언트로부터 tprelay 할 서비스로 지정된 서비스)는 Tmax 클라이언트로 tpreturn한다.
리모트 노드에서 TCPGW로 먼저 서비스를 요청하는 방식이다. TCPGW는 리모트 노드에서 요청한 서비스를 호출하고 그 결과를 받아서 해당 서비스를 요청한 채널로 결과를 전송한다. 리모트 노드는 동시에 TCPGW로 Tmax 환경 파일에 정의되어 있는 MAXSACALL 개수를 초과하여 호출할 수 없다.
리모트 동기형 호출 방식은 리모트 노드에서 Tmax의 서비스를 호출하는 가장 보편적인 방식이다. TCPGW는 리모트 노드의 채널 정보를 보관하였다가 서비스로부터 결과를 수신받으면, 보관하고 있는 채널 중에서 해당 채널을 찾아서 결과를 전송한다. 이때 해당 채널로 결과를 되돌려 주기 전에 다른 요청은 얼마든지 가능하다. TCPGW는 리모트 노드에서 요청한 채널은 블록시키지 않고 다음 요청을 받을 수 있도록 처리하기 때문에 TCPGW의 운영 방식에 따라서 다르게 처리할 수 있다.
다음은 리모트 동기형 방식으로 서비스를 호출하는 경우 TCPGW의 동작 방식이다.
TCPGW와 리모트 노드는 연결되어 있는 상태이다.
리모트 노드는 TCPGW와 연결된 채널로 메시지를 전송한다.
TCPGW는 tpacall()로 Tmax 서비스를 호출한다.
서비스 처리 결과를 TCPGW는 받아서 메시지를 요청한 채널을 찾는다.
해당 채널이 정상적으로 연결되어 있으면 결과를 전송한다.
비동기형 호출 방식은 Tmax의 클라이언트나 서버, 리모트 노드에서 TCPGW 서비스를 요청만 하고, 그 결과는 받지 않거나 또는 서비스를 요청한 곳이 아닌 다른 프로그램에서 처리하는 방식이다. Tmax의 서비스에서 TCPGW로 서비스를 요청하고 그 결과는 다른 서비스로 받을 수 있다.
클라이언트인 경우 비동기형으로 처리할 때는 tpacall로써 응답을 받지 않는 경우에만 가능하다. 반대로, 리모트 노드에서 서비스를 먼저 요청하는 경우에 위에서와 같이 서비스만 요청하고 결과를 받지 않을 수도 있고, 서비스를 요청하고 결과는 다른 채널로 돌려주는 방식이 비동기형 방식이다.
Tmax의 서비스에서 TCPGW로 tpacall에 TPNOREPLY로 요청하고 해당 서비스는 종료한다. TCPGW는 리모트 노드로 요청를 보내고 해당 결과가 수신되면 Tmax의 다른 서비스를 tpacall에 TPNOREPLY로 호출하여 결과를 처리하는 방식이다.
다음은 Tmax에서 비동기형 방식으로 서비스 요청하는 경우 TCPGW의 동작 구조이다.
TCPGW와 리모트 노드는 연결되어 있는 상태이다.
Tmax 서비스에서 TCPGW로 서비스를 요청한다(tpacall에 TPNOREPLY).
TCPGW는 리모트 노드로 데이터를 전송한다.
TCPGW는 리모트 노드로부터 데이터를 수신한다.
TCPGW는 Tmax의 다른 서비스를 호출한다(tpacall에 TPNOREPLY).
리모트 노드에서 서비스를 TCPGW로 요청하면, TCPGW는 tpacall로 Tmax 서비스를 요청한다. Tmax 서비스 처리가 완료되면 TCPGW는 리모트 노드와 연결되어 사용 가능한 채널 중 아무 채널에 처리 결과를 전송한다.
다음은 리모트 노드에서 비동기형 방식으로 서비스를 요청하는 경우 TCPGW의 동작 구조이다.
리모트 노드에서 TCPGW로 서비스를 요청한다.
TCPGW는 Tmax의 서비스를 tpacall로 요청한다.
Tmax의 서비스 처리 결과를 TCPGW에 전달한다.
TCPGW는 리모트 노드와 연결된 채널 중 채널 테이블에서 채널을 검색하여 결과를 전송한다.
본 절에서는 게이트웨이가 가지고 있는 기타 기능에 대해 설명한다.
TCPGW는 Tmax 클라이언트나 서버에서 호출할 때 게이트웨이 헤더를 사용할 수 있다. 게이트웨이 헤더를 사용하기 위해서는 TCPGW의 다른 라이브러리를 사용해야 한다. 보통은 libtcpgw.a, libtcpgw.so를 사용하고, 게이트웨이 헤더를 사용할 경우에는 libtcpgw.gwh.a나 libtcpgw.gwh.so를 사용해야 한다. 게이트웨이 헤더는 모든 데이터 버퍼의 가장 처음 Offset에 위치해야 한다. 즉, 사용자 헤더를 사용할 경우에 게이트웨이 헤더 다음에 사용자 헤더가 위치해야 한다.
게이트웨이 헤더는 여러 가지 다양한 목적으로 사용하는데, TCPGW에서는 여러 항목 중에서 svc 항목만 사용 가능하다. 이 항목은 NON 블로킹 모드로 사용하거나 비동기 방식으로 사용할 때 응답 데이터에 대해 처리할 서비스명을 지정하고자 하는 경우에 사용한다. 게이트웨이 헤더는 보통 사용자 헤더를 사용하지 않을 경우에 응답을 처리할 서비스를 메시지별로 처리할 경우에 사용한다.
TCPGW는 응답을 처리할 서비스를 찾는 순서는 다음과 같고 지정한 순서대로 찾는다.
게이트웨이 헤더
사용자 헤더
[-S] 옵션
일반적인 TCPGW 처리 방식은 한 번의 요청에 대해서 하나의 응답을 받는 형태이다. 경우에 따라서 여러 번의 응답이 올 수 있는데 이를 처리하기 위해서 TCPGW는 custom.c의 get_msg_info 함수의 호출을 통해서 이를 처리한다. 여러 번의 응답이 오는 경우에 매번 get_msg_info 함수가 호출되는데, 사용자는 수신받은 데이터가 마지막 데이터인지를 판단하여 적절한 값을 반환한다.
연속 데이터인 경우에 반환값으로 3을 반환하면, TCPGW는 다음 데이터가 있다고 판단하여 서비스를 요청한 클라이언트나 서비스에 응답을 하지 않고 다음 데이터를 기다린다. 사용자는 마지막 데이터를 수신한 경우에 REPLY 값(1)를 반환하면, TCPGW는 이전에 저장한 데이터와 마지막 데이터를 서비스를 요청한 클라이언트나 서비스에 돌려준다.
NON 블록형 TCPGW나 또는 비동기형 TCPGW인 경우 리모트 노드에서 온 요청이나 응답을 처리할 Tmax의 서비스가 있어야 한다. TCPGW는 이 서비스명을 알수가 없으므로 사용자가 적당한 서비스명을 지정해야 하는데 TCPGW는 3가지 방식으로 서비스명을 찾는다.
다음에서 설명하는 서비스명은 반드시 Tmax 설정 파일에 등록되어 있어야 한다.
Tmax 클라이언트나 서비스에서 TCPGW를 요청할 때 게이트웨이 헤더에 서비스명을 넣어서 TCPGW를 호출하면 TCPGW는 가장 우선적으로 이 서비스명을 사용한다. 게이트웨이 헤더를 사용할 경우에만 가능하다.
사용자 헤더에서 서비스명을 찾는다. Tmax 클라이언트나 서비스에서 TCPGW를 요청할 때 사용자 헤더에 서비스명을 넣은 후에 사용자 함수 get_service_name에서 서비스명을 얻을 수 있다.
CLOPT의 [-S] 옵션에 지정한 서비스를 이용한다. 이런 경우에는 모든 메시지에 대해서 동일한 서비스가 적용된다.
리모트 노드에서 최초로 서비스를 요청할 경우에는 위의 방식을 따르지 않고 사용자가 get_msg_info에서 서비스명을 지정해야 한다.
완전한 비동기 방식으로 TCPGW를 구성한 경우에 사용자는 리모트 노드로 전송할 채널을 지정할 수있다. CLOPT 절에 [-a]를 사용한다. 완전한 비동기 방식은 서로 간에 응답이 없다. 응답 데이터도 서비스 요청 형식으로 전달되어야 한다.
예를 들어 Tmax의 클라이언트나 서비스에서 TCPGW로 tpacall에 TPNOREPLY로 호출하면 TCPGW는 서비스 요청에 대한 UID와 어떤 정보 데이터도 보관하지 않고 리모트 노드로 데이터를 전송하고 해당 서비스를 종료한다. 나중에 리모트 노드로부터 응답에 대한 메시지를 수신받았을 경우에도 이를 서비스 요청으로 처리한다. 반대인 경우(리모트 노드에서 먼저 요청)에도 동일하게 처리한다.
위와 같은 경우에 사용자는 CLOPT 절에 [-u] 옵션을 사용해서 리모트 노드로 전송할 채널번호를 지정할 수 있다. 채널 지정은 다음과 같은 2가지 경우가 있다.
Tmax에서 먼저 서비스를 리모트 노드로 요청한 경우 TCPGW는 get_channel_num 함수를 호출하는데 사용자는 전송 데이터를 분석하여 채널을 지정할 수 있다.
리모트 노드에서 먼저 요청한 경우 리모트 노드에서 서비스를 요청할 때 get_msg_info 함수에서 리모트 노드에서 요청한 채널을 데이터에 보관하여 Tmax 서비스를 호출한다. Tmax 서비스는 결과를 리모트 노드로 전송하기 위해 tpacall에 TPNOREPLY로 다시 TCPGW로 서비스를 보낸다. 사용자는 get_channel_num에서 이전에 보관한 채널을 사용하여 리모트 노드로 응답을 전송할 수 있다. 이 방식을 사용하면 TCPGW와 Tmax 엔진 간의 채널이 블록되지 않고 서비스를 요청한 채널로 응답을 전송할 수 있다.
TCPGW가 실행되는 머신는 모두 ASCII 코드(한글은 완성형)를 사용한다. 리모트 노드는 사용하는 코드가 다른 머신에 있어 이들과 메시지를 주고받기 위해서는 코드를 일치시켜야 한다. 이러한 코드 변환은 리모트에서 할 수도 있고, 아니면 TCPGW에서 할 수도 있다.
TCPGW는 모든 코드를 변환하지 않고 ASCII ↔ EBCDIC, 조합형 ↔ 완성형 코드만을 서로 변환한다. TCPGW에서 리모트 노드로 메시지를 전송하는 경우에는 ASCII에서 EBCDIC로 완성형에서 조합형으로 코드를 변환한다. 리모트에서 수신하는 경우에는 EBCDIC에서 ASCII로 조합형에서 완성형으로 코드를 변환한다.
TCPGW는 코드 변환을 서비스 처리 단위별로 변환한다. TCPGW는 서비스 단위별로 송수신 포맷을 등록(Map 파일)하여 변환한다. 사용자는 TCPGW와 리모트 노드 간에 코드를 변환하려면 모든 서비스에 대해서 Map 파일을 등록해야 한다.
또한 TCPGW에서 코드 변환 기능을 이용하려면 반드시 게이트웨이 헤더를 사용해야만 한다. 리모트로 전송하는 서비스에 대해서 TCPGW는 서비스명을 알 수가 없으므로 게이트웨이 헤더를 사용하여 TCPGW에 리모트 서비스명을 전달해야 하기 때문이다. 게이트웨이 헤더 중 pgmname 항목에 리모트 서비스명을 설정하고, TCPGW는 이 항목의 값으로 Map 파일을 로드하여 코드를 변환한다.
TCPGW는 Tmax 클라이언트나 서비스에서 리모트로 서비스를 요청할 경우에는 게이트웨이 헤더의 pgmname 항목의 값으로 Map 파일을 로드하고, 리모트 노드에서 Tmax로 서비스를 요청하는 경우에는 get_msg_info 함수에서 지정한 서비스명으로 Map 파일을 로드한다.
사용자가 Map 파일을 등록하는 방법에 대해서 설명한다. Map 파일은 사용자가 텍스트 파일로 지정한 형식에 맞게 등록해주면 된다.
# COMMSIZE는 INPUT/OUTPUT에서 같이 사용해야 함으로 INPUT/OUTPUT 중 # 큰 size의 값을 입력해야 한다. *COMMSIZE 1024 *INPUT #--------------------------------------------------------------- # item-name length data-type # data-type: CHAR, NUMERIC(UNPACK), KOREAN, BINARY, USER-TYPE #--------------------------------------------------------------- a 10 CHAR b 10 KOREAN c 5 NUMERIC d 10 BINARY *OUTPUT a 10 CHAR b 10 KOREAN c 5 NUMERIC d 10 BINARY e 3 USER1 e1 6 CHAR e2 10 KOREAN e3 8 BINARY
COMMSIZE
리모트 노드와 송수신하는 데이터의 길이를 지정하는 항목이다. 모든 서비스 메시지(송수신 포함) 중 가장 큰 메시지의 길이를 입력해야 한다.
INPUT
TCPGW에서 리모트 노드로 전송하는 메시지에 대해서 등록하는 항목이다. TCPGW에서 리모트 노드로 서비스를 요청하는 경우에는 리모트 노드로 요청하는 메시지의 포맷을 등록하고, 반대로 리모트 노드에서 Tmax로 서비스를 요청하는 경우에는 Tmax 서비스의 처리 결과에 대한 포맷을 등록한다.
item-name(항목명)
단순히 사용자가 참조용으로만 사용하는 이름이다. TCPGW는 항목명으로 인식하고 내부에서는 사용하지 않는다.
length(항목 길이)
송수신 데이터의 각 항목의 실제 길이를 나타낸다. 각 항목의 길이만 표현하면 TCPGW 내부에서 Offset로 변환하여 사용한다. Offset는 항상 0부터 시작한다.
data-type(데이터 타입)
송수신 각 항목의 데이터 타입을 지정한다.
데이터 타입 | 설명 |
---|---|
CHAR | 데이터가 모든 문자(영문자, 숫자, 한글)을 포함할 수 있는 항목을 나타낸다. |
NUMERIC | 데이터가 숫자만을 나타내는 경우이다. 코드 변환은 CHAR 타입과 동일하게 코드를 변환한다. 타입 NUMERIC라 해서 Integer를 나타내는 것은 아니다. |
KOREAN | 데이터가 모두 한글일 경우에 사용한다. TCPGW는 이 타입의 데이터는 항상 2 Bytes 단위로 코드를 변환한다. CHAR에서 한글이 포함된 경우에 한글과 다른 코드(영문자, 숫, 특수문자) 사이에 한글의 시작과 끝 문자가 포함되는데 반해 이 타입의 데이터는 모두 한글 문자로 인식하기 때문에 처음과 끝에만 한글 시작과 끝 문자가 포함된다. |
BINARY | 데이터는 코드를 변환하지 않는다. 사용자는 데이터중 코드를 변환하지 않고자 하는 경우에는 이 타입으로 지정하면 된다. |
USER-TYPE | 데이터는 Array 형식의 데이터 타입을 지정할 경우에 사용한다. 예를 들어 화면에 여러 개의 항목이 반복하서 여러번 나올 경우에 각 항목을 반복 횟수만큼 등록해야 하는 번거로움이 있다. 또는 반복 횟수를 데이터로 표현하는 경우에는 몇번의 반복이 되는지를 알 수 없어 코드변환이 어렵다. 이를 위해서 사용자는 사용자 정의 타입을 지정하여 Array 형식의 데이터를 쉽게 변환할 수 있다. |
OUTPUT
리모트 노드에서 TCPGW로 수신받은 메시지에 대해서 등록하는 항목이다. TCPGW에서 리모트 노드로 서비스를 요청하는 경우에는 리모트 노드에서 처리한 결과를 수신받는 메시지의 포맷을 등록하고, 반대로 리모트 노드에서 Tmax로 서비스를 요청하는 경우에는 Tmax로 서비스를 요청하는 메시지에 대해서 포맷을 등록한다.
위의 Map 파일에서 USER1은 사용자가 지정한 사용자 정의 타입이다. 타입 이름은 사용자가 임의로 지정하면 된다. 사용자 정의 타입의 데이터는 Array 데이터의 반복을 나타내는 항목이므로 반드시 숫자로 이루어져야 한다. TCPGW는 사용자 정의 타입을 만나면 이를 Array의 횟수로 인식한다.
Array의 끝은 마지막 항목의 이름을 슬래시(/)로 시작하면 된다. 위의 경우에는 e1, e2, e3을 Array 항목으로 인식해서 e 항목으로 지정한 횟수만큼 코드를 변환한다.
Array 횟수는 Map 파일에 등록하지 않고 TCPGW와 리모트 노드 사이에 데이터 전문에 표현한다.