제2장 환경변수 설정

내용 목차

2.1. 개요
2.2. 환경변수
2.2.1. 서버 환경변수
2.2.2. 클라이언트 환경변수
2.3. 환경변수 설정 방법
2.3.1. 서버 환경변수 설정
2.3.2. 클라이언트 환경변수 설정
2.4. 다수의 서버 정보 등록

본 장에서는 서버, 클라이언트에 설정할 환경변수, 환경변수 설정 방법, 다수의 서버 정보를 등록하는 방법에 대해 설명한다.

2.1. 개요

Tmax 시스템에서 사용하는 환경변수는 크게 2가지로 나누어지는데, 첫 번째는 Tmax 시스템에서 사용하는 환경변수이고, 두 번째는 서버 프로세스에서 사용하는 환경변수이다. Tmax 시스템에서 사용하는 환경변수의 대부분은 Tmax 시스템에 접근하기 위한 변수로 본 장에서 설정하는 환경변수는 다음 장에서 설명될 환경 파일의 항목과 동일한 값을 입력해야 한다. 또한 환경변수는 해당 시스템에서 수행되는 모든 서버 프로세스에 동일하게 적용된다.

Tmax 시스템이 설치된 서버는 해당 셸의 프로파일에 환경변수를 반드시 설정해야 하지만 클라이언트는 2가지 방식으로 설정하여 사용할 수 있다.

  • 서버와 동일하게 프로파일에 설정하여 사용한다.

  • 특정 파일에 일정한 포맷으로 설정하여 사용한다.

Tmax 시스템과 함께 기동되는 서버 프로세스에서 사용되는 환경변수는 특정 파일에 지정된 포맷으로 설정하고 환경 파일의 ENVFILE 항목에 해당 파일을 등록해서 사용할 수 있다.

2.2. 환경변수

Tmax 시스템이 설치된 서버와 클라이언트는 모두 동일한 환경변수를 사용하지만 Tmax 시스템이 설치된 노드의 모든 환경변수를 클라이언트에 설정할 필요는 없다.

2.2.1. 서버 환경변수

다음은 서버에 설정할 환경변수 목록이다.

