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

[COBOL 기초] 대량 데이터 정렬(SORT)과 병합(MERGE) 처리를 위한 COBOL code 작성법

by 오!쎈세! 2026. 6. 22.
외부 파일에서 읽어온 뒤죽박죽인 대용량 데이터를 특정 키(Key) 값 기준으로 순서대로 나열하는 SORT 구문과, 이미 정렬된 두 개의 파일을 하나로 합치는 MERGE 구문의 실무 작성법을 알아본다.
🟦 1. 정렬용 특수 작업 파일 선언 (ENV & DATA DIVISION)
코볼에서 정렬을 수행하려면 메모리나 디스크 상에 임시로 데이터를 올려두고 나열할 정렬용 특수 파일(SD: Sort Description)을 선언해 주어야 한다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
       IDENTIFICATION DIVISION.
       PROGRAM-ID.  SORT-MERGE-DEMO.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
*          -------------------------------------------------------------
*          [장치 연결] 원본 파일, 결과 파일, 그리고 정렬용 작업 파일 매핑 (B영역)
*          -------------------------------------------------------------
           SELECT UN-SORT-FILE ASSIGN TO "unsorted.txt".
           SELECT SORTED-FILE  ASSIGN TO "sorted.txt".
           SELECT WORK-FILE    ASSIGN TO "sortwork.tmp".

       DATA DIVISION.
       FILE SECTION.
       FD  UN-SORT-FILE.
       01  UN-SORT-REC         PIC X(20).

       FD  SORTED-FILE.
       01  SORTED-REC          PIC X(20).

*      =================================================================
*      [정렬 파일 정의] FD가 아닌 SD 구문을 사용하며 A영역(8칸)에서 시작함
*      =================================================================
       SD  WORK-FILE.
       01  WORK-RECORD.
*          [B영역] 정렬의 기준(Key)이 될 학번 또는 사원번호 공간 정의
           05  SRT-KEY-ID      PIC 9(05).
*          [B영역] 나머지 잔여 데이터 공간 정의
           05  SRT-DATA        PIC X(15).
 
 

🟩 2. SORT 구문을 활용한 고속 정렬 실행 (PROCEDURE DIVISION)
정렬 명령 한 줄로 원본 파일을 읽어 작업 파일에서 나열한 뒤, 최종 파일에 저장하는 전 과정을 컴퓨터가 자동으로 처리해 준다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
       PROCEDURE DIVISION.
       MAIN-LOGIC SECTION.
       A000-START.
           DISPLAY "--- SORT PROCESS START ---".

*          -------------------------------------------------------------
*          [COBOL code 정렬 명령] 원본을 읽어 학번 오름차순으로 정렬 후 저장함
*          -------------------------------------------------------------
           SORT WORK-FILE
               ON ASCENDING KEY SRT-KEY-ID
               USING UN-SORT-FILE
               GIVING SORTED-FILE.
*          -> ASCENDING: 오름차순 (작은 값 -> 큰 값 순 정렬)
*          -> DESCENDING 구문을 쓰면 내림차순 정렬로 변경됨.
*          -> USING에 원본 파일을, GIVING에 최종 결과 파일을 지정함.
*          -> ⚠️ 주의: SORT 구문은 내부에서 OPEN/CLOSE를 자동 수행하므로 별도로 열면 안 됨.

           DISPLAY "--- SORT PROCESS END ---".
           STOP RUN.
 
 

💡 [실무 팁] 정렬(SORT)과 병합(MERGE)의 결정적 차이점
두 구문은 문법 구조가 매우 유사하여 초보 개발자들이 혼동하기 쉽지만, 내부 메커니즘과 목적이 완전히 다름.
  • SORT (정렬)
    • 조건: 원본 파일의 데이터가 어떤 순서로 꼬여있든 상관없음.
    • 역할: 뒤죽박죽인 무작위 파일을 넘겨받아 처음부터 끝까지 재배치하여 완벽한 순서로 나열해 줌.
  • MERGE (병합)
    • 조건: 합치고자 하는 두 개 이상의 원본 파일들이 이미 사전에 동일한 키 값으로 정렬되어 있어야만 함.
    • 역할: 이미 정렬된 A파일과 B파일을 셔플 하듯 순서에 맞춰 지퍼처럼 맞물려 하나의 파일로 합쳐주는 역할임. 만약 정렬되지 않은 파일을 MERGE하면 정렬 순서가 완전히 깨지는 치명적인 데이터 오류가 발생함.
  • MERGE 구문 예시
    cobol code
               MERGE WORK-FILE
                   ON ASCENDING KEY SRT-KEY-ID
                   USING SORTED-FILE-A SORTED-FILE-B
                   GIVING MERGED-TOTAL-FILE.