본문 바로가기
프로그래밍/RM-COBOL

[COBOL 기초] 프로그램 코드로 쉽게 이해하는 코볼(COBOL)의 구조와 칼럼 규칙

by 오!쎈세! 2026. 6. 22.

90년대 공부했던 프로그래밍 언어중 하나가 RM-COBOL 이며, 옛 기억을 정리해본다. 

 

1. 4대 DIVISION (디비전)의 핵심 용도
코볼 프로그램은 반드시 아래 4가지 디비전이 순서대로 존재해야 동작한다.

 

      디비전 이름               용도 (한 줄 요약)            주요 역할

1. IDENTIFICATION 프로그램 신분증 프로그램 이름, 작성자, 작성일 등 메타데이터를 기록하는 필수 영역
2. ENVIRONMENT 하드웨어 및 파일 연결 프로그램이 실행될 컴퓨터 환경과 사용할 외부 파일의 물리적 경로 매칭
3. DATA 기억 장소 및 변수 정의 프로그램 안에서 쓸 모든 변수, 상수, 파일 레코드 구조를 선언하는 영역
4. PROCEDURE 실행 명령 및 로직 데이터를 가공하고 계산(MOVE, IF 등)하는 실제 비즈니스 로직 구현부

 

2. 주요 SECTION (섹션)의 핵심 용도
디비전 내부에서 데이터를 세분화하여 관리하는 구역이다.
📂 ENVIRONMENT DIVISION 소속 섹션
  • CONFIGURATION SECTION: 프로그램이 컴파일되고 실행될 컴퓨터 하드웨어 환경(소스/목적 컴퓨터 종류)을 지정한다.
  • INPUT-OUTPUT SECTION: 외부 저장장치(디스크 등)와 프로그램 간의 데이터 통로를 개설한다. (하위에 파일명을 지정하는 FILE-CONTROL 문단이 위치함)
💾 DATA DIVISION 소속 섹션
  • FILE SECTION: 외부 파일(TXT, DAT 등)에서 읽어온 데이터가 프로그램 내부에 어떤 구조(레코드 타입, 바이트 수)로 담길지 정의한다.
  • WORKING-STORAGE SECTION: 프로그램 실행 중 메모리에 독립적으로 띄워놓고 사용하는 일반 변수와 고정 상수들을 선언한다. (가장 많이 사용됨)
  • LINKAGE SECTION: 메인 프로그램이 서브(Sub) 프로그램을 호출할 때, 서로 주고받는 파라미터(데이터)가 위치할 임시 연결 공간을 정의한다.
⚙️ PROCEDURE DIVISION 소속 섹션
  • 사용자 정의 SECTION: 개발자가 복잡한 로직을 기능별, 모듈별로 쪼개어 관리하기 위해 임의로 이름을 붙여 만드는 구역이다. (예: MAIN-LOGIC SECTION., OUTPUT-REPORT SECTION.)

 

코볼 소스코드는 가로 1~80번 까지 용도가 정해져 있으며 임의로 사용시 오류(Syntax Error)가 발생한다.

1~6번 줄번호 기재하는 곳 

7번 주석문(*)이나 줄 바꿈 문자 등을 표시하는 곳

8~11번 DIVISION, SECTION 등을 시작하는 곳 (A 영역)

12~72번 실행 명령문, 레벨 번호 02~49 변수 등을 시작 하는 곳 (B 영역)

73~80번 프로그램 식별용 공간으로 보통 비워두는 곳

아래 붉은색과 검은색으로 번갈아가며 기재한 것은 컬럼 번호고, 아래 기재된 코드들은 컬럼 번호에 맞춰서 입력한 사례다.

*12345678901234567890123456789012345678901234567890123456789012345678901234567890

*-----------------------------------------------------------------------

 000100 IDENTIFICATION DIVISION.
 000200 PROGRAM-ID. COLUMNS-DEMO.
 000300
 000400 ENVIRONMENT DIVISION.
 000500 CONFIGURATION SECTION.
 000600
 000700 DATA DIVISION.
 000800 WORKING-STORAGE SECTION.
 000900* ----------------------------------------------------------------
 001000* [A 영역(8칸)] 디비전, 섹션, 최상위 레벨 01 변수는 8번째 칸부터 시작!
 001100* ----------------------------------------------------------------
 001200 01  USER-RECORD.
 001300*    [B 영역(12칸)] 하위 레벨 변수(02~49)는 12번째 칸부터 시작!
 001400     05  USER-NAME       PIC X(10) VALUE "KIM".
 001500     05  USER-AGE        PIC 9(02) VALUE 28.
 001600
 001700 PROCEDURE DIVISION.
 001800* ----------------------------------------------------------------
 001900* [A 영역(8칸)] 절(Section) 및 문단(Paragraph) 이름은 8번째 칸!
 002000* ----------------------------------------------------------------
 002100 MAIN-PROCEDURE SECTION.
 002200 A000-START.
 002300*    [B 영역(12칸)] 실제 실행 구문(명령어)은 반드시 12번째 칸부터 시작!
 002400     DISPLAY "--- COBOL COLUMN SYSTEM ---".
 002500     DISPLAY "NAME: " USER-NAME.
 002600     DISPLAY "AGE : " USER-AGE.
 002700     
 002800     STOP RUN.

7번째 칸의 용도: 7번째 칸에 Asterisk(*)를 입력하면 해당 줄 전체가 주석(Comment) 처리. 만약 하이픈(-)을 넣으면 앞 줄에서 못다 한 문자열 상수를 이어서 쓰겠다는 뜻이다.

마침표(.)의 중요성: 코볼은 디비전, 섹션, 문단, 그리고 명령문의 끝에 마침표(.)를 찍어야 한다. 마침표 역시 칼럼 영역 안(보통 B 영역 마지막)에 완벽하게 위치해야 에러가 나지 않는다.

금지된 예약어: 예를 들어 데이터 구조를 짤 때 01 DATA PIC X(10). 이나 01 COUNT PIC 9(03). 처럼 DATA, COUNT, DATE, KEY 같은 단어를 변수명으로 단독 사용하면 컴파일러가 인식하지 못한다.

따라서 IN-DATA, USER-COUNT 처럼 접두사나 접미사를 붙여서 명명해야 오류가 발생하지 않는다.

작업줄 엄수: 코드는 72줄을 넘어가면 73줄부터 코드가 잘린다.