제3장 API

본 장에서는 실제 애플리케이션 개발을 위한 API의 사용법에 대해서 소개한다.

3.1. 개요

TDL API는 Tmax 서버나 클라이언트 라이브러리에 포함되어 있으며, tdlcall.h 헤더 파일을 포함(include)시켜야 한다. Tmax 서버의 경우 TCS와 UCS 타입만 지원하며 클라이언트의 경우 멀티 스레드 라이브러리에서는 지원하지 않는다. 다음은 TDL API의 목록이다.

API설명
tdlcall최신 버전의 동적 모듈 함수를 호출하는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용 가능하다.
tdlcall2최신 버전의 동적 모듈 함수를 호출하는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용 가능하다.
tdlcall2v최신 버전의 동적 모듈 함수를 호출하는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용 가능하다.
tdlcall2s최신 버전의 동적 모듈 함수를 호출하는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용 가능하다.
tdlcallva최신 버전의 동적 모듈 함수를 호출하는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용 가능하다.
tdlcallva2최신 버전의 동적 모듈 함수를 호출하는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용 가능하다.
tdlcreate최신 버전의 동적 모듈에서 Class Factory를 사용하여 클래스 인스턴스를 생성하는 함수로 TDL 환경 파일(tdl.cfg)에 VERSION=4로 설정된 경우 사용 가능하다.
tdldestroy최신 버전의 동적 모듈에서 Class Factory를 사용하여 클래스 인스턴스를 파괴하는 함수로 TDL 환경 파일(tdl.cfg)에 VERSION=4로 설정된 경우 사용 가능하다.
tdlerrortdlcall()에 대한 에러가 발생했을 때 문자열 형태로 변환하는 함수이다.
tdlgetseqnoGlobal Sequence 번호를 가져오는 함수이다.
tdlstart명시적 버전 정합성(Explicit Version Consistency) 유지가 시작된다.
tdlend명시적 버전 정합성(Explicit Version Consistency) 유지가 종료된다.
tdlsuspend일시적으로 버전 정합성 유지를 중지한다.
tdlresume일시적으로 중지된 버전 정합성 유지를 재개하는 함수이다.
tdlclose해당 모듈의 레퍼런스 카운트를 0으로 초기화 하거나 모듈을 직접 메모리에서 해제한다.
tdlload공유 메모리에 모듈을 적재하는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용한다.
tdlload2공유 메모리에 모듈을 적재하는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용한다.
tdlinit공유 메모리를 초기 설정하는 함수이다.
tdldone공유 메모리를 초기화하는 함수이다.
tdlfind모듈의 인덱스를 찾는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용한다.
tdlfind2모듈의 인덱스를 찾는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용한다.
tdlstat

TDL 통계 정보를 출력해주는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용한다.

환경설정에서 MONITOR=Y로 설정해야 한다.

tdlstat2

TDL 통계 정보를 출력해주는 함수로 TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용한다.

환경설정에서 MONITOR=Y로 설정해야 한다.

3.2. tdlcall

최신 버전의 동적 모듈 함수를 호출하는 함수로 동적 모듈 함수는 반드시 long funcname(void *args) 형태의 원형을 가져야 한다. TDL 환경 파일(tdl.cfg)의 VERSION이 1 또는 2로 설정되었을 때 사용 가능하다. 동적 모듈은 최초 tdlcall()될 때 로드되며 특별히 업데이트(tdlupdate)가 되지 않을 경우 재사용하여 성능 저하를 해소한다. 버전 정합성(Version Consistency) 유지 상황에서는 정합성을 반영한 버전이 사용된다.

3.3. tdlcall2

최신 버전의 동적 모듈 함수를 호출하는 함수로 라이브러리명과 함수명을 키로 사용한다. 동적 모듈 함수는 반드시 long funcname(void *args) 형태의 원형을 가져야 한다. 라이브러리명과 함수명을 키로 사용하는 것을 제외하고는 tdlcall() 함수와 동일한 기능을 제공한다.

동적 모듈 함수는 반드시 long funcname(void *args) 형태의 원형을 가져야 한다. TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정되었을 때 사용 가능하다.

3.4. tdlcall2v