환경변수내용
TMAXDIRTmax 시스템의 홈 디렉터리이다. (환경 파일 항목: TMAXDIR)
TMAX_BKAPPDIR기존의 서버 프로세스를 변경하는 경우 새로운 프로세스가 위치할 디렉터리이다.
TMAX_HOST_ADDRTmax 시스템이 수행될 서버의 IP 주소이다. 클라이언트가 랜덤하게 서버를 선택하여 접속하기 때문에 부하분산이 가능하다. 자세한 설명은 “2.4. 다수의 서버 정보 등록”을 참고한다.
TMAX_HOST_PORTTmax 시스템에 접속할 포트 번호이다. (환경 파일 항목: TPORTNO)
TMAX_BACKUP_ADDRTmax 백업 서버의 IP 주소이다.
TMAX_BACKUP_PORTTmax 백업 서버의 포트 번호이다.
TMAX_RAC_PORT분산 노드로 구성된 시스템을 통합 관리하기 위한 포트 번호로 racd에서 사용된다. (환경 파일 항목: RACPORT)
TMAX_ERR_MSG서버 콘솔창에 에러 메시지를 표시할 것인지를 'Y' 또는 'N'으로 설정한다.
SDLFILE구조체 정보가 저장된 파일을 지정한다.
FDLFILE필드키 정보가 저장된 파일을 지정한다.
TMAX_PATHDIRtmdown에 참조할 환경 파일의 경로이다. (환경 파일 항목: PATHDIR)
TMAXHOME설치 디렉터리와 작업 디렉터리를 분리하여 사용하고자 할 때 TMAXHOME에 설치 디렉터리(bin, lib, usrinc, tuxinc, topinc, cobinc, license)를, TMAXDIR에 작업 디렉터리(config, path, log, svct)를 지정한다. (환경 파일 항목: TMAXHOME)
TMAX_SEMANTICSFML 버퍼 중 데이터를 읽어오는 함수(fbget, fbget_tu, fbget_tut, fbgetf, fbgetlast_tu, fbnext_tu)에서 버퍼의 길이에 따른 동작을 지정하기 위한 환경변수이다. 함수의 마지막 필드에 데이터 길이를 명시해서 사용자가 지정한 버퍼를 검증한다. 사용자가 지정한 버퍼가 실제 데이터보다 작은 경우에 발생할 수 있는 문제를 해결할 수 있다.
TMAX_TRACETmax 애플리케이션의 실행에 대한 Runtime tracing이 이루어질 수 있도록 하는 환경변수이다.
TMAX_DEBUG클라이언트의 디버그 및 에러 로그를 화면이 아닌 사용자가 지정한 파일에 기록할 수 있다. 해당 환경변수에 파일을 설정한다. 실제 기록되는 파일명은 파일명 뒤에 해당 클라이언트의 PID(Process ID)가 붙어 자동으로 설정된다 (파일명.pid).
TMAX_STRING_NULLtpalloc / tprealloc API를 이용하여 STRING 타입의 버퍼를 할당한다. 할당된 버퍼에 대하여 사용자가 NULL을 위한 마지막 1Byte 공간까지 데이터를 입력하고 서비스를 요청했을 경우 TPEINVAL(클라이언트), TPESVCERR(서버) 에러가 발생한다. 해당 환경변수를 'Y'로 설정하면 위의 상황이 발생하는 경우 1Byte 크기의 버퍼가 추가로 할당되며 해당 공간에 자동으로 NULL 문자가 설정된다.
TMAX_HOST_IPV6TMAX_HOST_ADDR 환경변수에 설정한 주소가 IPv6 프로토콜을 사용할 경우에는 'Y'로 설정한다.
TMAX_BACKUP_IPV6TMAX_BACKUP_ADDR 환경변수에 설정한 주소가 IPv6 프로토콜을 사용할 경우에는 'Y'로 설정한다.
TMAX_WEBADM_IPV6Tmax Web-Admin Agent 프로그램인 twagent에서 TMAX_WEBADM_PORT로 listen할 때 IPv6 프로토콜을 사용할 것인지를 설정한다. 'Y'로 설정하면 IPv6 프로토콜을 사용한다.
TMAX_RAC_IPV6분산 노드로 구성된 시스템의 통합 관리를 위해 사용되는 racd 데몬 프로세스에서 connect, listen을 수행할 때 IPv6 프로토콜을 사용할 것인지를 설정한다. 'Y'로 설정하면 IPv6로 사용하고, 'N'으로 설정하거나 환경변수를 설정하지 않으면 IPv4로 사용한다. racd를 기동할 때 -k 옵션을 사용하는 경우에만 환경변수가 적용되고, 이진 Tmax 환경 파일을 사용해서 기동되는 경우에는 SYSTEM_IPV6 설정값의 영향을 받는다.
TMAX_IPV6_LINK_IFIPv6 프로토콜을 사용하는 환경에서 Tmax의 프로세스들이 listen이나 connect를 수행할 때 네트워크 인터페이스명에 대한 인터페이스 인덱스를 정상적으로 인식하지 못하는 경우에 네트워크 인터페이스명을 지정한다.

주의

TMAX_STRING_NULL은 tpalloc/tprealloc으로 할당된 버퍼에 한해서만 지원되고 서버와 클라이언트가 동일하게 동작한다. 반드시 위에서 설명했듯이 환경변수를 'Y'로 설정해야 한다는 점을 주의한다.

다음은 TMAX_SEMANTICS 환경변수의 설정값에 대한 예제이다. 사용자가 지정한 버퍼 크기가 실제 데이터의 크기보다 작을 경우 사용자가 지정한 버퍼의 크기만큼만 절삭(Truncate)하여 버퍼에 넣는다.

TMAX_SEMANTICS = "FDL_LEN=TRU"

