소개

본 장에서는 시스템의 개요 및 프로세스, 서비스 유형에 대해 설명한다.

1. 개요

TCP/IP 스레드 게이트웨이(TCP/IP Thread Gateway, 이하 TCPGWTHR)는 Non-Tmax 클라이언트(Non-Tmax 서버)와 Tmax 사이에서 인터페이스 역할을 한다. 즉 Non-Tmax 클라이언트와 게이트웨이 사이의 통신은 일반적인 TCP/IP 통신을 하고, 게이트웨이와 Tmax 시스템 간에는 Tmax 통신을 하게 된다.

게이트웨이는 사용하는 방법에 따라서 서버로 동작할 수 있고 클라이언트로도 동작할 수 있다. 이는 서비스 요청이 아니라 연결에 대한 요청이 어디에서부터 시작하는지를 의미한다. 게이트웨이가 서버로 동작하면 리모트에서 연결을 시도하는 것이고, 반대인 경우에는 게이트웨이(스레드)에서 연결을 시도한다. 어디에서 먼저 연결을 시도하든 연결만 되면 서로 간에 서비스를 요청할 수 있다.

또한 클라이언트와 Handler의 스레드를 할당하여 연결하는 방식이므로 클라이언트와 스레드 사이에 사용자 임의의 프로토콜을 추가할 수 있다. Tmax 서비스에서 클라이언트를 요청할 때는 Round Robin 형태로 클라이언트와 연결된 Idle한 스레드를 내부적으로 찾아서 전달하는 방법과 특정 클라이언트와 연결된 스레드에게 전달하는 방법을 제공한다. 게이트웨이는 Tmax 내에 포함되어 통합 관리된다.

이전에 사용한 TCP/IP 게이트웨이는 하나의 프로세스에서 리모트와 여러 개의 채널을 접속시켜 단순하게 Request/Response만 주고받는 형태이다. 그러나 TCPGWTHR는 사용자가 임의의 프로토콜을 추가할 수 있을 뿐만 아니라, 다양한 환경에 사용할 수 있다. RCA(Raw Client Agent)는 Tmax에 클라이언트로 접속하기 때문에 Tmax에 서비스는 요청할 수 있으나 반대로 RCA에 서비스를 요청할 수 없다. 그러나 TCPGWTHR는 양방향 서비스 요청이 가능하다.

다음은 TCPGWTHR의 동작 구조이다.

figure 1 1
TCPGWTHR 동작 구조

TCPGWTHR는 서버 모드일 경우에는 Listener 프로세스와 Handler 프로세스로 구성되며, 클라이언트 모드일 경우에는 클라이언트 공유 메모리 관리 프로세스(이하 Clishm)와 Handler 프로세스로 구성되어 있다.

  • Listener 프로세스

    Listener 프로세스는 TCPGWTHR가 서버로 동작할 경우에 필요한 프로세스이다. Listener는 주어진 포트를 Listen하고 있다가 외부에서 연결이 들어오면 이를 받아서 Handler 프로세스에게 전달하는 역할을 수행하는 프로세스이다. Listener 프로세스도 Tmax 시스템과 접속되어 Tmax 시스템이 기동되면 실행되고 다운되면 종료된다.

  • Handler 프로세스

    Non-Tmax 클라이언트(Non-Tmax 서버)와 접속하여 실질적인 업무를 처리하는 프로세스로, Listener 프로세스에서 전달된 소켓을 내부의 스레드에 분배하여 할당된 스레드가 업무를 처리하거나 또는 특정 스레드가 Non-Tmax 클라이언트(Non-Tmax 서버)와 연결하여 업무를 처리하는 프로세스이다.

    Handler 프로세스 내부에는 많은 스레드가 존재한다. 각각의 스레드가 리모트와 연결되는데, TCPGWTHR가 서버로 동작할 경우에는 Listener 프로세스로부터 소켓를 전달받고, TCPGWTHR가 클라이언트로 동작할 경우에는 Handler 프로세스 내부에 있는 각각의 스레드가 리모트와 연결을 맺는다. 연결을 맺은 스레드는 Non-Tmax 클라이언트로부터 요청을 받거나 Tmax 서비스에 요청을 할 수 있다.

    Handler 프로세스는 프로세스당 최대 50개까지 스레드를 생성할 수 있다.

  • Clishm 프로세스

    클라이언트 모드에서 Listener 프로세스 대신 사용된다. 공유 메모리 초기화를 위해서 필요하며, Clishm 프로세스도 Tmax 시스템과 접속되어 Tmax 시스템이 부트되면 실행되고 다운되면 종료된다.

