소개

본 장에서는 시스템의 개요 및 동작 구조와 서비스 유형에 대해서 기술한다.

1. 개요

SERIAL(RS232) 게이트웨이(이하 SRLGW)는 Tmax 서버와 Non-Tmax 서버(이하 리모트 노드)간의 Serial 통신하는 경우 인터페이스를 담당하는 Tmax에서 제공되는 게이트웨이이다.

SRLGW는 크게 2개의 모듈로 나누어졌는데, 하나는 Tmax에서 리모트 노드와 Serial로 송수신하는 부분이고, 나머지는 리모트 노드에서 Tmax의 SRLGW와 통신을 담당하는 COM 라이브러리로 분리되어 있다. COM 라이브러리는 SRLGW 사용자가 Serial 통신에 관련된 프로그램을 작성하지 않아도 SRLGW와 Serial로 통신할 수 있도록 하는 Serial 통신 라이브러리이다. 사용자는 이 라이브러리를 이용하여 편리하게 SRLGW와 서비스를 받을 수도 있고 서비스를 요청할 수도 있다.

Tmax의 SRLGW와 리모트 노드의 COM 라이브러리를 이용하여 사용자는 양방향의 서비스를 이용할 수 있고 복잡하게 다른 시스템과 Serial로 연결하기 위해 필요한 작업을 하지 않아도 된다. 예를 들어 Port를 열고 메시지를 주고받는 일 등은 모두 SRLGW와 COM 라이브러리에서 처리하므로 개발자는 업무 로직만을 작성하여 손쉽게 다른 시스템과 연결할 수 있다.

SRLGW는 TCP/IP처럼 서버와 클라이언트 모드로 구분되지 않기 때문에 리모트 노드와 Serial로 연결만 되면 어느쪽에서도 먼저 서비스를 요청할 수 있다. SRLGW 동작하는 방식은 Tmax의 서비스나 클라이언트에서 리모트 노드로 서비스를 요청하는 방식과 반대로 리모트 노드에서 Tmax의 서비스를 호출하는 방식으로 나눌 수 있다. 다음은 SRLGW의 동작 구조이다.

figure 1 1
SRLGW 동작 구조
  • Tmax에서 서비스 요청

    SRLGW 동작 구조에서 점선 표시된 내용으로 Tmax 클라이언트나 서비스로부터 서비스 요청을 받아서 리모트 노드로 서비스 요청을 한다. Tmax 클라이언트에서 리모트 노드로 서비스를 요청할 때 SRLGW에 등록된 서비스명을 이용한다. 이러한 서비스를 INBOUND 서비스라고 한다.

    Tmax 서비스에서 SRLGW를 tpcall이나 기타 다른 방식으로 서비스를 요청하면 SRLGW는 리모트 노드로 요청 메시지를 보낸 후 응답이 오면 자신을 호출한 서비스로 tpreturn한다.

    SRLGW는 Tmax에서 리모트 노드로의 요청을 비동기형 방식으로 처리한다. 즉 서비스나 클라이언트에서 리모트 노드로 서비스를 tpcall로 요청하면 SRLGW는 리모트로 서비스 요청을 보내고 서비스나 클라이언트에게 즉시 정상 응답을 반환한다. 나중에 리모트 노드에서 서비스 요청에 대한 응답일지라도 새로운 서비스 요청으로 간주한다. 그러므로 Tmax에서 요청하는 모든 서비스는 비동기형 방식으로 동작한다.

  • 리모트 노드에서 서비스 요청

    SRLGW 동작 구조에서 실선 표시된 내용으로 리모트 노드로부터 서비스 요청을 받아서 처리한다. 리모트 노드에서 서비스 요청을 받을 때 Tmax의 서비스명을 이용한다. 이러한 서비스를 OUTBOUND 서비스라고 한다.

    SRLGW는 리모트 노드에서 보내온 메시지를 받아서 사용자가 요청한 서비스로 tpacall하며, 서비스 결과는 처음 요청한 리모트 노드로 전송한다. 리모트 노드에서 Tmax의 서비스를 요청하는 경우에는 비동기형, 동기형을 사용할 수 있다.

    비동기형은 COM 라이브러리를 이용하여 SRLGW에 서비스를 요청할 때 flags에 COMMNOREPLY를 주면 SRLGW는 Tmax에 사용자가 요청한 서비스를 호출만하고 응답은 받지 않는다.

    동기형 방식은 COM 라이브러리를 이용하여 SRLGW에 서비스를 요청할 때 flags에 COMMNOREPLY를 주지않고 요청하면 SRLGW는 Tmax에 사용자가 요청한 서비스를 호출하고 응답을 받으면 서비스를 요청한 리모트 노드에 응답을 전송한다.

    리모트 노드에서 Tmax에 서비스를 요청할 때 지연처리 방식을 지원한다. flags에 COMMDELAY를 주면 SRLGW는 나중에 사용자가 RQ의 데이터를 일괄적으로 처리할 수 있도록 RQ에 요청 데이터를 저장한다. 지연처리는 항상 비동기형 방식으로 처리한다.