다음과 같이 설정한 경우, 사용자가 지정한 버퍼 크기가 실제 데이터의 크기보다 작으면 FBENOSPACE 에러가 발생한다.

TMAX_SEMANTICS = "FDL_LEN=ERR"

다음과 같이 설정하면 사용자가 입력한 length가 무시되고, 사용자가 충분한 크기의 버퍼를 할당했다고 가정하고 동작한다. 이 환경변수는 fbget 유형 함수의 마지막 필드에 데이터 길이를 명시한 경우에만 유효하다. 마지막 필드가 0 또는 NULL일 경우 사용자가 충분한 길이의 버퍼를 할당했다고 가정하고 동작한다.

TMAX_SEMANTICS = "FDL_LEN=OLD"

2.2.2. 클라이언트 환경변수

다음은 클라이언트에 설정할 환경변수 목록이다.

환경변수내용
TMAX_HOST_ADDRTmax 서비스 서버의 IP 주소이다.
TMAX_HOST_PORTTmax 서비스 서버의 포트 번호이다.
TMAX_CONNECT_TIMEOUTTmax 시스템을 연결하는 경우 타임아웃 시간을 microsecond 단위로 지정이 가능하다. (x.xxx초)
SDLFILE구조체 정보가 저장된 파일을 지정할 환경변수이다.
FDLFILE필드키 정보가 저장된 파일을 지정할 환경변수이다.
ULOG(또는ULOGPFX)클라이언트에 로그를 남기고자 하는 경로를 설정한다. 설정하지 않으면 Tmax 환경 파일에 설정된 ULOGDIR 경로에 기록이 남는다.
TMAX_TRACE클라이언트 애플리케이션 실행에 대한 Runtime tracing이 수행된다.
TMAX_SEMANTICS

FML 버퍼 중 데이터를 읽어오는 함수(fbget, fbget_tu, fbget_tut, fbgetf, fbgetlast_tu, fbnext_tu)에서 버퍼의 길이에 따른 동작을 지정하기 위한 환경변수로 서버의 환경변수를 참조한다.

암호화 기능을 사용하는 경우, Tmax는 클라이언트와 서버 사이의 송, 수신 데이터를 보다 안정적으로 전달할 수 있도록 암호화 기능을 제공한다.

TMAX_DEBUG클라이언트의 디버그 및 에러 로그를 화면이 아닌 사용자가 지정한 파일에 기록한다. 'directory/filename'의 형태로 해당 파일을 설정하며, 설정할 때 파일명 뒤에 "파일명.pid" 형태로 해당 클라이언트의 PID(Process ID)가 자동으로 설정된다.
TMAX_HOST_IPV6TMAX_HOST_ADDR 환경변수에 설정한 주소가 IPv6 프로토콜을 사용할 경우에는 'Y'로 지정한다.
TMAX_BACKUP_IPV6TMAX_BACKUP_ADDR 환경변수에 설정한 주소가 IPv6 프로토콜을 사용할 경우에는 'Y'로 지정한다.
TMAX_IPV6_LINK_IFIPv6 프로토콜을 사용하는 환경에서 Tmax의 프로세스들이 listen이나 connect를 수행할 때 네트워크 인터페이스명에 대한 인터페이스 인덱스를 정상적으로 인식하지 못하는 경우에 네트워크 인터페이스명을 지정한다.
TMAX_CLH_TCP_OPTION

클라이언트 프로그램에서 tpstart를 수행하면 CLH와 연결을 맺게 된다.

'YES' 또는 'NO'으로 설정하며 설정하지 않을 경우 기본값은 'NO'이다.

'YES'로 설정하면 CLH에서 해당 client와의 채널에 대해서 nagle 알고리즘을 사용하지 않도록 설정하여, 메시지 송신 지연 현상이 발생하지 않도록 한다.

이 환경설정이 YES로 설정되어 있으면 tpstart하는 경우 TPTCPNODELAY flag를 설정하는 것과 동일하게 동작한다.