최신 버전의 동적 모듈 함수를 호출하는 함수로 라이브러리명과 함수명을 키로 사용한다. 동적 모듈 함수는 반드시 long funcname(int argc, char *argv[]) 형태의 원형을 가져야 한다.

라이브러리명과 함수명을 키로 사용하는 것을 제외하고는 tdlcall() 함수와 동일한 기능을 제공한다. TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정되었을 때 사용 가능하다.

3.5. tdlcall2s

최신 버전의 동적 모듈 함수를 호출하는 함수로 라이브러리명과 함수명을 키로 사용한다. 동적 모듈 함수는 반드시 long funcname(void *input, void *output) 형태의 원형을 가져야 한다.

라이브러리명과 함수명을 키로 사용하는 것을 제외하고는 tdlcall() 함수와 동일한 기능을 제공한다. TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정되었을 때 사용 가능하다.

3.6. tdlcallva

최신 버전의 동적 모듈 함수를 호출하는 함수로 함수명을 키로 사용하는 함수이다. 동적 모듈 함수의 프로토 타입이 고정되지 않은 경우에 대해서 파라미터를 그대로 전달하여 함수를 호출한다. 단, 전달되는 인자들은 모두 (void *) 포인터 타입을 가져야 한다. 동적 모듈 함수에서도 전달받는 파라미터가 모두 (void *) 포인터 타입으로 작성되어야 한다.

TDL 환경 파일(tdl.cfg)에 VERSION=1 또는 VERSION=2로 설정된 경우 사용 가능하다.

3.7. tdlcallva2

최신 버전의 동적 모듈 함수를 호출하는 함수로 라이브러리명과 함수명을 키로 사용하는 함수이다. 동적 모듈 함수의 프로토타입이 고정되지 않은 경우에 대해서 파라미터를 그대로 전달하여 함수를 호출한다. 단, 전달되는 인자들은 모두 (void *) 포인터 타입을 가져야 한다. 동적 모듈 함수에서도 전달받는 파라미터가 모두 (void *) 포인터 타입으로 작성되어야 한다.

라이브러리명과 함수명을 키로 사용하는 것을 제외하고는 tdlcallva() 함수와 동일한 기능을 제공한다. TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정된 경우 사용 가능하다.

3.8. tdlcreate

최신 버전의 동적 모듈에서 Class Factory를 사용하여 클래스 인스턴스를 생성하는 함수로 라이브러리명과 namespace, 클래스명을 키로 사용하고, TDL 환경 파일(tdl.cfg)에 VERSION=4로 설정되었을 때 사용 가능하다.

동적 모듈에서 Class Factory를 사용하기 위해서는 반드시 long tdlcreate_cb(char *namespace, char *classname, void *args, void *object) 형태의 콜백 함수를 구현해야 한다. 콜백 함수에서는 tdlcreate()에서 전달한 파라미터 정보를 이용해서 실제 클래스 인스턴스를 생성하고, 생성된 인스턴스의 레퍼런스를 object로 전달해주도록 사용자가 구현한다.

사용자는 이 함수로 생성한 인스턴스의 사용이 완료되면 반드시 tdldestroy() 함수를 통해서 인스턴스를 파괴해야 한다. tdlcreate()로 생성한 이후 tdldestroy()로 인스턴스를 삭제하기 전에는 tdlupdate가 중간에 호출되어 동적 모듈이 새로운 버전으로 변경되어도 현재 생성되어 사용 중인 인스턴스는 기존의 버전으로 동작한다. 이 경우에는 tdldestroy()를 호출한 뒤에 다시 tdlcreate()를 호출하면 변경된 동적 모듈의 인스턴스가 생성된다.

Class Factory를 사용하기 위해서 동적 모듈은 tdlcreate_cb()와 tdldestroy_cb() 콜백 함수를 구현해야 한다.

3.9. tdldestroy

최신 버전의 동적 모듈에 Class Factory를 사용해서 생성된 클래스 인스턴스를 파괴하는 함수로 라이브러리명과 namespace, 클래스명을 키로 사용하고, TDL 환경 파일(tdl.cfg)에 VERSION=4로 설정되었을 때 사용 가능하다.