Tmax에 설치되는 SRLGW는 Tmax 서버의 한 종류로, Tmax 환경 파일에 서버로 등록해야만 사용할 수 있다. 일반 서버는 TCS나 UCS 방식의 서버 라이브러리를 이용하여 서버를 생성하나 SRLGW는 이미 사용자가 직접 사용할 수 있도록 실행 가능한 파일로 제공하므로 사용자는 SRLGW를 Tmax 환경 파일에 서버로 등록만 해주면 된다.

SRLGW는 지정된 리모트 노드로만 서비스를 요청할 수 있으므로 사용자는 서비스 요청을 하고자하는 리모트 노드를 알고있어야 한다. 이를 위해서 Tmax 환경 파일에 서비스명을 등록하고, 해당 서비스명을 SRLGW 환경 파일의 리모트 노드별 정보에 등록해주어야 한다. SRLGW는 서비스요청을 받으면 요청한 서비스명으로 리모트 노드를 찾아서 해당 리모트 노드에 데이터를 전송한다. Tmax 환경설정에 대한 자세한 내용은 환경설정에서 설명한다.

2. 서비스의 유형

2.1. Tmax에서 서비스 요청

Tmax 클라이언트나 서비스로부터 서비스 요청을 받아서 리모트 노드로 서비스 요청을 할 수 있다. Tmax에서 서비스 요청을 하는 경우 리모트 노드로 서비스 요청을 보내고 응답을 받지 않는 경우(NOREPLY 서비스 호출)와 서비스 요청을 보내고 해당 응답을 새로운 요청으로 처리(REPLY 서비스 호출)하는 2가지 방식으로 구분할 수 있다.

NOREPLY 서비스 호출

Tmax 클라이언트의 요청을 받은 서비스에서 SRLGW로 서비스로 tpcall을 하면 SRLGW는 리모트 노드로 서비스를 요청하고, 리모트 노드의 결과에 관계없이 곧바로 반환하는 방식이다. 이와 같은 방식으로 SRLGW를 동작시키게 되면 Tmax 클라이언트에서 호출한 Tmax 서비스는 SRLGW를 호출한 후에 결과에 관계없이 계속 처리하게 된다.

다음은 NOREPLY 방식으로 서비스 호출하는 경우 SRLGW의 동작 구조이다.

figure 2 1
NOREPLY 서비스 요청 SRLGW 동작구조
  1. SRLGW와 리모트 노드는 연결되어 있는 상태이다.

  2. Tmax 클라이언트는 Tmax 서비스를 tpcall한다.

  3. Tmax 서비스에서는 클라이언트의 요청을 받아들여 SRLGW로 서비스를 tpcall한다. 사용자는 SRLGW에는 많은 서비스가 등록되어 있으므로 사용자가 요청하고자 하는 리모트 노드와 연결된 Serial 포트의 서비스명을 지정해야 한다.

  4. SRLGW는 사용자가 지정한 서비스와 연결된 리모트 노드에 서비스를 요청한다.

  5. SRLGW는 서비스를 요청한 서비스에 정상 응답을 tpreturn한다.

REPLY 서비스 호출

REPLY 서비스 호출 방식은 리모트 노드는 해당 요청 서비스를 처리하고 결과를 Tmax의 새로운 서비스를 호출하는 방식이다. 새로운 서비스를 호출하는 경우에는 ComSend 함수의 flags에 설정하는 값에 따라 Tmax의 서비스 처리 결과를 받을 수도 있고 받지 않을 수도 있다. 이와 같은 방식은 최초에 서비스를 호출하는 서비스와 결과를 처리하는 서비스를 분리하는 데 사용한다.

다음은 REPLY 방식으로 서비스 호출하는 경우 SRLGW의 동작 구조로 Tmax는 서비스 처리 결과를 받지 않게 설정되어 있다.