TMAX_ACTIVATE_AUTO_TPSTART

'Y' 또는 'N'으로 설정하며 설정하지 않을 경우 기본값은 'Y'이다.

클라이언트 프로그램에서 tpstart를 명시적으로 호출하지 않고 tpcall, tpacall 등의 API를 호출하면 자동으로 tpstart(NULL)을 호출해서 Tmax 시스템과 연결한다. 이와같은 동작을 원하지 않을 경우에는 'N'으로 지정한다. 'N'으로 지정할 경우 tpstart()가 명시적으로 호출되지 않은 경우에는 TPEPROTO 에러가 발생한다.

이 옵션의 영향을 받는 API는 다음과 같다.

  • tpcall(), tpacall(), tpcallsvg(), tpacallsvg(), tpconnect(), tpchkunsol(), tpsetunsol(), tpgetunsol(), tpsubscribe(), tpsubscribe2(), tpunsubscribe(), tppost(), tpbroadcast(), tpgetcliaddr(), tpgetpeername(), tpgetsockname(), tpsleep(), tpgetactivesvr(), tpqsvcstat(), tpqstat(), tpenq(), tpdeq(), tpreissue(), tpmcall(), tpsvgcall(), tpenq_ctl(), tpdeq_ctl(), tx_begin()

PB_TPCALL_RETRY

Power Builder 환경에서 tpcall 요청이 네트워크 오류에 의해 실패할 경우 재시도할 최대 횟수를 설정한다.

이 환경변수의 영향을 받는 API는 다음과 같다.

  • pb_tpcall(), pb_tpfcall(), pb_tpcallw(), pb_btpcall(), pb_etpcall(), tuxcall(), tuxfcall32(), tp_call(), tp_call32(), tp_fcall(), tp_fcall32()

PB_TPCALL_RETRY_TIMEOUTPower Builder 환경에서 tpcall 요청 시 각 요청에 대한 BLOCKTIME을 초 단위로 지정한다. 이 환경변수의 영향을 받는 API는 PB_TPCALL_RETRY 환경변수의 설명을 참고한다.
PB_TUXCOMPAT

Power Builder 환경에서 일부 API의 동작에 대해서 Tuxedo 라이브러리와의 호환성을 제공한다. 자세한 사항은 Tmax Programming Guide(4GL)를 참고한다.

이 환경변수의 영향을 받는 API는 다음과 같다.

  • tuxcall(), tuxfcall32(), tp_call(), tp_call32(), pb_etpcall(), tp_fcall(), tp_fcall32()

FDLVERSION

FDL 버전을 지정할 수 있다. (기본값 : 1)

2로 지정하면 검색 성능이 향상된 버전으로 동작하며, 기존의 Tmax와의 호환성이 없다. 이 옵션의 영향을 받는 것은 서버 애플리케이션, ROUTING 절 설정에 따른 CLH의 스케줄링이다. 클라이언트에서는 환경설정의 옵션 적용을 받지 않으며, 다음의 환경변수를 설정해야 한다.

export FDLVERSION=2 또는 tmax.env 환경변수 파일에 "FDLVERSION=2"라고 설정하고 tmaxreadenv()를 호출한다. 만약 fb* API를 사용할 때 FDLVERSION 설정이 자신의 환경과 일치하지 않으면 FBESETVER 에러를 리턴한다.

TMAX_SEMANTICS을 설정하면 암호화 기능을 사용할 수 있다. 암호화 기능을 사용하기 위해서는 클라이언트와 서버 모두 암호화 기능이 설정되어 있어야 하며, 클라이언트 암호화 설정을 하는 경우 다음과 같이 .profile에 설정한다. 서버에 대한 암호화 설정은 "3.2.1 DOMAIN 절"의 CRYPT 항목을 참고한다.

<.profile>

export TMAX_SEMANTICS = "CRYPT_SW=Y"

