본 장에서는 RAC의 구성, 기본 구조와 특징에 대해서 설명한다.
RCA(Raw Client Agent)는 Tmax 클라이언트 라이브러리를 사용할 수 없는 기존 통신 프로그램과 TCP/IP 소켓으로 연결하여 Tmax 시스템에서 제공하는 서비스를 이용할 수 있도록 지원한다.
RCA는 멀티 스레드(Multi Thread)방식으로 처리되며 각각의 스레드는 Tmax 클라이언트에 해당한다. 따라서 기동될 스레드의 개수는 Tmax 시스템의 라이선스를 고려하여 설정해야 한다. 또한 RCA에서는 POSIX 스레드가 사용되며 Kernel 레벨 스레드로 시스템에 의해 스케줄링된다. 따라서 멀티 CPU 환경에서 보다 효과적으로 처리될 수 있다.
RCA는 구성하는 위치에 따라 로컬 모드와 리모트 모드로 나뉜다.
각 모드에 따른 자세한 사용 방법은 “2.2. 시스템 사용”을 참고하고, 시스템 구조에 대한 자세한 내용은 “1.3. 시스템 구조”를 참고한다.
RCA는 다음과 같이 구성된다.
RCAL은 TCP/IP 구조에서 서버 프로세스에 해당된다. RCAL는 상대 통신 프로그램에서 들어오는 연결을 기다리고 연결 정보를 RCAH에 전달하는 역할을 한다. RACL은 상대 통신 프로그램으로 연결은 하지 않는다.
다음의 경로에 위치하여 사용자의 접속을 제어한다.
$TMAXDIR/bin/rcal
사용자의 로직과 함께 생성된다.
RCAH는 Tmax 클라이언트 스레드 라이브러리($TAMXDIR/lib/librcah.so)와 사용자가 작성한 클라이언트 프로그램이 결합하여 생성되는 실행 파일로 사용자의 로직과 함께 생성된다. 또한 RCAH는 멀티 스레드 방식으로 처리되며 한 스레드가 하나의 Tmax 클라이언트에 해당한다. 즉, 하나의 클라이언트 프로그램(RCAH)이 스레드 수만큼 Tmax 시스템과 연결을 맺어 서비스를 제공한다.
RCAL은 최대 500개의 RCAH를 구동할 수 있으며, 하나의 RCAH 내에는 최대 60개의 스레드를 가질 수 있다. 따라서 한 RCA 모듈은 최대 30000개(500 * 60)의 클라이언트를 지원한다. 이와 같이 멀티 스레드 방식으로 처리되기 때문에 전역 변수 혹은 static 변수의 사용에 대한 주의가 필요하다. RCAH 프로그램에 대한 예제는 “제4장 RCAH 예제”를 참고한다.
관리 툴
RCA는 rcastat와 rcakill를 사용하여 RCA 정보를 모니터링하거나 종료할 수 있다.
| 관리 툴 | 설명 |
|---|---|
| rcastat | RCA 설정 정보와 현재 RCA에 접속한 클라이언트 수 등을 모니터링할 수 있다. rcastat에 대한 자세한 내용은 “2.3.2. 모니터링”을 참고한다. |
| rcakill | RCA를 종료하고자 하는 경우 RCA가 사용하는 자원을 제거하기 위하여 사용한다. |
시스템은 클라이언트 요청처리에 따라 서버 모드와 클라이언트 모드로 나눌 수 있다.
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 내부적으로 사용됨으로써 사용자가 조작해서는 안 되는 필드이다.