내용 목차
본 장에서는 TDL(Tmax Dynamic Library)의 개요 및 특징에 대해서 설명한다.
TDL(Tmax Dynamic Library)은 OS에서 제공하는 동적 라이브러리 링킹(Dynamic Library Linking) 기법을 이용하여 변경이 빈번한 업무 모듈에 대해 운영 중단 없는 업데이트를 제공한다.
이러한 동적 업무 모듈들은 공유 라이브러리 형태로 빌드되어야 하며, TDL 관리 툴을 이용하여 업데이트할 때 버전이 부여되어 구버전과 신버전이 동시 사용될 수 있는 환경을 조성한다. 개발자는 tdlcall() 함수를 통해 모듈을 호출해야 하며, 기본적으로 tdlcall()은 가장 최신 버전의 모듈을 사용하여 운영 중단 없이 자연스럽게 구버전에서 신버전으로 전환이 일어나게 된다.
TDL은 다음과 같은 특징을 갖는다.
공유 메모리를 이용한 버전 정보를 관리한다.
TDL은 각 라이브러리의 버전에 대한 정보를 유지해야 하며 Tmax 서버나 클라이언트 프로그램에서 tdlcall()을 할 때 이 정보를 사용해야 하므로 공유 메모리에 버전 정보를 저장한다. 따라서 Tmax 클라이언트의 경우에는 반드시 로컬에서만 사용 가능하며, $TDLDIR 환경변수를 반드시 지정해주어야 한다.
버전 정합성을 지원한다.
TDL은 운영 중에 모듈을 업데이트하므로 일시적으로 구버전과 신버전이 동시에 사용될 수 있다. 트랜잭션으로 묶인 업무나 배치 업무 등은 같은 버전의 모듈을 사용해야 한다. 이를 위해서 TDL은 버전 정합성을 지원한다. 버전 정합성에는 명시적 버전 정합성(Explicit Version Consistency)과 암시적 버전 정합성(Implicit Version Consistency)이 있다.
재귀 호출의 경우 모듈의 정합성을 보장한다.
사용자가 모듈을 재귀적으로 호출할 경우 함수 호출이 완료되기 전에 모듈 업데이트가 실행되는 것을 방지해야 한다. 이를 위해 모듈은 레퍼런스 카운트를 가지고 있어서 해당하는 모듈이 호출될 때마다 증가하고, 호출이 완료되면 감소한다. 레퍼런스 카운트가 0이 아닌 경우 모듈이 업데이트되거나 메모리에서 해제되는 것을 방지한다.
다양한 관리 툴을 지원한다.
TDL 초기화 및 업데이트, 공유 메모리 버전 정보 및 상태, 통계 정보 조회, 구버전 파일 삭제 등을 위해 관리 툴을 지원한다. 관리 툴에 대한 자세한 내용은 “2.3. 시스템 관리 툴”을 참조한다.
에러 로깅 및 백업 지원을 지원한다.
관리 툴 및 API를 사용할 때 발생한 에러 및 정보에 대한 로깅을 남길수 있다. 에러 로깅은 TDL 환경 파일($TMAXDIR/config/tdl.cfg)의 LOGDIR 파라미터를 설정한다.
공유 메모리에 대한 파일 백업을 지원하여 장비 장애 및 재시작의 경우 백업 파일로부터 로딩이 가능하다. 백업 파일 지정은 TDL 환경 파일($TMAXDIR/config/tdl.cfg)의 BACKUP 파라미터를 설정한다.
멀티 노드 환경을 지원한다.
TDL은 기본적으로 TMAX 멀티 노드 환경을 지원한다. 단, 여러 노드 중 단 하나의 마스터(master) 노드가 존재해야 하며, 나머지는 슬레이브(slave) 노드로 지정해야 한다. 초기화 및 업데이트 툴 등은 마스터 노드에서만 실행 가능하며 조회성 툴 등은 슬레이브 노드에서도 실행 가능하다.
멀티 노드 환경을 사용하려면 모든 노드가 TDL 환경을 구성해야 하며, 만일 TDL 환경을 사용하지 않는 노드가 있다면 TDL 환경 파일($TMAXDIR/config/tdl.cfg)의 RACFILE 파라미터를 지정해야 한다.
멀티 노드를 사용할 경우는 반드시 모든 노드에 racd를 기동해야 한다. racd 에 대한 설명은 "Tmax Administration Guide"를 참조한다.
TDL 도메인을 지원한다.
TDL에서는 TMAX 도메인 여러 개를 하나의 TDL 도메인으로 설정할 수 있다. 이것은 TDL 모듈이 도메인을 넘어서 공통적으로 사용되어야 하는 환경일 경우에 필요하다. 단, TDL 도메인을 사용하려면 racd를 사용해야 하므로 TDL 환경 파일($TMAXDIR/config/tdl.cfg)의 DOMAINID와 RACFILE 파라미터를 지정해야 한다.
특히, DOMAINID는 TDL 도메인이 다를 경우 반드시 다르게 지정해야 한다. 기본적으로 DOMAINID 값을 설정하지 않을 경우 0으로 자동 설정된다. TDL 도메인을 사용할 경우에도 반드시 모든 노드에 racd를 기동해야 한다.
TDL 도메인과 라이브러리 버전 정합성은 밀접한 관계를 가진다. 명시적 버전 정합성의 경우는 TDL 도메인 내에서만 보장된다. 암시적 버전 정합성은 TDL 도메인이 다를 경우 자동적으로 도메인별로 정합성을 유지해 준다.