본 장에서는 FDL의 전반전인 내용에 대해 설명한다.
데이터형과 그 유형에 할당되는 메모리의 양은 각각의 플랫폼마다 다르다. 이러한 메모리 할당 방법의 차이로 인해 같은 데이터형을 사용하더라도 통신 후의 데이터 값은 예상과 다를 수 있다. 일반적으로 서로 다른 플랫폼 간에 데이터 값을 동일하게 인식하기 위해서 사용하는 방법이 데이터를 문자열로 변환하여 통신하는 것인데, 이러한 방식을 이용할 경우 추가로 네트워크의 부하가 발생할 수 있다. Tmax는 이러한 통신 상의 문제를 해결하기 위해 FDL 방식을 제공한다.
FDL은 필드 버퍼라고 하는 저장 구조를 정의하고 조작하는 일련의 C 함수의 집합이다.
FDL 방식은 식별자와 식별자에 대응하는 필드 버퍼에서의 데이터 값이 한 쌍으로 존재하여 서로 다른 종류의 프로세스 간에 데이터를 상호 교환할 수 있도록 구현된다. 따라서 프로세스 간에 데이터 교환은 식별자(identifier)로 하고, 실제 값을 처리할 때에는 그 식별자에 매핑되어 있는 필드 버퍼의 데이터 값이 호출된다.
다음은 본 안내서에서 주로 사용하는 용어에 대한 설명이다.
레코드를 표현하는 방법은 다양하다. 그중에서 C 언어에서 제공되는 데이터 구조체를 사용하여 레코드를 표현하는 방법과 필드 버퍼를 사용하여 레코드를 표현하는 방법을 설명한다.
다음은 C 언어로 작성된 프로그램에서 학생의 ID, 이름, 주소, 나이 및 성별 등의 정보를 포함하기 위해서 구조체를 사용하여 필드를 구성한 예이다.
struct student { long stid; char name[10]; char addr[40]; short age; char sex; } ;
stid는 long형의 변수로 선언되어 있고, name과 addr은 carray형, age는 short 그리고 sex는 char형의 변수로 선언되어 있다.
변수 x를 지정하여 구조체 student를 가리키게 한다면 다음과 같이 표현될 수 있으며 이를 필드의 주소로 사용할 수 있다.
x→stid, x→name, x→addr, x→age, x→sex
구조체를 다른 프로세스에 전달하려면 해당 구조체의 필드 중 사용하지 않는 필드를 포함하여 모든 필드의 데이터를 전달하고 고정된 길이의 레코드로 통신하여야 한다. 또한 구조체 필드의 이름이 바뀌면 해당 구조체의 필드를 사용하는 모든 프로그램을 재컴파일해야 한다.
C 구조체와 다르게 필드 버퍼는 레코드를 필드로 분할하고 레코드의 각 필드간에 연관성있는 접근을 제공하는 데이터 구조이다. 필드명은 필드의 데이터형과 함께 데이터가 저장된 필드키 값을 나타내는 것으로 16자까지 사용할 수 있다.
필드 버퍼의 주된 장점은 데이터의 독립성이다. 해당 필드를 사용하는 모든 프로그램을 재컴파일하지 않고도 필드의 데이터형과 길이를 변경할 수 있을 뿐만 아니라 각 필드의 길이를 가변적으로 사용할 수 있다. C 구조체에서는 사용하지 않는 필드도 함께 전체 구조체를 전송해야 하지만, 필드 버퍼 방식은 실제 사용하는 필드의 값만 전송할 수 있다. 필드 버퍼의 각 필드는 데이터 유형과 유일한 식별번호의 조합으로 구성되는데 정수형의 식별번호를 필드키라고 하며 필드 버퍼는 필드키와 데이터를 한 쌍으로 저장한다.
필드 테이블은 Tmax에서 제공하는 fdlc 유틸리티를 이용하여 일정한 형식에 맞춘 일반 텍스트 파일을 컴파일하여 만든다.
다음은 필드 유형과 유일한 번호가 정의된 demo.f라는 사용자 정의 파일의 예로 이 파일의 형식만 Tmax에서 사용할 수 있다.
# name | number | type | flags | comments |
---|---|---|---|---|
*base | 100 | |||
INPUT | 101 | string | - | - |
OUTPUT | 102 | string | - | - |
SEQNO | 201 | string | - | - |
CORPNO | 202 | string | - | - |
COMPDATE | 203 | string | - | - |
TOTMON | 204 | long | - | - |
GUARAT | 205 | float | - | - |
GUAMON | 206 | float | - | - |
T_BITMAP | 900 | carray | - | - |
FILENAME | 901 | string | - | - |
NEWFILE | 902 | string | - | - |
*base | 1000 | |||
data1 | 301 | long | - | - |
data2 | 302 | long | - | - |
data3 | 303 | long | - | - |
sumdata | 304 | long | - | - |
data4 | 305 | long | - | - |
필드 테이블의 'name', 'number', 'type'은 반드시 정의해야 한다.
필드값 | 설명 |
---|---|
name | 최대 48자 이하로 정의된 필드 이름으로 fbget_fldkey()의 파라미터로 사용하여 필드 식별자를 얻어오는 기능을 한다. |
number | type과 조합되어 필드 식별자를 만드는데 사용되는 번호이다. number와 type을 조합하여 필드 식별자를 만드는데, type은 유일할 수 없으므로 반드시 number는 모든 필드 테이블에서 유일한 번호이어야 한다. 위의 demo.f 예제에서 ‘*base 번호’는 base가 쓰인 이후의 number에 대한 base가 되는 것으로 실제로 INPUT의 number를 201이라고 쓴 것과 같은 역할을 한다. 이 base는 또 다른 base가 나오기 전까지 유효하다. |
type | 해당 필드의 필드형을 설정한다. 사용할 수 있는 필드형은 char, short, int, long, float, double, string, carray로 총 8가지이다. |
필드키 테이블을 컴파일하는 명령어이다. 필드키 방식은 클라이언트/서버간 데이터 통신에서 구조체를 전송하는 방법처럼 전체 구조체의 항목을 전달하지 않고 필요한 항목만 전달한다. 항목 전달을 위해서는 각각의 항목을 구별할 수 있는 유일한 키가 있어야 한다. fdlc는 텍스트 형태로 정의된 필드키 테이블을 컴파일하여 필드키를 생성하는 명령어이다.
사용방법
$ fdlc ( -c ) {- a|c|d|u} [-f] [-h 헤더 파일 이름] { -i 필드키 테이블 파일 이름 } [-jc|ji] [-o 결과물 이름] [-u] [-p 패키지 이름] [-x] [-V]
항목 | 설명 |
---|---|
[ -a ] | 생성된 이진 형태의 파일에, 텍스트로 작성된 필드키 테이블을 컴파일하여 필요한 부분을 추가하는 옵션이다. [-f] 옵션을 사용하여 대상 파일을 지정하며 기본 파일은 tmax.fdl 이다. 중복되는 필드의 경우에 대해서는 새로운 값으로 대체된다. |
[ -c ] | 텍스트로 작성된 필드키 테이블을 컴파일하여 이진 형태의 파일을 만든다. 이미 이진 파일이 존재하면 새 내용을 대체한다. (기본값) |
[ -d ] | 생성된 이진 형태의 파일에, 텍스트로 작성된 필드키 테이블을 컴파일하여 필요한 부분을 삭제한다. [-f] 옵션을 사용하여 대상 파일을 지정하며 기본 파일은 tmax.fdl 이다. |
[ -u ] | 생성된 이진 형태의 파일에, 텍스트로 작성된 필드키 테이블을 컴파일하여 필요한 부분을 정정하거나 추가하는 옵션이다. [-f] 옵션을 사용하여 대상 파일을 지정하며 기본 파일은 tmax.fdl 이다. |
[ -f ] | 텍스트로 작성된 필드키 테이블을 컴파일하여 필요한 부분을 추가, 수정 삭제하는 경우 대상 파일을 지정하는 옵션이다. |
[ -h 헤더 파일 이름 ] | 헤더 파일 이름을 다른 이름으로 변경하고자 할 때 사용하는 옵션이다. [-h] 옵션 없이 컴파일하면 fdl 헤더 파일 이름은 필드키 테이블 이름_fdl.h 이다. |
{ -i 필드키 테이블 파일 이름 } | 클라이언트 프로그램과 서버 프로그램에서 사용될 필드키 테이블을 정의한 파일을 지정한다. 필수 옵션이며 경로와 함께 지정할 수 있다. |
[ -ji|jc ] | WebT에서 사용하는 옵션으로 생성될 필드 정의 클래스의 형태를 지정한다.
|
[ -o 결과물 ] | 컴파일 결과물을 다른 이름으로 변경하고자 할 때 사용하는 옵션이다. [-o] 옵션 없이 컴파일하면 fdl 파일의 이름은 tmax.fdl 이다. |
[ -p패키지 이름 ] | WebT에서 사용되는 옵션으로 생성된 필드 정의 클래스의 패키지 이름을 주어진 값으로 설정한다. |
[ -x ] | 반드시 [-a] 옵션과 함께 사용되어야 하며 이 옵션이 사용되는 경우에는 중복되는 필드에 대해서 원본 값을 유지한다. |
[-V] | 실행 파일의 버전을 확인할 수 있다. |
다음은 [ -ji|jc ] 옵션을 설정해서 생성한 Java 파일의 예이다.
<demo.f>
#demo.f #name number type flags comments INPUT 101 string - - OUTPUT 102 string - -
$> fdlc -c -i demo.f -ji -jc webtdemo
다음은 생성된 demo_fdl.java의 내용이다.
package webtdemo; public interface demo_fdl { public int INPUT = (469762149); /* number: 101 type: string */ public int OUTPUT = (469762150); /* number: 102 type: string */ }
다음은 현재 디렉터리에 있는 demo.f 필드키 테이블 파일을 fdlc 유틸리티로 컴파일하는 명령이다. 컴파일 후 tmax.fdl과 demo_fdl.h 파일이 생성된다. demo_fdl.h는 필드키가 정의된 헤더 파일이다.
$fdlc -c -i demo.f
demo.f를 fdlc 유틸리티를 사용하여 컴파일하면 demo_fdl.h와 tmax.fdl이라는 파일이 기본적으로 생성된다. 여기에서 생성되는 파일 이름을 변경하고 싶다면 다음과 같이 [-o] 옵션을 사용하여 원하는 파일 이름으로 이진 파일을 생성할 수 있다.
$fdlc -c -i demo.f -o filename.fdl
생성되는 파일은 클라이언트와 서버가 필드 버퍼를 사용하여 통신하는 경우 참조(프로그램과 함께 컴파일됨)되어 원하는 데이터형의 필드를 사용할 수 있다. 필드 버퍼를 사용할 때는 반드시 환경변수인 FDLFILE에 filename.fdl의 위치를 다음과 같이 정의한다. 여기에서 filename.fdl이란, fdlc 유틸리티로 생성된 이진 파일을 의미한다. 기본값인 tmax.fdl이나, [-o] 옵션을 지정하여 생성한 이진 파일을 입력한다.
FDLFILE=/home/tmax/sample/fdl/filename.fdl
1. 필드 테이블을 사용할 때 필드키는 반드시 도메인 내에서 유일해야 한다.
2. fdlc 유틸리티에 대한 자세한 내용은 "Tmax Reference Guide"를 참고한다.