2. 서비스 유형

2.1. 서버 모드

서버 모드에서는 다음과 같은 2가지 연결 방식으로 클라이언트에 연결한다.

  • shared 방식

  • dedicate방식

클라이언트 연결(shared 방식)

서버로 동작하는 경우에는 Listener 프로세스가 반드시 필요하다. Listener 프로세스는 Non-Tmax 클라이언트에서 들어오는 연결 요청을 받아서 Handler 프로세스에게 전달하는 역할을 수행한다. Listener 프로세스는 들어오는 요청에 대해서 Round Robin 방식으로 Handler 프로세스에게 동등하게 분배한다.

Tmax 서비스로부터 게이트웨이 서비스를 호출하는 경우 Round Robin 방식으로 클라이언트와 연결된 Handler 프로세스의 Idle한 스레드 중에서 하나의 스레드에게 전달한다.

다음은 서버 모드에서 shared 방식으로 클라이언트를 연결하는 경우 TCPGWTHR의 동작 구조이다.

figure 2 1
서버 모드의 TCPGWTHR 동작 구조 - shared 방식으로 클라이언트 연결

다음은 서버 모드에서 shared 방식으로 클라이언트를 연결하는 경우 Tmax 환경 파일에 대한 예제이다.

*SERVER
tcpgwlsn  SVGNAME = svg1, MIN = 1, MAX = 1,
          SVRTYPE = CUSTOM_GATEWAY, RESTART = N,
          CLOPT = "-- -P 1029 -N 3 -k 98765"

tcpgwhdr1 SVNAME = svg1, MIN = 3, MAX = 3, SCHEDULE = RR,
          SVRTYPE = CUSTOM_GATEWAY, CPC = 10, TARGET = tcpgwhdr,
          CLOPT = "-- -P 1029 -N 10 -s –L tcpgwlsn"

*SERVICE
svcgw     SVRNAME = tcpgwhdr1

클라이언트 연결(dedicate 방식)

서버로 동작하는 경우에는 Listener 프로세스가 반드시 필요하다. Listener 프로세스는 Non-Tmax 클라이언트에서 들어오는 연결을 받아서 해당 클라이언트가 게이트웨이 환경 파일에 등록되어 있는지 확인 후 Handler 프로세스에게 전달하여 스레드를 할당한다. 만약 등록되어 있지 않으면 경고 메시지 출력하고 연결 요청을 거절한다. 이 과정에서 접속을 요청한 클라이언트 정보를 공유 메모리에서 검색 후 등록되어 있지 않으면, 게이트웨이 환경 파일을 내부적으로 재검색하므로 동적으로 추가가 가능하다.

Tmax 서비스에서 클라이언트를 구별하기 위해 IP당 하나의 연결만 허용한다. 예를 들어 클라이언트와 스레드가 연결되어 있는 상태에서 동일한 클라이언트에서 추가로 연결을 요청할 경우 기존 연결은 끊어지고, 추가 요청도 취소된다.

Tmax 서비스로부터 게이트웨이 서비스를 호출하는 경우 게이트웨이 환경 파일에 등록되어 있는 클라이언트 ID를 선택해야 하며, 호출할 때 게이트웨이 내부적으로 연결되어 있는 스레드를 찾아서 전달한다. Handler 프로세스의 스레드 할당은 게이트웨이 환경 파일에 등록된 클라이언트 수와 동적으로 접속을 허용하기 위해서 50개가 추가로 할당된다. 그리고 Handler 프로세스당 스레드의 개수가 50을 넘지 않도록 Handler 프로세스 수를 조정해야 한다.

다음은 서버 모드에서 dedicate 방식으로 클라이언트를 연결하는 경우 TCPGWTHR의 동작 구조이다.

figure 2 2
서버 모드의 TCPGWTHR 동작 구조 - dedicate 방식으로 클라이언트 연결

다음은 서버 모드에서 dedicate 방식으로 클라이언트를 연결하는 경우 Tmax 환경 파일에 대한 예제이다.

