애플리케이션 마이그레이션

본 장에서는 OpenFrame XSP 혹은 MSP 환경으로 AIM 온라인 애플리케이션을 마이그레이션하는 방법과 일반적인 Batch 애플리케이션을 마이그레이션하는 방법에 대해 기술한다.

1. 애플리케이션 마이그레이션을 위한 준비

OpenFrame/AIM 환경에서 구동되는 애플리케이션은 통신과 데이터베이스 기능을 간단한 API를 통해 이용할 수 있다. 통신과 데이터베이스 기능을 이용하기 위해서는 애플리케이션 프로그램의 작성 외에 다음과 같은 준비작업이 필요하다.

  1. PSAM 맵으로부터 데이터 스키마 생성

    단말과 통신하는 데이터의 형식을 PSAM 맵으로부터 생성한다.

  2. 서브 스키마로부터 데이터 스키마 생성

    NDB로 읽고 쓰는 데이터의 형식을 ADL의 서브 스키마로부터 생성한다.

EBCDIC 문자를 ASCII로 변환하는 과정 및 변환할 때 발생하는 문제점에 대한 자세한 내용은 EBCDIC에서 ASCII로 변환EBCDIC에서 ASCII 변환 이슈를 참고한다.

1.1. PSAM 맵으로부터 데이터 스키마 생성

PSAM 맵은 단말의 화면에 기본적으로 표시하는 내용과 애플리케이션에서 화면에 출력하는 내용, 그리고 단말에서 입력을 받아 애플리케이션으로 전달하는 내용을 모두 정의한다. 하지만 PSAM 맵은 일반적인 프로그래밍 언어가 아니라 애플리케이션 작성자는 PSAM 맵을 그대로 사용할 수는 없다.

애플리케이션 작성자가 단말로부터 입출력하는 형식을 애플리케이션에 직접 작성하게 되면 이후 유지보수의 문제가 발생할 수 있다. 화면을 수정하면 애플리케이션도 함께 수정해야 하는 문제가 발생한다.

AIM에서는 PSAM 맵으로부터 입출력 데이터 양식을 COBOL 문법으로 만들어내는 기능을 제공한다. 애플리케이션 작성자는 이 양식을 애플리케이션 내에 Copybook의 형태로 포함하기만 하면 된다.

다음은 PSAM 맵으로부터 입출력 데이터 양식을 만들어내는 툴인 jybfg000의 사용방법과 예제이다.

Usage: jybfg000 [OPTION]... FILE
    -h     : display this help and exit
    -d     : enable debug mode in jybfg000
    -p     : preview generated FID
    -v     : variable length record format
    -l     : record length (only for fixed length record. default:80)

Examples:
$ jybfg000 OIVPFID0.fmt

 *  copybook :
   [/home/openframe/cobcpy/mapcpy/MENUREC.cbl] create.
 *  binary image :
   [/home/openframe/psambin/OIVPFID0.BIN] create.

jybfg000는 PSAM 맵의 컴파일과 Copybook 생성을 동시에 한다. Copybook은 해당 PSAM 맵 내에서 지정한 레코드의 이름으로 생성하게 된다. Copybook의 생성은 aim 설정에서 PSAM 섹션의 PSAMCPY 키에 지정한 위치에 생성된다.

  1. PSAMCPY의 내용은 COBOL 컴파일러에서 Copybook의 위치를 지정하는 환경변수에도 동일하게 추가해야 한다.

  2. jybfg000 툴에 대한 더 자세한 정보는 OpenFrame AIM "툴 참조 안내서"를 참고한다.

1.2. ADL 서브 스키마로부터 데이터 스키마 생성

AIM 애플리케이션에서 사용하는 데이터베이스는 ADL의 서브 스키마를 통해 정의한다.

