제1장 소개

본 장에서는 RAC의 구성, 기본 구조와 특징에 대해서 설명한다.

1.1. 개요

RCA(Raw Client Agent)는 Tmax 클라이언트 라이브러리를 사용할 수 없는 기존 통신 프로그램과 TCP/IP 소켓으로 연결하여 Tmax 시스템에서 제공하는 서비스를 이용할 수 있도록 지원한다.

RCA는 멀티 스레드(Multi Thread)방식으로 처리되며 각각의 스레드는 Tmax 클라이언트에 해당한다. 따라서 기동될 스레드의 개수는 Tmax 시스템의 라이선스를 고려하여 설정해야 한다. 또한 RCA에서는 POSIX 스레드가 사용되며 Kernel 레벨 스레드로 시스템에 의해 스케줄링된다. 따라서 멀티 CPU 환경에서 보다 효과적으로 처리될 수 있다.

RCA는 구성하는 위치에 따라 로컬 모드와 리모트 모드로 나뉜다.

각 모드에 따른 자세한 사용 방법은 “2.2. 시스템 사용”을 참고하고, 시스템 구조에 대한 자세한 내용은 “1.3. 시스템 구조”를 참고한다.

1.2. 구성

RCA는 다음과 같이 구성된다.

1.3. 시스템 구조

시스템은 클라이언트 요청처리에 따라 서버 모드와 클라이언트 모드로 나눌 수 있다.

1.3.1. 서버 모드

서버 모드는 RCAL이 클라이언트의 리모트 연결에 대기했다가 처리하는 방식이다.

다음은 서버 모드에서 RCAL과 RCAH의 프로세스 흐름에 대한 그림이다.

[그림 1.1] 서버 모드 프로세스 흐름

서버 모드 프로세스 흐름


1.3.2. 클라이언트 모드

클라이언트 모드는 클라이언트에게 RCA에서 연결을 시도하여 처리한다. 리모트 소켓 프로그램에서 연결 요청을 기다리고 RCAH의 각 스레드에서 연결을 요청하는 방식이다.

리모트 소켓 프로그램과 연결이 이루어지면 서버 모드나 클라이언트 모드나 RCA 동작은 동일하다. 그러나 클라이언트 모드의 경우에 RCAL은 리모트 연결 요청을 기다리지 않는다. 단, 각 스레드 메인 프로그램은 서버 모드와 클라이언트 모드가 다르다.

다음은 클라이언트 모드에서 RCAH의 프로세스 흐름에 대한 그림이다.

[그림 1.2] 클라이언트 모드 프로세스 흐름

클라이언트 모드 프로세스 흐름


1.4. 특징

RCA는 멀티 포트를 지원한다는 특징을 가지고 있다. RCA는 다양한 형태의 클라이언트를 지원하기 위해 최대 32개까지의 포트를 지정할 수 있다. 따라서 개발자는 포트별 로직을 구성함으로써 하나의 프로세스보다 유연한 프로그램을 작성할 수 있다.

다음은 멀티 포트를 지정하는 방법이다. (기본값: 8899)

RCA_PORT="9000, 9001, 9002, 9003"

프로그래밍할 때에는 thrinit(), thrmain(), thrdone()의 인자로 넘겨지는 값이 RCAINFO 구조체($TMAXDIR/usrinc/rca.h 아래 참조)에 대한 포인터로서 이 구조체에서 가리키는 포트 번호를 기준으로 포트별 로직을 구성할 수 있다.

/* ------ type definition ------ */
typedef struct {
    int fd;
    int portno;
    int count;
    int status1;
    int status2;
    void *user_data;
    void *system_data;
} *RCAINFO;

다음은 구조체 필드에 대한 설명이다.

구조체 필드설명
fd클라이언트가 접속하여 생성된 TCP/IP 소켓이다.
portno사용된 포트 번호이다. 이 경우에는 "9000, 9001, 9002, 9003" 중 하나의 값이다.
count해당 스레드가 호출된 횟수이다.

주의

본 안내서에서 설명하지 않은 나머지 필드는 RCA 내부적으로 사용됨으로써 사용자가 조작해서는 안 되는 필드이다.