소개

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

1. 개요

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

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

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

  • 로컬 모드(Local Mode)

    Tmax 시스템 안에서 위치하도록 구성해서 서버나 클라이언트의 동작을 처리하는 방식이다.

  • 리모트 모드(Remote Mode)

    Tmax 시스템 외부의 노드에 위치해서 서버나 클라이언트의 동작을 처리하도록 하는 방식이다.

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

2. 구성

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

  • RCAL

    RCAL은 TCP/IP 구조에서 서버 프로세스에 해당된다. RCAL는 상대 통신 프로그램에서 들어오는 연결을 기다리고 연결 정보를 RCAH에 전달하는 역할을 한다. RACL은 상대 통신 프로그램으로 연결은 하지 않는다.

    다음의 경로에 위치하여 사용자의 접속을 제어한다.

    $TMAXDIR/bin/rcal
  • RCAH

    사용자의 로직과 함께 생성된다.

    RCAH는 Tmax 클라이언트 스레드 라이브러리($TAMXDIR/lib/librcah.so)와 사용자가 작성한 클라이언트 프로그램이 결합하여 생성되는 실행 파일로 사용자의 로직과 함께 생성된다. 또한 RCAH는 멀티 스레드 방식으로 처리되며 한 스레드가 하나의 Tmax 클라이언트에 해당한다. 즉, 하나의 클라이언트 프로그램(RCAH)이 스레드 수만큼 Tmax 시스템과 연결을 맺어 서비스를 제공한다.

    RCAL은 최대 500개의 RCAH를 구동할 수 있으며, 하나의 RCAH 내에는 최대 60개의 스레드를 가질 수 있다. 따라서 한 RCA 모듈은 최대 30000개(500 * 60)의 클라이언트를 지원한다. 이와 같이 멀티 스레드 방식으로 처리되기 때문에 전역 변수 혹은 static 변수의 사용에 대한 주의가 필요하다. RCAH 프로그램에 대한 예제는 RCAH 예제를 참고한다.

  • 관리 툴

    RCA는 rcastat와 rcakill를 사용하여 RCA 정보를 모니터링하거나 종료할 수 있다.

    관리 툴 설명

    rcastat

    RCA 설정 정보와 현재 RCA에 접속한 클라이언트 수 등을 모니터링할 수 있다. rcastat에 대한 자세한 내용은 모니터링을 참고한다.

    rcakill

    RCA를 종료하고자 하는 경우 RCA가 사용하는 자원을 제거하기 위하여 사용한다.

3. 시스템 구조

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

3.1. 서버 모드

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

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

figure 2 1
서버 모드 프로세스 흐름

3.2. 클라이언트 모드

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

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

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

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

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 내부적으로 사용됨으로써 사용자가 조작해서는 안 되는 필드이다.