figure 2 2
REPLY 서비스 요청 SRLGW 동작구조
  1. SRLGW와 리모트 노드는 연결되어 있는 상태이다.

  2. Tmax 클라이언트는 Tmax 서비스를 tpcall한다.

  3. Tmax 서비스에서는 클라이언트의 요청을 받아들여 SRLGW로 서비스를 tpcall한다. 사용자는 SRLGW에는 많은 서비스가 등록되어 있으므로 사용자가 요청하고자 하는 리모트 노드와 연결된 Serial 포트의 서비스명을 지정해야 한다.

  4. SRLGW는 사용자가 지정한 서비스와 연결된 리모트 노드에 서비스를 요청한다.

  5. SRLGW는 서비스를 요청한 서비스에 정상 응답을 tpreturn한다.

  6. 리모트 노드에서 결과에 대한 새로운 서비스 요청을 받는다.

  7. SRLGW는 Tmax에 사용자가 지정한 서비스를 호출한다.

2.2. 리모트 노드에서 서비스 요청

리모트 노드에서 Tmax의 서비스를 호출하는 것으로 이 방식은 동기형 방식과 비동기형 방식으로 나눌 수 있다. 동기형은 서비스를 요청하고 응답을 기다리는 방식이고, 비동기형은 서비스를 요청하고 응답을 기다리지 않는 방식이다. 동기형 방식중에 서비스를 요청하고 응답을 받기전에 다른 서비스 요청이 해당 리모트 노드로 전송될 수 있으므로 이에 대한 처리를 적절히 수행해야 한다.

동기형 호출 방식

동기형 호출 방식은 리모트 노드에서 SRLGW로 먼저 서비스를 요청하고 응답을 기다리는 방식이다. SRLGW는 리모트 노드에서 요청한 서비스를 호출하고 그 결과를 받아서 해당 서비스를 요청한 채널로 결과를 전송한다. 리모트 노드는 동시에 SRLGW로 Tmax 환경 파일에 정의되어 있는 MAXSACALL 개수를 초과하여 호출할 수 없다.

리모트 노드의 사용자는 COM 라이브러리를 이용하여 SRLGW로 서비스를 호출하고 응답을 받는다. 리모트 노드의 사용자는 ComSend를 호출할 때 flags에 아무것도 설정하지 않아야 한다.

이와 같은 동작 방식은 리모트 노드에서 Tmax의 서비스를 호출하는 가장 보편적인 방식이다. SRLGW는 리모트 노드의 채널 정보를 보관하였다가 서비스로 부터 결과를 수신받으면, 보관하고 있는 채널 중에서 해당 채널을 찾아서 결과를 전송한다. 이때 해당 채널로 결과를 되돌려 주기 전에 다른 요청을 할 수 있다. 즉, SRLGW는 리모트 노드에서 요청한 채널은 블록되지않으므로 요청에 대한 응답이 리모트 노드로 전송되기 전에 다른 요청 서비스가 리모트 노드로 전송될 수 있으므로 이에 대한 처리를 해야 한다.

다음은 동기형 호출 방식에서 SRLGW의 동작 방식이다.

figure 2 3
동기형 요청 SRLGW
  1. SRLGW와 리모트 노드는 연결되어 있는 상태이다.

  2. 리모트 노드는 SRLGW와 연결된 채널로 메시지를 전송한다.

  3. SRLGW는 tpacall로 Tmax 서비스를 호출한다.

  4. 서비스 처리 결과를 SRLGW는 받아서 메시지를 요청한 채널을 찾는다.

  5. 해당 채널이 정상적으로 연결되어 있으면 결과를 전송한다.

비동기형 호출 방식

리모트 비동기형 호출 방식은 리모트 노드에서 SRLGW로 먼저 서비스를 요청하고 응답을 기다리지 않는 방식이다. SRLGW는 리모트 노드에서 요청한 서비스를 호출하고 그 결과는 받지 않는다.

이 방식으로 처리하기 위해서 리모트 노드에서는 ComSend시 flags에 COMMNOREPLY를 설정해야 한다. COMMNOREPLY가 설정되어 있으면 SRLGW는 Tmax에 서비스를 요청만하고 응답은 받지 않는다.

다음은 비동기형 호출 방식에서 SRLGW의 동작 방식이다.

figure 2 4
비동기형 요청 SRLGW
  1. SRLGW와 리모트 노드는 연결되어 있는 상태이다.

  2. 리모트 노드는 SRLGW와 연결된 채널로 메시지를 전송한다.

  3. SRLGW는 tpacall로 Tmax 서비스를 호출한다.

  4. 처리 결과를 반환한다.