애플리케이션
본 장에서는 COBOL 프로그램의 기본 구조를 알아보고, COBOL을 이용하여 기술하는 내용에 대하여 설명한다.
1. COBOL 프로그램의 구성
업무를 구성하는 애플리케이션은 COBOL, PL/I, Assembly 등의 언어를 사용하여 작성될 수 있다. Mainframe의 업무 프로그램은 대다수 COBOL로 작성되어 있으며 OpenFrame AIM은 COBOL로 작성된 애플리케이션의 실행을 지원한다.
OpenFrame AIM은 표준인 COBOL-85의 문법을 기본으로 하며, 사용자가 OpenFrame AIM의 기능을 쉽게 이용하게 하기 위한 추가 문법을 지원한다. 일반 범용 COBOL 컴파일러에서 컴파일 될 수 있도록 전처리를 수행하는 프로그램이 제공되어 별도의 수정작업 없이 사용할 수 있다.
COBOL 프로그램은 다음과 같은 구조를 갖는다.
COBOL은 4개의 부(Division)로 프로그램을 구성하며, 부에 대한 종류와 설명은 다음과 같다.
-
표제 부(Identification Division)
프로그램의 시작을 나타내며, 프로그램의 이름 등 프로그램을 식별할 수 있는 내용을 기술한다.
Program-ID는 반드시 기술해야 하며, 애플리케이션에서 호출 시 해당 이름을 참고하므로 다른 Program-ID와 중복되거나 잘못 작성되지 않도록 주의한다.
-
환경 부(Environment Division)
프로그램 컴파일 및 실행을 위한 환경을 정의하는 구성 절(configuration section)과 입출력 파일의 정보를 정의하는 입출력 절(input-output section)을 기술한다.
-
데이터 부(Data Division)
프로그램에서 사용하는 데이터를 정의한다.
다음의 영역으로 구성된다.
영역 설명 file section
파일을 구성하는 레코드의 정보를 기술하는 파일 영역이다.
working-storage section
프로그램 수행에 필요한 기억장소를 기술하는 작업 장소 영역이다.
linkage section
부프로그램(sub-program)으로 호출될 때 사용되는 매개변수를 기술하는 영역이다.
-
수속 부(Procedure Division)
프로그램의 동작을 위한 문장을 기술한다. 수속 부의 앞부분에는 선언부분(declaratives)을 기술할 수 있다.
2. COBOL 프로그램의 기술 형식
포맷 정의 소스와 같이COBOL 프로그램도 레코드의 형식에 따라 고정형 레코드와 가변형 레코드가 있다.
다음은 고정형 레코드와 가변형 레코드의 COBOL 프로그램 기술 형식을 보여주는 그림이다.
다음은 COBOL 프로그램의 기술 형식에 대한 설명이다.
-
일련 번호 영역(Sequence number area)
프로그램 소스의 행을 구분하는 번호를 기술한다.
-
표지 영역(Indicator area)
표지 영역에는 다음의 문자가 올 수 있다.
문자 설명 공백
A영역, B영역의 기술의 시작을 의미한다.
*
주석으로 처리된다.
/
페이지를 변경한 후 주석으로 처리된다.
-
이전 행에 계속되는 행의 연결을 의미한다.
-
A영역
A영역에서 시작하는 기술에는 다음과 같은 것이 있다.
-
Division, Section, Paragraph
-
레벨 지시(Level indicator) FD, SD
-
레벨 번호 01, 77
-
Declaratives, End declaratives
-
End program
-
-
B영역
B영역에서 시작하는 기술에는 다음과 같은 것이 있다.
-
Sentence
-
기술항
-
3. COBOL 프로그램의 기술 내용
이 절에서는 COBOL 프로그램을 작성하여 사용할 수 있는 기능을 설명한다.
3.1. 표준 기능
표준 기능은 COBOL 프로그램 언어 사양에 해당되는 것이다.
-
기본 기능
4개의 부(Division)으로 이루어진 기본 구조를 지원한다. 데이터 처리를 위해 변수를 정의하고 사용하는 기능을 제공한다.
-
파일 입출력 기능
순서 파일, 상대 파일, 색인 파일의 입출력을 지원하며, 파일의 구성에 따라 다양한 접근 방법이 존재한다.
-
프로그램간 호출 기능
하나의 프로그램에서 다른 프로그램을 호출하여 실행할 수 있으며, 호출 된 프로그램 사이의 데이터 공유가 가능하다.
-
정렬 병합 기능
파일내의 레코드의 순서를 정렬, 둘 이상의 파일 레코드를 병합할 수 있다.
-
원본 소스 조작
원본 소스 프로그램의 컴파일 과정에서 소스의 삽입 및 치환을 할 수 있다.
-
보고서 기능
보고서 작성을 쉽고 표준화된 형식으로 작성할 수 있는 기능을 제공한다.
3.2. 확장 기능
확장 기능은 COBOL 프로그램 언어에서 확장된 기능으로 다음과 같은 기능이 이에 해당한다.
-
일본어 처리
일본어 프로그래밍 및 일본어 데이터 처리를 할 수 있다. 일본어 데이터에 대한 처리를 위하여 ADJUST(Advanced Japanese User Support Software)에서 제공하는 코드 변환 기능을 사용한다.
-
비트 조작 기능
내부 Boolean 항목, 외부 Boolean 항목, Boolean 정수, Boolean 연산을 지원하며, 비트 항목의 자료 처리가 가능하다.
3.3. 시스템 기능
시스템 기능은 COBOL이 사용할 수 있는 인터페이스를 말하며 해당 인터페이스를 통해 OpenFrame AIM의 기능을 사용할 수 있다. COBOL 프로그램에서 사용할 수 있는 OpenFrame AIM 기능은 다음과 같다.
-
통신을 위한 가상 파일 인터페이스
외부 단말 또는 애플리케이션 간의 통신을 지원하기 위한 가상의 통신 파일을 정의하고, 통신 파일에 대해 입출력을 지시함으로써 통신을 할 수 있다. 통신 파일은 정의 형태에 따라 표시 파일과 메시지 파일이 있다. 프로그램은 통신 파일을 사용하여 다양한 장치에 레코드를 표시 또는 인쇄할 수 있고 프로그램 사이의 통신을 할 수 있다.
-
관계형 데이터베이스
관계형 데이터베이스를 사용할 수 있는 인터페이스를 통하여 데이터를 사용할 수 있다. SQL을 사용하거나 색인 파일의 입출력 방식을 이용한다.
-
네트워크 데이터베이스
네트워크 데이터베이스를 사용할 수 있는 인터페이스를 통하여 데이터를 사용할 수 있다. 네트워크 데이터베이스의 데이터를 처리하기 위한 조작언어를 이용한다.
-
시스템 정보 획득 기능
데이터베이스 시스템이나 통신 관리 시스템 등의 여러 가지 시스템 제어 정보를 참조할 수 있는 기능을 제공한다. 다른 프로그램으로 확장된 영역 또는 복수의 프로그램에서 공통적으로 사용하는 영역을 포인터를 이용하여 참조할 수 있다.
-
트랜잭션 관리
트랜잭션의 개시, 종료, 중지 명령을 내릴 수 있다. 또한 데드락이 발생하였을 때 실행해야 할 수속을 선언부분에 지정하여 교착상태(Deadlock) 처리를 할 수 있다.
4. COBOL 프로그램 관련 리소스
COBOL 프로그램에서 COPY문 또는 INCLUDE문을 사용하여 외부 파일의 내용을 내부로 복사하여 사용할 수 있다. 이러한 외부 파일을 Copybook이라 한다. 사용하는 Copybook은 해당 COBOL 프로그램 컴파일 시에 지정된 COPY 라이브러리에 위치해 있어야 한다. Copybook은 기존의 것을 그대로 쓸 수도 있고 새로 작성될 수 있다.
Copybook은 작성 목적에 따라 다음과 같이 3가지로 나눌 수 있다.
-
사용자 Copybook
사용자가 직접 작성한 Copybook을 의미한다. 사용자 Copybook에는 데이터 정의 및 프로그램 코드를 기입할 수 있으며 매크로처럼 간주된다. OpenFrame AIM에서는 기존에 사용하던 Copybook을 별도의 수정 없이 그대로 사용한다.
-
포맷 정의 Copybook
화면이나 장표와 같은 포맷 정의체를 사용할 경우에는 데이터 입출력을 위한 레코드가 필요하다. 이 레코드 정보를 별도의 파일에 기입한 것이 포맷 정의 Copybook이다. 포맷 정의 Copybook은 포맷 정의 소스에서 추출되며, OpenFrame AIM이 제공하는 jybfg000 툴을 사용하여 생성한다.
-
서브 스키마 Copybook
네트워크 데이터베이스를 사용하는 경우에는 데이터 입출력을 위한 레코드가 필요하다. 레코드 정보는 ADL의 SCHEMA 커맨드와 SUBSCHEMA 커맨드에서 정의되며, 정의된 레코드 정보를 별도의 파일에 기입한 것이 서브 스키마 Copybook이다. OpenFrame NDB에서 제공하는 subsc 툴을 사용하여 생성한다. 서브 스키마 Copybook은 기존 시스템에서는 존재하지 않는 리소스이다.