*SERVER
tcpgwlsn  SVGNAME = svg1, MIN = 1, MAX = 1,
          SVRTYPE = CUSTOM_GATEWAY, RESTART = N,
          CLOPT = "-- -P 1029 -N 3 -k 98765 -F tcpgwlsn.dat"
tcpgwhdr1 SVNAME = svg1, MIN = 3, MAX = 3, SCHEDULE = RR,
          SVRTYPE = CUSTOM_GATEWAY, CPC = 10, TARGET = tcpgwhdr,
          CLOPT = "-- -P 1029 -s –L tcpgwlsn"

*SERVICE
svcgw     SVRNAME = tcpgwhdr1

다음은 서버 모드에서 dedicate 방식으로 클라이언트를 연결하는 경우 게이트웨이 환경 파일에 대한 예제이다.

# Client IP          Server Port         Client ID
61.33.32.123          1029                CLI1
61.33.32.124          1029                CLI2
61.33.32.125          1029                CLI3
61.33.32.126          1029                CLI4

2.2. 클라이언트 모드

클라이언트 모드에서는 연결하려는 서버의 개수에 따라 다음과 같이 구분된다.

  • 싱글 서버 연결

  • 멀티 서버 연결

싱글 서버 연결

클라이언트로 동작하는 경우에는 Listener 프로세스 대신 Clishm 프로세스를 사용해야 한다. Non-Tmax 서버에 접속하는 경우에는 Tmax 환경 파일에 접속할 서버 IP와 포트를 등록하면 된다.

다음은 클라이언트 모드에서 싱글 서버를 연결하는 경우 TCPGWTHR의 동작 구조이다.

figure 2 3
클라이언트 모드의 TCPGWTHR 동작 구조 - 싱글 서버 연결

다음은 클라이언트 모드에서 싱글 서버 연결 방식으로 클라이언트를 연결하는 경우의 Tmax 환경 파일에 대한 예제이다.

*SERVER
clihdrshm  SVGNAME = svg1, MIN = 1, MAX = 1,
           SVRTYPE = CUSTOM_GATEWAY,
           CLOPT = "-- -N 1 -k 91000"
tcpgwhdr1  SVNAME = svg1, MIN = 1, MAX = 1,
           SVRTYPE = CUSTOM_GATEWAY,
           CPC = 9, SCHEDULE = RR, TARGET = tcpgwhdr,
           CLOPT = "-- -k 91000 -P 3777 –r 100.100.100.1 -N 1 –L clihdrshm"

*SERVICE
svcgw     SVRNAME = tcpgwhdr1

멀티 서버 연결

클라이언트로 동작하는 경우에는 Listener 프로세스 대신 Clishm 프로세스를 사용해야 한다. 여러 대의 Non-Tmax 서버에 접속하는 경우에는 게이트웨이 환경 파일을 이용하여 접속할 서버의 정보를 등록하면 된다.

Tmax 서비스로부터 게이트웨이 서비스를 호출하는 경우 할당되어 있는 스레드가 있는지 확인하고, 스레드가 할당되어 있지 않으면 빈 스레드를 할당하고 Non-Tmax 서버에 접속을 진행한다.

다음은 클라이언트 모드에서 멀티 서버를 연결하는 경우 TCPGWTHR의 동작 구조이다.

figure 2 4
클라이언트 모드의 TCPGWTHR 동작 구조 - 멀티 서버 연결

다음은 클라이언트 모드에서 멀티 서버 연결 방식으로 클라이언트를 연결하는 경우 Tmax 환경 파일에 대한 예제이다.

*SERVER
clihdrshm  SVGNAME = svg1, MIN = 1, MAX = 1,
           SVRTYPE = CUSTOM_GATEWAY,
           CLOPT = "-- -N 10 -k 91000 -F tcpgwhdr.dat"
tcpgwhdr1 SVGNAME svg1, MIN = 10, MAX = 10, SVRTYPE = CUSTOM_GATEWAY,
          CPC = 9, SCHEDULE = RR, TARGET = tcpgwhdr,
          CLOPT = "-- -k 91029 -F tcpgwhdr.dat –L clihdrshm"

*SERVICE
svcgw     SVRNAME = tcpgwhdr1

다음은 클라이언트 모드에서 멀티 서버 연결 방식으로 클라이언트를 연결하는 경우 게이트웨이 환경 파일에 대한 예제이다.

# Server IP          Server Port         Server ID
61.33.32.123          9000                  SERVER1
61.33.32.124          9100                  SERVER2