소개
본 장에서는 시스템의 개요 및 서비스 유형에 대해 기술한다.
1. 개요
TCP/IP 서비스 게이트웨이(이하 SVCGW)는 Tmax 서버와 Non-Tmax 서버(이하 리모트 노드) 간의 TCP/IP 통신을 할 때 인터페이스를 담당하는 Tmax에서 제공되는 게이트웨이이다.
SVCGW는 크게 2개의 모듈로 나누어졌는데, 하나는 Tmax에서 리모트 노드와 TCP/IP로 송수신하는 부분이고, 나머지는 리모트 노드에서 Tmax의 SVCGW와 통신을 담당하는 TCP/IP 통신 라이브러리(이하 COM 라이브러리)로 분리되어 있다. 2개의 모듈을 이용하여 Tmax 시스템과 Non-Tmax 시스템 사이에 TCP/IP로 통신할 수 있도록 제공하는 모듈이 TCP/IP 서비스 게이트웨이이다.
SVCGW 사용자는 TCP/IP 통신에 관련된 프로그램을 작성하지 않아도 SVCGW와 TCP/IP로 통신할 수 있도록 COM 라이브러리를 제공한다. 사용자는 라이브러리를 이용하여 편리하게 SVCGW와 서비스를 받을 수도 있고, 서비스를 요청할 수도 있다. SVCGW는 리모트 노드에서 보내온 메시지를 받아서 사용자가 요청한 서비스로 tpacall하며, 서비스 결과는 처음 요청한 리모트 노드로 전송한다. 반대로 Tmax 서비스에서 SVCGW를 tpcall이나 기타 다른 방식으로 서비스를 요청하면 SVCGW는 리모트 노드로 요청 메시지를 보낸 후 응답이 오면 자신을 호출한 서비스로 tpreturn한다. 소켓을 열고 메시지를 주고받는 일 등과 같은 타 시스템과 TCP/IP로 연결하기 위해 필요한 복잡한 작업은 모두 TCP/IP 서비스 게이트웨이와 COM 라이브러리에서 처리하므로 개발자는 업무 로직만을 작성하면 된다.
SVCGW 동작하는 방식은 Tmax의 서비스나 클라이언트에서 리모트 노드로 서비스를 요청하는 방식과 반대로 리모트 노드에서 Tmax의 서비스를 호출하는 방식으로 나눌 수 있다.
다음은 SVCGW의 동작 구조이다.
-
Tmax에서 서비스 요청
SVCGW 동작 구조에서 점선 표시된 내용으로 Tmax 클라이언트는 서비스로부터 서비스 요청을 받아서 리모트 노드로 서비스를 요청할 수 있다. 이와 같은 서비스를 INBOUND 서비스라고 한다. INBOUND인 경우에는 Tmax의 클라이언트나 서비스에서 SVCGW에 등록된 서비스명을 이용하여 리모트 노드로 서비스를 요청할 수 있다.
SVCGW는 Tmax에서 리모트 노드로 요청하는 방식은 비동기형 방식으로 처리한다. 즉, 서비스나 클라이언트에서 리모트로 서비스를 tpcall로 요청하더라도 SVCGW는 리모트로 서비스 요청을 보내고 서비스나 클라이언트에게 곧바로 정상 응답을 반환한다. 나중에 리모트 노드에서 서비스 요청에 대한 응답일지라도 새로운 서비스 요청으로 간주한다. 그러므로 Tmax에서 요청하는 모든 서비스는 비동기형 방식으로 동작한다.
-
리모트 노드로부터 서비스 요청
SVCGW 동작 구조에서 실선 표시된 내용으로 TCPGW는 리모트 노드로부터 서비스 요청을 받아서 처리할 수 있다. 이와 같은 서비스를 OUTBOUND 서비스라고 한다. OUTBOUND인 경우에는 리모트 노드에서 Tmax의 서비스명을 이용하여 서비스를 호출한다.
리모트 노드에서 Tmax의 서비스를 요청하는 경우에는 비동기형, 동기형 모두 사용할 수 있다. 비동기형은 COM 라이브러리를 이용하여 SVCGW에 서비스를 요청할 때 flags에 COMMNOREPLY를 주면 SVCGW는 Tmax에 사용자가 요청한 서비스를 호출만 하고 응답은 받지 않는다. 동기형 방식은 COM 라이브러리를 이용하여 SVCGW에 서비스를 요청할 때 flags에 COMMNOREPLY를 주지않고 요청하면 SVCGW는 Tmax에 사용자가 요청한 서비스를 호출하고 응답을 받으면 서비스를 요청한 리모트 노드에 응답을 전송한다.
또한 리모트 노드에서 Tmax에 서비스 요청할 때 지연처리 방식을 지원한다. flags에 COMMDELAY를 주면 SVCGW는 나중에 사용자가 RQ의 데이터를 일괄적으로 처리할 수 있도록 RQ에 요청 데이터를 저장한다. 지연처리는 항상 비동기형 방식으로 처리한다.
Tmax에 설치되는 SVCGW는 Tmax 서버의 한 종류로서 Tmax 환경 파일에 서버로 등록해야만 사용할 수 있다. 일반 서버는 TCS나 UCS용 서버 라이브러리를 이용하여 서버를 생성하나 SVCGW는 이미 사용자가 직접 사용할 수 있도록 실행 가능한 파일로 제공하므로 사용자는 SVCGW를 Tmax 환경 파일에 서버로 등록만 해주면 된다. Tmax 환경설정에 대한 내용은 환경설정에서 자세하게 설명한다.
2. 서비스 유형
SVCGW는 리모트 노드와 TCP/IP로 통신을 하며, Tmax 클라이언트의 요청을 리모트 노드로 보내기도 하고 리모트 노드의 요청을 Tmax 서비스에서 처리하도록 중간역할을 해준다.
리모트 노드에서 사용하는 COM 라이브러리 부분에 대한 설명은 COM 라이브러리에서 하고 본 절에서는 Tmax에 설치되는 부분에서 제공하는 서비스 유형에 대해서만 설명한다.
SVCGW는 크게 동작하는 방식은 Tmax의 서비스나 클라이언트에서 리모트 노드로 서비스를 요청하는 방식과 반대로, 리모트 노드에서 Tmax의 서비스를 호출하는 방식으로 나눌 수 있다. SVCGW는 항상 서버 모드로 동작하며 리모트 노드는 클라이언트 모드로 동작해야 한다. 리모트 노드와 연결이 이루어지면 어느 쪽에서도 먼저 서비스를 요청할 수 있다.
2.1. Tmax에서 서비스 요청
Tmax의 서비스나 클라이언트에서 먼저 리모트 노드로 서비스를 요청하는 경우이다. 리모트 노드로 서비스 요청을 보내고 응답을 받지 않는 경우와 서비스 요청을 보내고 해당 응답을 새로운 요청으로 처리하는 2가지 방식으로 구분할 수 있다.
SVCGW는 지정된 리모트 노드로만 서비스를 요청할 수 있으므로 사용자는 서비스 요청을 하고자 하는 리모트 노드를 알고 있어야 한다. 이를 위해서 Tmax 환경 파일에 서비스명을 등록하고, 해당 서비스명을 SVCGW 환경 파일의 리모트 노드별 정보에 등록해 주어야 한다. SVCGW는 서비스 요청을 받으면 요청한 서비스명으로 리모트 노드를 찾아서 해당 리모트 노드에 데이터를 전송한다.
NOREPLY 서비스 호출
NOREPLY 서비스 호출 방식은 Tmax의 서비스나 클라이언트에서 SVCGW로 tpcall로 서비스를 요청하고 결과에 관계없이 처리하는 방식이다.
Tmax 클라이언트의 요청을 받은 서비스에서 SVCGW로 서비스로 tpcall을 하면 SVCGW는 리모트 노드로 서비스를 요청하고, 리모트 노드의 결과에 관계없이 곧바로 반환한다. NOREPLY 서비스 호출 방식은 SVCGW를 동작시키게 되면 Tmax 클라이언트에서 호출한 Tmax 서비스는 SVCGW를 호출한 후에 결과에 관계없이 계속 처리하게 된다.
다음은 NOREPLY 방식으로 서비스를 요청하는 경우 SVCGW의 동작 구조이다.
-
SVCGW와 리모트 노드는 연결되어 있는 상태이다.
-
Tmax 클라이언트는 Tmax 서비스를 tpcall한다.
-
Tmax 서비스에서는 클라이언트의 요청을 받아들여 SVCGW로 서비스를 tpcall한다.
사용자는 SVCGW에는 많은 서비스가 등록되어 있으므로 사용자가 요청하려는 리모트 노드와 연결된 서비스명을 지정해야 한다.
-
SVCGW는 사용자가 지정한 서비스와 연결된 리모트 노드에 서비스를 요청한다.
-
SVCGW는 서비스를 요청한 서비스에 응답을 한다.
-
SVCGW는 서비스를 요청한 Tmax 클라이언트에 정상 응답을 tpreturn한다.
REPLY 서비스 호출
REPLY 서비스 호출 방식은 최초에 서비스를 요청하는 Tmax의 서비스나 클라이언트는 SVCGW로 tpcall로 서비스를 요청하고 결과에 관계없이 처리한다. 리모트 노드는 해당 요청 서비스를 처리하고 결과를 Tmax의 새로운 서비스를 호출하는 방식이다.
Tmax 클라이언트의 요청을 받은 서비스에서 SVCGW로 서비스로 tpcall을 하면 SVCGW는 리모트 노드로 서비스를 요청하고, 리모트 노드의 결과에 관계없이 곧바로 반환한다. 리모트 노드는 처리 결과를 가지고 Tmax의 새로운 서비스를 호출한다. 새로운 서비스 호출시에는 Tmax의 서비스 처리 결과를 받을 수도 있고 받지 않을 수도 있다. ComSend 함수의 flags에 설정하는 값에 따라 응답을 받을 수도 있고 받지 않을 수도 있다. REPLY 서비스 호출 방식은 최초에 서비스를 호출하는 서비스와 결과를 처리하는 서비스를 분리하는데 사용한다.
다음은 REPLY 방식으로 서비스를 호출하는 경우 SVCGW의 동작 구조이다.
-
SVCGW와 리모트 노드는 연결되어 있는 상태이다.
-
Tmax 클라이언트는 Tmax 서비스를 tpcall한다.
-
Tmax 서비스에서는 클라이언트의 요청을 받아들여 SVCGW로 서비스를 tpcall한다.
사용자는 SVCGW에는 많은 서비스가 등록되어 있으므로 사용자가 요청하고자 하는 리모트 노드와 연결된 서비스명을 지정해야 한다.
-
SVCGW는 사용자가 지정한 서비스와 연결된 리모트 노드에 서비스를 요청한다.
-
SVCGW는 서비스를 요청한 서비스에 정상 응답을 tpreturn한다.
-
리모트 노드에서 결과에 대한 새로운 서비스 요청을 받는다.
-
SVCGW는 Tmax에 사용자가 지정한 서비스를 호출한다.
-
Tmax 서비스는 서비스를 요청한 Tmax 클라이언트에 정상 응답을 tpreturn한다.
2.2. 리모트 노드에서 서비스 요청
리모트 노드에서 Tmax의 서비스를 호출하는 것으로 이 방식은 동기형 방식과 비동기형 방식으로 나눌 수 있다. 동기형은 서비스를 요청하고 응답을 기다리는 방식이고, 비동기형은 서비스를 요청하고 응답을 기다리지 않는 방식이다. 그러나 동기형 방식 중에 서비스를 요청하고 응답을 받기 전에 다른 서비스 요청이 해당 리모트 노드로 전송될 수 있으므로 이에 대한 처리를 적절히 수행해야 한다.
리모트 동기형 호출 방식
리모트 동기형 호출 방식은 리모트 노드에서 SVCGW로 먼저 서비스를 요청하고 응답을 기다리는 방식이다. SVCGW는 리모트 노드에서 요청한 서비스를 호출하고 그 결과를 받아서 해당 서비스를 요청한 채널로 결과를 전송한다.
리모트 노드는 동시에 SVCGW로 Tmax 환경 파일에 정의되어 있는 MAXSACALL 개수를 초과하여 호출할 수 없다. 리모트 노드의 사용자는 COM 라이브러리를 이용하여 SVCGW로 서비스를 호출하고 응답을 받는다. 리모트 노드의 사용자는 ComSend를 호출할 때 flags에 아무것도 설정하지 않아야 한다.
리모트 동기형 호출 방식은 리모트 노드에서 Tmax의 서비스를 호출하는 가장 보편적인 방식이다. SVCGW는 리모트 노드의 채널 정보를 보관하였다가 서비스로부터 결과를 수신받으면, 보관하고 있는 채널 중에서 해당 채널을 찾아서 결과를 전송한다. 이때 해당 채널로 결과를 되돌려 주기 전에 다른 요청을 할 수 있다. 즉, SVCGW는 리모트 노드에서 요청한 채널은 블록되지 않으므로 요청에 대한 응답이 리모트 노드로 전송되기 전에 다른 요청 서비스가 리모트 노드로 전송될 수 있으므로 이에 대한 처리를 해야 한다.
다음은 리모트 동기형 방식으로 서비스를 호출하는 경우 SVCGW 동작 구조이다.
-
SVCGW와 리모트 노드는 연결되어 있는 상태이다.
-
리모트 노드는 SVCGW와 연결된 채널로 메시지를 전송한다.
-
SVCGW는 tpacall로 Tmax 서비스를 호출한다.
-
서비스 처리 결과를 SVCGW는 받아서 메시지를 요청한 채널을 찾는다.
-
해당 채널이 정상적으로 연결되어 있으면 결과를 전송한다.
리모트 비동기형 호출 방식
리모트 비동기형 호출 방식은 리모트 노드에서 SVCGW로 먼저 서비스를 요청하고 응답을 기다리지 않는 방식이다. SVCGW는 리모트 노드에서 요청한 서비스를 호출하고 그 결과는 받지 않는다.
리모트 비동기형 호출 방식으로 처리하기 위해서 리모트 노드에서는 ComSend할 때 flags에 COMMNOREPLY를 설정해야 한다. COMMNOREPLY가 설정되어 있으면 SVCGW는 Tmax에 서비스를 요청만 하고 응답은 받지 않도록 처리한다.
다음은 리모트 비동기형 방식으로 서비스를 호출하는 경우 SVCGW 동작 구조이다.
-
SVCGW와 리모트 노드는 연결되어 있는 상태이다.
-
리모트 노드는 SVCGW와 연결된 채널로 메시지를 전송한다.
-
SVCGW는 tpacall로 Tmax 서비스를 호출한다.