서브 스키마에는 레코드 간의 관계 뿐 아니라 개별 레코드의 정의도 기술한다. 애플리케이션에서 각 레코드의 개별 필드에 접근하기 위해서는 이 레코드 정의가 필요하다. OpenFrame/NDB에서는 서브 스키마로부터 간단하게 데이터 구조를 추출하여 COBOL의 문법으로 출력하는 subsc 툴을 제공한다.

다음은 subsc의 사용방법과 예제이다.

$ subsc -h
== Subschema Copybook Generator ===
Usage: subsc subschema_name ...
Example: subsc SUBS4160

$ subsc SUBS0001
 * subschema copybook
   [/home/openframe/cobcpy/copy/SUBS0001.cbl] create.
subschema copybook generation success (SUBS0001)

Copybook은 OpenFrame 환경설정의 ndb 서브젝트에 META 섹션의 SUBSCPY 키에 지정한 위치에 생성된다.

  1. SUBSCPY의 내용은 COBOL 컴파일러에서 Copybook의 위치를 지정하는 환경변수에도 동일하게 추가해야 한다.

  2. subsc 툴에 대한 더 자세한 정보는 OpenFrame NDB "툴 참조 안내서"를 참고한다.

2. 애플리케이션 전처리와 컴파일

애플리케이션을 OpenFrame에서 실행하기 위해서는 실행 환경에 맞는 전처리와 컴파일 과정이 필요하다.

2.1. 전처리

Mainframe에서 실행하던 애플리케이션 프로그램은 다음의 이유로 인해 OpenFrame 환경에서 바로 실행할 수 없다.

  1. 컴파일 오류

    오픈 환경에서 지원하지 않는 문법이나 기능을 사용하는 경우 컴파일 단계에서 오류가 발생한다. 대표적으로 NDB를 사용하는 구문을 들 수 있다. 이런 경우 전처리 과정에서 경우에 따라 다른 구문으로 치환하거나 불필요한 경우 삭제한다.

  2. 환경 오류

    Mainframe과의 컴파일과 실행 환경이 달라 발생하는 오류이다. 서브스키마에서 추출한 NDB의 레코드 구조에 대한 기술이 별도로 없는 것을 예로 들 수 있다. 전처리 과정에서 구문을 치환하거나 필요한 내용을 추가한다.

  3. 실행 오류

    문법상으로 동일하지만 실제 실행 결과가 다른 오류가 발생한다. ENVIRONMENT DIVISION에서 선언하는 SPECIAL-NAMES 구문을 예로 들 수 있다. 이 경우는 전처리 과정에서 해당 구문을 OpenFrame에서 제공하는 것으로 치환한다.

OpenFrame에서는 OpenFrame COBOL 제품에 포함된 ofcbppf 툴을 사용하여 전처리를 수행한다. ofcbppf 툴에 대한 자세한 내용은 OpenFrame COBOL "사용자 안내서"를 참고한다.

2.2. 컴파일

OpenFrame에서는 현재 전처리 툴만을 지원하고 있다. ofcbppf를 통하여 전처리 과정을 거친 애플리케이션 프로그램 소스는 COBOL 컴파일러를 사용하여 공유 개체(shared object)로 만든다. 기존 애플리케이션 프로그램의 COBOL 문법 특성에 맞춰 옵션을 적용한다.

컴파일러의 공유 개체(shared object) 작성에 대한 자세한 내용은 내용은 COBOL 컴파일러 공급업체의 안내서를 참고한다.

3. 애플리케이션 배포

컴파일을 성공적으로 마친 애플리케이션을 실행하기 위해서는 프로그램을 OpenFrame에서 찾을 수 있는 위치에 배포해야 한다. 실행할 프로그램의 위치는 모두 JOB을 실행하는 JCL 내에서 지정한다.

OpenFrame에서 애플리케이션은 아래의 FD 문이나 DD 문을 참고해서 찾는다.

FD 설명

PRGLIB FD

XSP JCL의 경우 PRGLIB FD나 MSP JCL인 경우 JOBLIB 혹은 STEPLIB DD를 통해 애플리케이션이 위치한 라이브러리 데이터셋을 지정할 수 있다.