소개

본 장에서는 FDL의 전반전인 내용에 대해 설명한다.

1. 개요

데이터형과 그 유형에 할당되는 메모리의 양은 각각의 플랫폼마다 다르다. 이러한 메모리 할당 방법의 차이로 인해 같은 데이터형을 사용하더라도 통신 후의 데이터 값은 예상과 다를 수 있다. 일반적으로 서로 다른 플랫폼 간에 데이터 값을 동일하게 인식하기 위해서 사용하는 방법이 데이터를 문자열로 변환하여 통신하는 것인데, 이러한 방식을 이용할 경우 추가로 네트워크의 부하가 발생할 수 있다. Tmax는 이러한 통신 상의 문제를 해결하기 위해 FDL 방식을 제공한다.

FDL은 필드 버퍼라고 하는 저장 구조를 정의하고 조작하는 일련의 C 함수의 집합이다. FDL 방식은 식별자와 식별자에 대응하는 필드 버퍼에서의 데이터 값이 한 쌍으로 존재하여 서로 다른 종류의 프로세스 간에 데이터를 상호 교환할 수 있도록 구현된다. 따라서 프로세스 간에 데이터 교환은 식별자(identifier)로 하고, 실제 값을 처리할 때에는 그 식별자에 매핑되어 있는 필드 버퍼의 데이터 값이 호출된다.

다음은 본 안내서에서 주로 사용하는 용어에 대한 설명이다.

용어 설명

필드 키(fieldkey)

필드 식별자 FDL 레코드나 필드 버퍼 내에서 독립적인 데이터 항목에 대한 태그이다.

필드 버퍼(fieldbuffer)

데이터와 데이터를 식별하는 필드 키를 보관하는 버퍼이다.

필드형(fieldtype)

표준 C(ANSI C)에서 제공하는 short, integer, long, float, double, char 형 등 어느 것이든 가능하다. 또한 Tmax에서는 string과 carray 형을 지원한다.

필드 순번

필드를 조작 및 처리하는데 있어 필드 키 버퍼 내에서 동일한 필드 키가 여러 번 반복해서 나타날 경우 지정하는 인덱스이다.

2. C 구조체와 필드 버퍼

레코드를 표현하는 방법은 다양하다. 그중에서 C 언어에서 제공되는 데이터 구조체를 사용하여 레코드를 표현하는 방법과 필드 버퍼를 사용하여 레코드를 표현하는 방법을 설명한다.

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 구조체에서는 사용하지 않는 필드도 함께 전체 구조체를 전송해야 하지만, 필드 버퍼 방식은 실제 사용하는 필드의 값만 전송할 수 있다. 필드 버퍼의 각 필드는 데이터 유형과 유일한 식별번호의 조합으로 구성되는데 정수형의 식별번호를 필드 키라고 하며 필드 버퍼는 필드 키와 데이터를 한 쌍으로 저장한다.

3. FDL 테이블 생성

필드 테이블은 Tmax에서 제공하는 fdlc 유틸리티를 이용하여 일정한 형식에 맞춘 일반 텍스트 파일을 컴파일하여 만든다.

3.1. 명령어

다음은 필드 유형과 유일한 번호가 정의된 demo.f라는 사용자 정의 파일의 예로 이 파일의 형식만 Tmax에서 사용할 수 있다.

<demo.f>

#demo.f
#name   number  type    flags   comments
INPUT   101     string  -       -
OUTPUT  102     string  -       -
# 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는 텍스트 형태로 정의된 필드 키 테이블을 컴파일하여 필드 키를 생성하는 명령어이다.

  • 사용 방법

    $ fdlc ( -c ) {- a|c|d|u} [-f] [-h 헤더 파일 이름] {-i 필드 키 테이블 파일 이름}
           [-ji | jc] [-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에서 사용하는 옵션으로 생성될 필드 정의 클래스의 형태를 지정한다.

    • ji : 인터페이스 형태의 필드 정의 클래스 파일을 생성한다.

    • jc : 클래스 형태의 필드 키 정의 Java 파일을 생성한다.

    [-o 결과물 이름]

    컴파일 결과물을 다른 이름으로 변경할 때 사용하는 옵션이다.

    [-o] 옵션 없이 컴파일하면 fdl 파일의 이름은 tmax.fdl이다.

    [-p 패키지 이름]

    WebT에서 사용되는 옵션으로 생성된 필드 정의 클래스의 패키지 이름을 주어진 값으로 설정한다.

    [-x]

    반드시 [-a] 옵션과 함께 사용되어야 하며 이 옵션이 사용되는 경우에는 중복되는 필드에 대해서 원본 값을 유지한다.

    [-V]

    실행 파일의 버전을 확인할 수 있다.

3.2. 예제

다음은 [ -ji|jc ] 옵션을 설정해서 생성한 Java 파일의 예이다.

$> 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. 서버와 클라이언트가 UNIX와 Windows, Intel x86 계열과 같이 다를 경우 바이트 오더링 차이로 문제가 발생할 수 있기 때문에 각각의 플렛폼에서 fdlc를 실행해야 한다.

  3. fdlc 유틸리티에 대한 자세한 내용은 Tmax Reference Guide를 참고한다.