tmaxreadenv에서 TMAX_SEMANTICS 환경변수를 사용하는 경우 큰 따옴표(") 안에 등호( = )대신 콜론(:)을 사용한다.

<tmax.env>

TMAX_SEMANTICS = "FDL_LEN:ERR" 
TMAX_SEMANTICS = "CRYPT_SW:Y"

2.3. 환경변수 설정 방법

다음은 서버와 클라이언트의 환경변수의 설정 방법이다.

2.3.1. 서버 환경변수 설정

서버 환경변수 설정은 사용하는 셸에 따라 설정 대상이 다르다. korn 셸 및 bash 셸의 경우는 <.profile> 및 <.bash_profile>에, c 셸의 경우 <.cshrc>에 설정한다.

주의

환경변수를 설정할 때 환경변수명과 등호(=) 사이에는 공백이 없어야 한다.

  • korn 셸 및 bash 셸

    <.profile / .bash_profile>

    export TMAXDIR = /home/tmax
    export TMAX_BKAPPDIR = /home/tmax/bkappbin
    export TMAX_HOST_ADDR = 192.168.0.1
    export TMAX_HOST_PORT = 8888
    export TMAX_RAC_PORT = 3333
    export SDLFILE = /home/tmax/sample/sdl/tmax.sdl
    export FDLFILE = /home/tmax/sample/sdl/tmax.fdl
    export TMAX_PATHDIR = /home/tmax/path_new
    export TMAX_DEBUG = /home/tmax/sample/client/clidebug

  • c 셸

    <.cshrc>

    setenv TMAXDIR = /home/tmax
    setenv TMAX_BKAPPDIR = /home/tmax/bkappbin
    setenv TMAX_HOST_ADDR = 192.168.0.1
    setenv TMAX_HOST_PORT = 8888
    setenv TMAX_RAC_PORT = 3333
    setenv SDLFILE = /home/tmax/sample/sdl/tmax.sdl
    setenv FDLFILE = /home/tmax/sample/sdl/tmax.fdl
    setenv TMAX_PATHDIR = /home/tmax/path_new
    setenv TMAX_DEBUG = /home/tmax/sample/client/clidebug

Tmax 인스톨러를 사용해서 Tmax를 설치하며 기본 환경변수들은 자동적으로 셸의 프로파일 끝에 설정된다. Tmax 시스템의 서버에서 사용할 환경변수는 텍스트 파일로 만들어서 Tmax 환경 파일 NODE 절 및 SVRGROUP 절의 ENVFILE 항목에 파일명을 등록하면 서버 프로세스에서 참조할 수 있다.

<서버 환경 텍스트 파일>

LOGDIR = /tmp
USER_VARIABLE = test1
USER_VARIABLE = test2
USER_VARIABLE = test3
USER_VARIABLE = test4
USER_VARIABLE = test5

2.3.2. 클라이언트 환경변수 설정

클라이언트 환경변수의 설정은 OS에 따라 다르다.

  • UNIX의 경우

    서버와 동일하게 프로파일에 설정한다.

  • DOS나 Windows98, Windows NT/2000의 경우

    <autoexec.bat> 파일에 등록하거나, [시작] > [제어판] > [시스템 등록 정보] > [고급] > [환경변수]에서 설정한다.

    <autoexe.bat>

    set TMAX_HOST_ADDR = 192.168.0.1
    set TMAX_HOST_PORT = 8888
    set TMAX_CONNECT_TIMEOUT = 3
    set SDLFILE = /home/tmax/sample/sdl/tmax.sdl
    set FDLFILE = /home/tmax/sample/sdl/tmax.fdl
    set TMAX_DEBUG = /home/tmax/sample/client/clidebug

클라이언트의 환경변수는 다음과 같이 텍스트 파일로 등록했다가 필요할 때 해당 파일을 참조하여 사용할 수 있다.

<tmax.env>

[TEST]
TMAX_HOST_ADDR = 192.168.0.1
TMAX_HOST_PORT = 8888
TMAX_CONNECT_TIMEOUT = 3
SDLFILE = /home/tmax/sample/sdl/tmax.sdl
FDLFILE = /home/tmax/sample/sdl/tmax.fdl
ULOGPFX = /home/tmax/testlog
TMAX_DEBUG = /home/tmax/sample/client/clidebug

[REAL]
TMAX_HOST_ADDR = 192.168.0.2
TMAX_HOST_PORT = 1234
TMAX_CONNECT_TIMEOUT = 3
SDLFILE = /home/tmax/sample/sdl/tmax.sdl
FDLFILE = /home/tmax/sample/sdl/tmax.fdl
ULOGPFX = /home/tmax/reallog
TMAX_DEBUG = /home/tmax/sample/client/clidebug

참고

클라이언트의 환경변수 설정에 대한 자세한 내용은 Tmax 안내서 중 Tmax Reference Guide”의 “3.1.20. tmaxreadenv”를 참고한다.

2.4. 다수의 서버 정보 등록

이전 버전에서 하나의 클라이언트는 하나의 서버에만 접속할 수 있었으나, Tmax 3.12.2 버전에서부터 클라이언트가 랜덤하게 서버를 선택하여 접속함으로써 부하 분산이 가능하도록 기능이 추가되었다. 다수의 서버를 사용하는 경우 TMAX_HOST_ADDR 환경변수를 설정한다.

다수의 서버 정보를 등록하는 방법은 다음과 같다.

  • IPv4

    TMAX_HOST_ADDR = (host_address:portno|host_address2:portno2),
                     host_address3:portno3,host_address4:portno4
  • IPv6

    TMAX_HOST_ADDR = ([host_address]:portno|[host_address2]:portno2),
                     [host_address3]:portno3,[host_address4]:portno4

콤마(,)로 구분된 것은 앞에서부터 순서대로 백업 관계이다. 먼저 'host_address:portno|host_address2:portno2'에 연결을 시도하여 실패하면 'host_address3:portno3'로 연결을 시도하고 해당 서버도 실패하면 'host_address4:portno4'에 연결을 시도한다.

괄호 안의 파이프 기호(|)로 연결된 것은 서로 Load balancing 관계이다. Load balancing 관계에 있는 서버는 클라이언트에서 랜덤하게 하나의 서버를 선택하여 연결을 시도하며, 연결이 실패하는 경우 Load balancing 관계에 있는 다른 서버에 차례대로 연결을 시도한 후, 백업으로 지정된 서버에 연결을 시도한다.

다음은 TMAX_HOST_ADDR 설정에 대한 설명이다.

  • TMAX_HOST_ADDR에 설정하는 길이는 최대 255Byte이다.

  • TMAX_HOST_ADDR에 지정된 주소로 모두 연결이 실패하는 경우 TMAX_BACKUP_ADDR 환경변수에 지정된 주소로 접속을 시도한다.

  • TMAX_HOST_ADDR 환경변수의 값에는 공백이 없어야 한다.

  • 셸에서 export나 setenv로 환경변수를 지정하는 경우에는 괄호나 파이프 기호(|)를 셸이 별도로 처리하기 때문에 큰 따옴표(")를 사용해야 한다.

사용 예제

다음은 서버 정보를 등록하는 방법을 비교하는 예제이다.

  • 기존의 방식대로 동작하도록 할 경우

    TMAX_HOST_ADDR = 192.1.1.1
    TMAX_HOST_PORT = 9000
  • 클라이언트가 랜덤하게 접속하도록 할 경우

    TMAX_HOST_ADDR = (192.1.1.1:9000|192.1.1.2:9001),192.1.1.3:9003,192.1.1.4:9004
  • IPv6 프로토콜 환경에서 클라이언트가 랜덤하게 접속하도록 할 경우

    IPv6 프로토콜 환경에서는 host address와 portno를 구분하기 위해서 대괄호([ ])로 address 부분을 감싸준다.

    TMAX_HOST_ADDR = ([2011::10]:9000|[2011::20]:9001),[2011::100:30]:9003,[2011::100:40]:9004