동적 모듈에서 Class Factory를 사용하기 위해서는 반드시 long tdldestroy_cb(char *namespace, char *classname, void *args, void *object) 형태의 콜백 함수를 구현해야 한다. 콜백 함수에서는 tdldestroy()에서 전달받은 파라미터 정보를 이용해서 클래스 인스턴스를 파괴하도록 사용자가 구현한다.

사용자는 tdlcreate()로 생성한 인스턴스의 사용이 완료되면 반드시 이 함수를 통해서 인스턴스를 파괴해야 한다. tdlcreate()로 생성한 이후 tdldestroy()로 인스턴스를 삭제하기 전에는 tdlupdate가 중간에 호출되어 동적 모듈이 새로운 버전으로 변경되어도 현재 생성되어 사용 중인 인스턴스는 기존의 버전으로 동작한다. 이 경우에는 tdldestroy()를 호출한 뒤에 다시 tdlcreate()를 호출하면 변경된 동적 모듈의 인스턴스가 생성된다.

3.10. tdlerror

tdlcall()에 대한 에러가 발생했을 때 문자열 형태로 변환하는 함수이다. 직전의 tdlcall() 함수에서 에러가 발생한 경우 에러에 대한 자세한 정보를 문자열 형태로 전달한다. 주의할 점은 반환값으로 전달되는 포인터는 내부의 정적변수에 대한 포인터이므로 다음 tdlcall()을 호출할 경우에 다른 내용으로 채워져 버릴 수 있다는 것이다.

따라서 이 내용을 보관하거나 수정하고 싶으면 다른 변수로 복사를 하여 사용해야 한다.

3.11. tdlgetseqno

Global sequence 번호를 가져오는 함수로 이를 반환값으로 반환한다.

3.12. tdlstart

명시적 버전 정합성(Explicit Version Consistency) 유지가 시작된다.

3.13. tdlend

명시적 버전 정합성(Explicit Version Consistency) 유지가 종료된다.

3.14. tdlsuspend

일시적으로 버전 정합성 유지를 중지한다. sd(suspend descriptor)를 반환값으로 반환하며, 최대 동시 sd 개수는 8이다.

3.15. tdlresume

일시적으로 중지된 버전 정합성 유지를 재개하는 함수이다.

3.16. tdlclose

해당 모듈의 레퍼런스 카운트를 0으로 초기화하거나, 모듈을 직접 메모리에서 해제한다.

3.17. tdlload

tdlcall()을 통해 특정 모듈을 최초로 호출할 경우 공유 메모리의 Hashtable 검색 및 라이브러리의 메모리 적재로 인해 약간의 시간이 소모된다. 이로 인해 최초 호출이 약간 지연되는 현상을 막기 위한 방법으로 Hashtable 검색 및 라이브러리 적재를 tdlcall()을 하기 전에 미리 수행하여 로컬 캐시에 해당 모듈의 정보를 저장하는 함수이다.

TDL 환경 파일(tdl.cfg)에 VERSION=1 또는 VERSION=2로 설정된 경우 tdlload()를 사용하고, VERSION=3일 경우에는 tdlload2(), VERSION=4일 경우에는 tdlload3()을 사용한다.

3.18. tdlload2

tdlload와 동일하므로 자세한 내용은 “3.17. tdlload”를 참고한다.

3.19. tdlinit

공유 메모리를 초기 설정하는 함수이다.

3.20. tdldone

공유 메모리를 초기화하는 함수이다.

3.21. tdlfind

모듈의 인덱스를 찾는 함수이다. TDL 환경 파일(tdl.cfg)에 VERSION=1 또는 VERSION=2로 설정된 경우 사용한다.

3.22. tdlfind2

모듈의 인덱스를 찾는 함수이다. TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용한다.

3.23. tdlstat

TDL 통계 정보를 출력하는 함수이다.

TDL 환경 파일(tdl.cfg)에 VERSION=1 또는 VERSION=2로 설정된 경우 사용하고, 환경설정에서 MONITOR=Y로 설정해야 한다.

3.24. tdlstat2

TDL 통계 정보를 출력하는 함수이다.

TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정된 경우 사용하고, 환경설정에서 MONITOR=Y로 설정해야 한다.