 |
|
난이도 : 초급 Srinivasan R. Mottupalli, Senior Software Engineer, IBM Gagan Maheshwari, Technical Lead, IBM Vishwas T. Mahadevaiah, Software Engineer, IBM
원문 게재일 : 2009 년 2 월 12 일 번역 게재일 : 2009 년 3 월 03 일 IBM® Informix® 4GL 함수를 웹 서비스로 전개하는 방법을 소개합니다. 사용자 인터페이스 도구인 'w4gl'과
'w4gl'에서 사용되는 백엔드 도구인 'w4glc'에 대한 개요도 제공합니다.
Informix 4GL
Informix 4GL(또는 I4GL)은 프로그래밍 언어에서 Informix 데이터베이스 서버와
상호 작용하는 데 사용되며 관계형 데이터베이스 애플리케이션을 손쉽게 개발할 수 있도록 폼 및
보고서 언어를 비롯한 다양한 기능을 갖춘 환경을 제공한다.
I4GL은 4GL 애플리케이션을 C 언어뿐
아니라 나중에 실행 프로그램을 사용하여 실행할 수 있는 기계 독립적 p 코드로도 변환할 수 있는
컴파일러를 지원한다. 4GL에 대한 자세한 정보는 4GL Reference Manual을 참조한다.
웹 서비스와 SOA(Service-Oriented Architecture)
SOA(Service-Oriented Architecture)는 시스템 개발 및 통합에 필요한 방법을
제공하는 아키텍처 스타일로 다양한 애플리케이션의 상호 데이터 교환을 지원한다. SOA의 목표는 운영
체제, 프로그래밍 언어 및 기본 애플리케이션 관련 기술 등에 대한 서비스의 의존성을 낮추는 것이다. 웹
서비스는 플랫폼 및 프로그래밍 언어와는 별개로 액세스할 수 있는 판매 가능한 함수이다. 이러한
함수는 일련의 입력을 받아서 일련의 출력을 반환하는 방식으로 특정 작업을 수행한다. 예를 들어,
신용카드 확인 서비스를 여러 써드파티에서 제공하는 경우, 고객이 이러한 서비스를 사용할 때마다
지불해야 하는 약간의 비용이 발생한다. 회사는 SOA를 사용하여 복잡한 과정 없이 비즈니스
프로세스를 제공업체, 벤더 및 기타 비즈니스 파트너와 연결하는 간단한 작업만 수행하면 된다.
SOA 환경에서의 I4GL
Informix 4GL의 강력한 언어 지원을 사용하면 데이터베이스에 액세스하는 SQL 문을
임베드하는 작업과 관련된 비즈니스 로직과 사용자 인터페이스를 쉽게 구현할 수 있다. 많은 Informix
고객이 I4GL을 프론트엔드 도구로 사용하여 데이터베이스 애플리케이션을 작성하고 있다. 이들
애플리케이션에는 대화식 기능과 비즈니스 로직이 모두 들어 있으며 그러한 비즈니스 로직은
일반적으로 다른 많은 애플리케이션에서 사용할 수 있다. I4GL 함수를 웹 서비스로 전개할 때 SOA는
I4GL의 디자인을 보완한다.
그림 1에서는 I4GL-SOA의 아키텍처 개요를 보여 준다.
그림 1. I4GL-SOA의 아키텍처 개요
I4GL은 4GL 애플리케이션을 C 프로그램으로 변환한 후, 다른 C 프로그램과 연결할
수 있는 방식으로 디자인되었다. 마찬가지로 I4GL 함수도 C 애플리케이션에서 API를 통해 호출할
수 있다. 이러한 유연성이 뒷받침 되기 때문에 Apache의 AXIS2 C Web service API를 통해 4GL
함수를 웹 서비스로 전개하고 사용할 수 있는 것이다.
4GL 함수를 웹 서비스로 사용하거나 전개하기 위해 I4GL은 대화식 도구인 'w4gl'을
제공한다. 이 도구는 필요한 사용자 입력을 받아서 데이터베이스에 기록한 후, 필요한 정보를 비대화식
도구인 'w4glc'에게 전달한다. w4glc는 요청된 작업을 수행할 수 있는 PERL 스크립트이다. 이 도구는
W4GL을 통해 수집된 정보를 저장하기 위해 데이터베이스를 관리하므로 필요에 따라 서비스를 재생성하여
전개 또는 사용할 수 있다.
서비스 공급자로서의 I4GL
웹 서비스로 전개할 4GL 함수가 지정되면 W4GL이 필요한 기본 폼, 헤더 및 랩퍼
파일을 자동으로 생성한다. 사용자는 구성 파일을 사용하여 웹 서비스 스펙을 제공해야 한다.
4GL-SOA의 아키텍처
그림 2에서는 SOA 환경에서 사용되는 4GL의 구조를 보여 준다. 사용자 인터페이스인
w4gl은 사용자로부터 웹 서비스 정의를 받아서 구성 파일을 생성한다. 백엔드 PERL 스크립트인 "w4glc"는
이 구성 파일을 참조하여 코드를 생성한 후, 구성 파일의 지시 사항에 따라 웹 서비스를 전개하거나
사용할 환경을 제공한다.
그림 2. 4GL SOA 아키텍처
선수조건
- Informix 4GL 7.50.xC2(현재는 Linux® 플랫폼에서만 지원된다. 이는 주로 AXIS2C를 다른 플랫폼에서 사용할 수 없기 때문이다.)
- JRE 1.4.2 이상
- AXIS2C 1.5(4GL 7.50.xC2 이상에 포함되어 있다.)
- PERL 도구
- IDS 9 이상(XPS가 지원할 수 있어야 한다.)
프로그램 디자인 데이터베이스
프로그램 디자인 데이터베이스는 I4GL의 새로운 컴포넌트가 아니다. 이 데이터베이스에는
I4GL 도구에서 사용되는 몇 가지 특별한 테이블이 들어 있다.
W4GL 도구에서도 특수 테이블을 저장하기 위해 I4GL과 같은 데이터베이스를
사용한다. 이들 테이블에는 웹 서비스 및 해당 정의와 관련된 w4gl의 사용자 입력이 들어
있으며, 테이블에 저장된 사용자 입력은 나중에 웹 서비스를 생성할 때 사용된다.
기본적으로 프로그램 디자인 데이터베이스의 이름은 "syspgm4gl"이지만 환경 변수
PROGRAM_DESIGN_DBS를 사용하여 필요한 데이터베이스 이름을 제공할
수 있다. 이 환경 변수에 지정된 이름이 우선적으로 사용된다. 데이터베이스 디자인은 아래와 같이
지정된다.
예:
export PROGRAM_DESIGN_DBS=mydb |
그림 3. 프로그램 디자인 데이터베이스
구성 파일
구성 파일에는 특정 웹 서비스에 대한 스펙이 들어 있다. w4glc 도구는 이 파일을 사용하여 코드를 생성하고 요청된 작업(예: 전개 또는 패키징)을 수행한다.
이 구성 파일은 W4GL 도구에 의해 생성되며, .4cf라는 확장자를 가지고 있다.
이 구성 파일의 매개변수는 프로그램 디자인 데이터베이스를 읽어서 채워진다(Listing 1의
샘플 구성 파일 참조).
모든 매개변수 값은 구성 파일을 생성하기 전에 W4GL 도구를 통해 채워진다. 전개
요청이 발생하면 이 구성 파일이 PERL 스크립트(w4glc)로 전달되면서 지정된 4GL 함수가 웹 서비스로
전개된다.
이들 데이터는 프로그램 디자인 데이터베이스에 저장되어 있기 때문에 필요할 때마다
구성 파일을 재생성하여 전개 작업을 다시 수행할 수 있다. 이 기능은 웹 서버를 관리할 때 특히 유용하다.
Listing 1에서는 W4GL에서 생성된 샘플 구성 파일을 보여 준다.
Listing 1. 구성 파일
[SERVICE]
TYPE=publisher
INFORMIXDIR=/tools_4xpm/sqldist
DATABASE=i4glsoa
CLIENT_LOCALE=en_us.utf8
DB_LOCALE=en_us.utf8
I4GLVERSION=7.50.xC2
WSHOME=/work/axisdist
WSVERSION=AXIS2C
TMPDIR= /tmp/w4gl
PORTNO= 9090
INFORMIXSERVER = ids_11.50
INFORMIXSQLHOSTS = /work/env/sqlhosts
SERVICENAME= ws_visa_valid
[FUNCTION]
NAME= validate_visa_card
INPUT= CHAR(16), CHAR(5), CHAR(3)
OUTPUT= CHAR(8)
[END-FUNCTION]
[DIRECTORY]
NAME= /work/4glApp
FILE= visaverify.4gl
[END-DIRECTORY]
[END-SERVICE]
|
구성 파일의 매개변수를 살펴보자.
-
[SERVICE] … [END-SERVICE]: 이 블록에는
단일 함수를 웹 서비스로 전개하는 데 필요한 모든 매개변수가 들어 있다.
-
TYPE: 작업 유형을 결정한다. 가능한 값은 'publisher' 또는 'consumer'이다.
-
DATABASE: 4GL 함수에서 사용할 데이터베이스의 이름이다.
-
I4GLVERSION: 감사에 사용할 4GL의 버전이다.
-
WSHOME: 웹 서비스 설치 디렉토리의 경로이다.
-
WSVERSION: 감사에 사용할 웹 서버의 버전이다.
-
TMPDIR: 생성된 중간 파일을 유지할 임시 작업 디렉토리이다.
-
PORTNO: AXIS 서버에서 수신할 포트 번호이다.
-
SERVICENAME: 게시할 서비스의 이름을 나타낸다.
-
[FUNCTION] … [END-FUNCTION]: 이 블록에는 전개 중인 함수의 세부 사항이 들어 있다.
-
NAME: 4GL 함수의 이름이다.
-
INPUT: 이 4GL 함수에 대한 입력 인수의
데이터 유형이다. 함수 정의에 따라 왼쪽에서 오른쪽으로 1:1로 대응되어야 하고 인수의 수가 일치해야 한다.
-
OUTPUT: 이 4GL 함수에서 반환되는 결과의 데이터
유형이다. 함수 정의에 따라 왼쪽에서 오른쪽으로 1:1로 대응되어야 하고 인수의 수가 일치해야 한다.
-
[DIRECTORY] … [END-DIRECTORY]: 이 블록에는
웹 서비스를 전개할 때 컴파일해야 하는 파일과 함께 제공되어야 하는 오브젝트의 목록이 들어 있다.
-
NAME: 소스 파일(4gl, C 또는 ESQL/C 파일)이 있는 절대 디렉토리 경로이다.
-
FILE: 위 디렉토리 아래에 있는 파일(4gl, C 또는 ESQL/C 파일)의 이름이다.
-
CLIENT_LOCALE: 4GL의 로케일을 나타낸다.
-
DB_LOCALE: 데이터베이스의 로케일을 나타낸다.
-
INFORMIXSERVER: Informix Server의 이름이다.
-
INFORMIXSQLHOSTS: Informix sqlhosts 파일의 절대 경로이다.
PERL 스크립트
$INFORMIXDIR/bin 디렉토리에 있는 Perl 스크립트(w4glc)는 W4GL 도구의 화면
뒤에서 실제로 작업을 수행하는 비대화식 프로그램이다. 고유한 구성 파일을 작성할 수 있는
사용자라면 이 프로그램을 개별적으로 사용할 수도 있다. 하지만 전개된 웹 서비스에 문제가
발생하거나 웹 서비스를 마이그레이션할 경우, 같은 구성 파일을 재생성하여 다시 전개할 수
있으므로 프로그램 디자인 데이터베이스를 채우고 W4GL 도구를 사용하여 구성 파일을 생성하는
것이 좋다.
Listing 2. 구문
w4glc { [-help] [-version] | [-silent] [-force] [-check] [-generate]
[-compile] [-deploy] [-package] } <cfgfile> |
참고: w4glc에는 이들 옵션 외에도 사용과 관련된 여러 옵션이 있지만 이 기사의 범위를 벗어나므로 설명하지 않는다.
-
silent - 이 옵션을 지정하면 컴파일러의 모든 메시지가 표시되지 않는다.
-
force - 자동으로 재사용할 수 있는 기존 파일
또는 디렉토리가 있는 경우, 이 옵션을 지정하면 해당 파일이나 디렉토리가 자동으로 재사용된다.
-
check - 이 옵션은 제공된 구성 파일에 대한
기본적인 온전성 검사를 수행한다. 이 검사는 소스 파일과 디렉토리가 있는지 확인하고 환경이
적절하게 설정되어 있는지 검사한다.
-
generate - 이 옵션은 구성 파일에 지정된 TYPE에
따라 코드(전개 또는 사용)를 생성한다. 이러한 파일은 제안된 웹 서비스를 지원하는 데 필요하다.
-
compile - 이 옵션은 생성된 모든 파일을 컴파일하고
오브젝트 파일을 만든다. 쉽게 전개할 수 있는 공유 오브젝트도 생성한다.
-
deploy - 이 옵션은 필요한 오브젝트와 파일을
웹 서비스 디렉토리에 복사한다. 웹 서버를 다시 시작하면 이 디렉토리가 참조되면서 새로 전개된
웹 서비스가 인식된다.
-
package - 이 옵션을 사용하면 나중에 프로덕션
시스템에 전개할 때 사용할 자원을 개발 시스템에서 미리 준비해 놓을 수 있다. 파일들이 압축된
tar 파일(gzip 또는 bzip2)이나 zip 파일로 패키징되므로 나중에 압축 파일을 새 시스템으로 복사할
수 있다.
W4GL 도구
Informix 4GL로 작성된 W4GL 도구는 프로그램 디자인 데이터베이스의 데이터를
관리하는 데 사용되며 서비스를 다른 시스템(구성과 플랫폼이 동일한 경우)으로 가져가기 위해
웹 서비스를 패키징할 수 있는 옵션도 제공한다. 여기에서 핵심은 데이터베이스에 있는 데이터를
사용할 수 있기 때문에 다양한 플랫폼에서 W4GL을 사용하여 동일한 서비스를 생성할 수 있다는
것이다.
그림 4. W4GL 도구의 계층적 메뉴 레이아웃
웹 서비스 정보 채우기
대화식 W4GL 도구를 사용하여 웹 서비스 정보를 데이터베이스에 채울 수 있다. 이
도구에는 구성 파일을 생성하여 웹 서비스로 전개하는 데 사용되는 인터페이스도 있다. 웹 서비스를
추가하기 전에 서비스를 전개할 애플리케이션 서버와 이 애플리케이션 서버의 호스트 이름을 추가해야
한다.
호스트 이름 추가
Listing 3과 같이 애플리케이션 서버가 실행 중인
호스트 이름과 서비스를 전개할 위치를 추가해야 한다. 호스트 이름은 DNS 이름이나 IP 주소일
수 있다. 웹 서비스의 중간 파일을 생성할 임시 디렉토리의 절대 경로도 제공해야 한다. Esc
키를 누르면 변경 사항이 커미트되고 시스템 ID가 자동으로 생성된다.
Listing 3. 호스트 이름 추가
+------------------------------------------------------------------------------+
|HOST NAME: Query Next Previous Add Modify Remove Exit |
|See existing Host name details. |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
| |
| HOST INFORMATION |
| |
| Machine ID [ 3] |
| Host Name [service.server.test.com ] |
| Temporary Directory [/tmp/w4gl ] |
| [ ] |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| A new host name was added. |
+------------------------------------------------------------------------------+
|
애플리케이션 서버 추가
애플리케이션 서버 세부 사항에도 적합한 환경과 앞에서 추가했던 애플리케이션
서버가 실행 중인 호스트 이름을 입력해야 한다.
웹 서비스 추가
Listing 4에서는 "ws_visa_valid"라는 새 웹 서비스를
추가하는 방법을 보여 준다. 이 화면에서는 웹 서비스로 전개할 4GL 함수의 이름, 입력 매개변수,
출력 매개변수, 이 4GL 함수에 필요한 파일 등의 필요한 웹 서비스 정보를 모두 받는다. 세부
사항을 모두 입력한 후, exit 옵션을 실행하면 변경 사항의 저장 여부를
묻는 메시지가 표시된다.
Listing 4. 웹 서비스 추가
+------------------------------------------------------------------------------+
|ADD: Detail Input Output File Exit |
|Add the files associated with this web service. |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
| Service ID [ 2] |
| Service Name [ws_visa_valid ] |
| Function Name [validate_visa_card ] |
| Notes [ ] |
| [ ] |
| [ ] |
| [ ] |
| [ 3] Input parameters [ 1] Output parameters |
| [ 1][CHAR(16) ][ 1][CHAR(8) ] |
| [ 2][CHAR(5) ][ ][ ] |
| [ 3][CHAR(3) ][ ][ ] |
| [ ][ ][ ][ ] |
| [ ][ ][ ][ ] |
| [ ][ ][ ][ ] |
| [ ][ ][ ][ ] |
| [ ][ ][ ][ ] |
| |
| 1 output parameters added. |
+------------------------------------------------------------------------------+
|
이 예제에서는 입력 매개변수가 3개이고 출력 매개변수가 1개인 "ws_visa_valid"라는
웹 서비스를 추가했다.
구성 파일 생성
웹 서비스 정보를 추가한 후에는 웹 서비스를 전개하기 위해 구성 파일을 생성해야
한다. 이러한 세부 사항은 모두 팝업 창을 활성화하여 검색할 수 있다.
Listing 5. 구성 파일 생성
+------------------------------------------------------------------------------+
|INSTALL: Generate Deploy Package Exit |
|Generate the configuration file for a web service. |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
| |
| GENERATE CONFIGURATION |
| |
| Service ID [ 2] Machine ID [ 3] Server ID [ 0] Database ID [ 1] |
| |
| Service Name [ws_visa_valid ] |
| Host Name [service.server.test.com ] |
| Temp Directory [/tmp/w4gl ] |
| [ ] |
| App-Server Name [axis_server ] |
| Port Number [ 9090] |
| Database Name [i4glsoa ] |
| |
| |
| |
| |
| |
| Ctrl+B = List of Web services. Press Esc to Accept or Ctrl+C to Cancel. |
+------------------------------------------------------------------------------+
|
4GL 함수 전개
마스터 세부 사항과 웹 서비스 정보를 모두 설정하고 구성 파일을
생성한 후, deploy 옵션을 실행하면 필요한 웹 서비스를
전개할 수 있다.
Listing 6과 같이 앞에서 생성한 구성 파일을 사용하여 웹 서비스를 전개한다.
Listing 6. 웹 서비스 전개
+------------------------------------------------------------------------------+
|INSTALL: Generate Deploy Package Exit |
|Deploy the web service. |
+------------------------------------------------------------------------------+
| |
| CONFIGURATION TO DEPLOY |
| |
| File Name [ws_visa_valid_ service.server.test.com.4cf ] |
| |
| |
| |
| |
| |
| |
| |
| Configuration file ws_visa_valid_ service.server.test.com.4cf deployed |
| |
+------------------------------------------------------------------------------+
|
전개한 후에는 웹 서비스를 다시 시작해야만 다른 애플리케이션에서 새로 전개된
서비스를 사용할 수 있다.
전개된 4GL 함수를 웹 서비스로 사용
전개된 웹 서비스는 Java™, C, PHP 및 기타 최신 언어로 작성된 애플리케이션에서
사용할 수 있다. 4GL 7.50.xC2에는 C 인터페이스를 통해 웹 서비스를 이용하는 데모 프로그램인
"i4glsoademo"가 포함되어 있다. 환경을 설정한 다음 "i4glsoademo" 프로그램을 호출하면,
웹 서비스로 전개된 4GL 함수에 우편 번호를 전달하여 해당하는 도시와 주를 검색할 수 있다.
웹 서비스 패키징
package 옵션을 사용하면 동일한 운영 체제와 구성을 갖고 있는 여러
호스트에 웹 서비스를 간편하게 마이그레이션할 수 있다. 이 옵션은 웹 서비스 이름을
입력으로 받은 후, 해당 웹 서비스를 배포 가능한 파일로 패키징한다.
Listing 7. 웹 서비스 패키징
+------------------------------------------------------------------------------+
|INSTALL: Generate Deploy Package Exit |
|Package the web service. |
+------------------------------------------------------------------------------+
| |
| SERVICE NAME TO PACKAGE |
| |
| Service Name [ws_visa_valid ] |
| |
| |
| |
| |
| |
| |
| |
| The web service has been successfully packaged. |
| |
+------------------------------------------------------------------------------+
|
웹 서비스로서의 저장 프로시저
4GL 함수를 웹 서비스로 사용할 수 있듯이 저장 프로시저도 4GL 함수를 통해 웹 서비스로 사용할 수 있다. Listing 8에서는 그 예제를 보여 준다.
Listing 8. 저장 프로시저
CREATE FUNCTION LOG10(val INTEGER)
DEFINE retval DECIMAL(16,10);
CALL SPL_LOGN(val, 10) RETURNING retval;
RETURN retval;
END FUNCTION
|
제한 사항
- 현재까지는 Linux 플랫폼에서만 사용할 수 있지만 나중에는 다른 플랫폼에서도 사용할 수 있게 될 것이다.
- 4GL에서 지원되는 복합 데이터 유형(예: RECORD 및 BLOB)은 아직까지 서비스로 전개할 수 없다.
결론
기존 4GL 함수를 웹 서비스로 사용할 수 있기 때문에 최신 언어에서도 기존 4GL
함수를 사용할 수 있는 가능성이 높아졌다. 기존 Informix 4GL 고객은 예전처럼 4GL을 사용하여
간편하게 코드를 작성할 수 있을 뿐만 아니라 웹 애플리케이션을 지원하기 위해 선택한 언어에서도
웹 서비스에 액세스하여 4GL 함수를 사용할 수 있다. 4GL 코드 내에서도 웹 서비스를 사용하여
다른 언어로 코딩된 기존 웹 서비스를 활용할 수 있다.
참고자료 교육
제품 및 기술 얻기
- developerWorks에서 직접 다운로드할 수 있는 IBM 평가판 소프트웨어를 사용하여 차기 개발 프로젝트를 구현해 보자.
토론
필자소개  | 
|  | Srinivasan R. Mottupalli는 벵갈로르에 있는 IBM, ISL에서 선임 소프트웨어 엔지니어로 근무하고 있으며 디자인 및 개발 엔지니어로서 IDS, XPS(Extended Parallel Server) 및 I4GL(Informix 4GL) 관련 업무를 맡고 있다. |
 | 
|  | Gagan Maheshwari는 IBM의 기술 팀장이다. 디자인 및 개발 엔지니어로서 IDS 및 I4GL(Informix 4GL) 관련 업무를 맡고 있다. |
 | 
|  | Vishwas T Mahadevaiah는 1년 6개월 동안 IBM-IDS 팀에서 소프트웨어 엔지니어로 근무하고 있다. Vishwas는 Informix 4GL용 UTF8 및 SOA 지원을 구현하는 업무에 참여했으며 DRDA 관련 릴리스에도 참여하고 있다. |
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|