개발자

'여전히 건재한' 코볼이란 무엇인가

Serdar Yegulalp | InfoWorld 2020.05.06
어떤 기술은 결코 죽지 않는다. 드러나지 않을 뿐 여전히 사용된다.
 
ⓒ Getty Images Bank

보편적인 소프트웨어 개발자에게 코볼(Common Business Oriented Language, COBOL)에 대해 물으면 마치 먹지나 유연 휘발유, 분당 회전수 78짜리 레코드 판에 대해 묻기라도 한 듯한 표정으로 쳐다본다. 고(Go)나 파이썬(Python) 같은 현대 언어는 물론 파스칼(Pascal), 심지어 C에 비해서도 코볼은 장황하고 투박하고 시대에 뒤떨어져 보인다.

그러나 코볼의 생명력은 질기다. 코볼은 도태된 기술로 사라지지 않고 굳건히 자리를 지켰다. 세계 곳곳에서 여전히 방대한 코볼 코드베이스가 사용되고, 이 가운데 상당수는 처음에 만들어진 그대로 전혀 변경 없이 실행되고 있다. 영화에 비유하면 개봉 후 오랜 시간이 지난 후에도 좀처럼 극장에서 내려가지 않는 영화와 같다.

결론은 코볼은 건재하다는 것이다. 미국 뉴저지를 포함한 여러 주에서 코볼 애플리케이션을 현대화하는 작업을 이끌 프로그래머 채용 공고를 내면서 최근 코볼에 대한 관심이 되살아나고 있다.

이번 기사에서는 코볼의 기원, 지금까지도 돋보이는 코볼의 설계 특성, 그리고 끈질긴 수명의 원동력이지만 다루기 어려운 이유이기도 한 부분들을 살펴본다.


컴퓨터의 역사와 함께 한 코볼

코볼은 1950년대 후반부터 1960년대 초반 사이에 만들어졌다. 코볼 개발 프로젝트는 미국방성(DoD)의 후원으로 진행됐으며 IBM, 하니웰(Honeywell), 스페리 랜드(Sperry Rand), 버로우(Burroughs)와 같은 기업이 컨소시엄으로 참여했다. 목표는 다음과 같은 특성을 가진 프로그래밍 언어를 만드는 것이었다.
 
  • 하드웨어 세대와 하드웨어 제조업체 간의 용이한 소프트웨어 마이그레이션을 위한 컴퓨터 시스템 간의 이식성(Portability)
  • 작업 속도 측면에서 손해를 보더라도 더 광범위한 프로그래밍 참여를 촉진하기 위해 당시 다른 언어(포트란 등)에 비해 더 영어에 가까운 구문
  • 미래의 변화를 수용할 수 있는 기능

첫 번째 공식 코볼 사양은 1960년에 나왔다. 코볼에 비판적이었던 사람들에겐 실망스럽게도 이후 10년에 걸쳐 코볼은 비즈니스 애플리케이션 개발의 기본 언어로 부상했다. 코볼이 빠르게 확산한 이유 중 하나는 네트워크 효과다. 코볼의 첫 협력업체 가운데 하나인 IBM이 적극적으로 조기 도입에 나선 것이 기폭제가 됐다. 당시 컴퓨팅 업계에서 IBM의 위상이 지배적이었기 때문이다.

코볼은 특정 시스템에 사용하기 위해 만들어진 언어지만 설계상의 이점과 업계의 든든한 후원 덕분에 해당 시스템이 사라진 이후까지, 훨씬 더 오랜 기간 살아남았다. 자료에 따르면 코볼은 1970년에 세계에서 가장 많이 사용되는 언어가 됐다. 1997년에는 비즈니스 앱의 약 80%가 코볼로 실행될 정도였다.


코볼 언어

코볼 설계자들은 당시 포트란과 같은 다른 프로그래밍 언어의 간결한 구문을 버렸다. 이들이 설계 시 염두에 둔 개념은 프로그래머가 아닌 사람들, 특히 회계, 금융, 보험 및 기타 비즈니스 전문가가 읽고 이해할 수 있는 프로그래밍 언어를 만드는 것이었다.

코볼의 초기 구문으로 작성된 다음과 같은 “hello world” 프로그램을 살펴보자.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
 
PROCEDURE DIVISION.
DISPLAY 'Hello World!'.
END-DISPLAY.
STOP RUN.


파이썬과 같은 간결한 언어를 먹고 자란 현대 소프트웨어 개발자가 보기에 장황한 코드다. 그러나 코볼이 가진 장황함의 기원은 파이썬과 같은 현대 언어에 영향을 미친 개념과 동일하다. 코드는 쓰는 횟수보다 읽는 횟수가 훨씬 더 많으므로 읽기 편하도록 써야 한다는 개념이다.

코볼의 더 현대적 버전으로 쓴다면 다음과 같은 형태가 된다.

program-id. hello.
procedure division.
    display "Hello world!".
    stop run.


이 예제가 더 간결하지만 각 단계에서 어떤 일이 일어나는지를 명확히 드러내기 위해 노력한다는 기본 원칙은 동일하다.

코볼에는 구문 및 프로그램의 내부 구성과 관련된 엄격한 규칙이 있다. 코볼 프로그램은 다음과 같은 세션, 또는 디비전으로 명확하게 나뉘기 때문에 한눈에 각 구성요소를 쉽게 찾고 이해할 수 있다.
 
  • 식별 디비전: 기본적으로 메타데이터 세션으로, 프로그램과 작성자 등에 대한 세부 정보를 포함한다.
  • 환경 디비전: 외부 장치의 별칭과 같이 다른 하드웨어에서 프로그램을 실행할 때 편집이 필요할 수 있는 런타임 환경에 대한 세부 정보를 포함한다. 예를 들어 I/O 처리 방식이 상호 전혀 다른 시스템 간의 프로그램 이식성에 도움이 된다.
  • 데이터 디비전: 파일과 작업 스토리지 세션을 포함한다. 데이터 디비전은 프로그램에 사용되는 파일과 변수(각각)를 기술한다.
  • 프로시저 디비전: 실제 프로그램 코드가 위치하는 곳으로 논리적 단위인 세션, 패러그래프, 문장, 문으로 나뉜다. 이 구조는 유사한 기능을 수행하는 모듈이나 함수와 비슷해 보이지만(제한된 입력과 출력으로 코드를 블록으로 나눔) 유연성이 상대적으로 훨씬 더 떨어진다.

또한 코볼은 서식 규칙이 극히 엄격해, 명령 앞의 공백 개수까지 따질 정도다(파이썬 사용자라면 익숙할 것이다). 이와 같은 제약 중 일부는 코볼이 1960년대 메인프레임 시대에 탄생한 데 따른 부산물이다. 당시에는 프로그램이 펀칭 카드에 인코딩됐으므로 정확한 80열 서식이 중요했다. 그 외의 서식 제한은 가독성을 위한 것이다.

코볼 프로그램의 엄격한 규격화는 코드 자체가 최대한 프로그램을 잘 설명하도록 만들기 위한 것이다. 코볼 프로그램은 수년, 수십 년 동안 한 자리에서 사용되는 경우가 흔했다. 설계자들의 의도(또는 최종적인 결과)는 코볼 프로그램은 수년이 지난 후에도 그 프로그램을 만든 프로그래머의 도움 없이 어느 코볼 프로그래머라도 이해할 수 있도록 한다는 것이었다.


코볼의 어려운 점

코볼이 지금까지 계속 사용되는 것은 코볼 애플리케이션은 일단 작성되면 작은 수정만 거치면서 오랜 기간 그 자리에 유지되는 경향이 강하다는 데 기인한다. 앱의 규모가 크고 중요도가 높을수록 손을 대기가 어렵기 때문이다. IBM이 제공했던 것과 같은 메인프레임이 핵심 역할을 했다. 메인프레임은 고도의 하위 호환성을 통해 여러 하드웨어 세대에 걸쳐 최소한의 수정만으로 코볼 앱과 같은 레거시 소프트웨어를 실행하도록 만들어졌다. 그 결과 막대한 분량의 코볼 코드가 수십 년 동안 거의 변경되지 않은 채 계속 실행되고 있는 것이다.

오랜 시간 동안 더디긴 해도 코볼도 발전했다. 지금은 객체 지향 변형인 OO-코볼(OO-COBOL)도 있다. OO-코볼은 유니코드(Unicode), 로캘(locales), 문자열과 정수 이상의 진보된 데이터 형식과 같은 현대적 기능을 지원한다. 그러나 코볼은 하위 호환성을 극성스럽게 유지하므로 이런 개선과 확장도 기존 코볼 애플리케이션이 계속 실행되어야 한다는 원칙을 따른다.

코볼의 언어 설계에는 코볼 프로그래머 사이에서 비판을 받는 부분도 있다. 과도하게 복잡한 프로그램이 되어 알아보지 못하거나 디버그하기가 어려운 나머지 코드 수정이나 개선을 엄두도 내지 못하는 경우도 있다. 코볼의 GO TO 명령은 C 언어의 명령과 마찬가지로 프로그래머가 프로그램 내에서 자유롭게 이동하고 그 결과 더 강력한 애플리케이션을 쓸 수 있게 해준다. 그러나 무분별한 GO TO 사용은 추적하기 어려운 상호 참조가 난무하는 혼란스러운 코볼 프로그램으로 이어질 수 있다.


현대의 코볼 프로그래밍

코볼은 몇 가지 형태로 지금도 사용된다. IBM은 자체 코볼 구현을 적극적으로 관리하며 많은 기존 애플리케이션을 유지하고 있다. 마이크로 포커스 코볼(Micro Focus COBOL)은 마이크로소프트 윈도우에서 실행되는 상용 코볼 에디션으로, 코볼 애플리케이션을 자바와 닷넷으로 컴파일하고 애저와 같은 클라우드 환경에 배포까지 해준다.

또한 Gnu코볼과 같은 코볼의 오픈소스 구현은 무료로 제공되며 네이티브 기계어로 컴파일된다. 다만 상용 코볼에 비해 고급 배포 또는 디버깅 기능은 부족하다.

코볼은 여전히 폭넓게 사용되지만, 심층적인 코볼 지식을 갖춘 전문가를 구하기는 해가 갈수록 어려워지고 있다. 그 결과 오래된 애플리케이션을 21세기 환경으로 가져오기 위해 은퇴한 코볼 프로그래머가 현직으로 복귀하는 경우가 많다.

가장 찾기 어려운 것은 코볼 프로그래밍 지식이 아니라, 코볼이 실행되는 메인프레임 환경에 대한 정통한 지식이다. 많은 코볼 애플리케이션은 IBM의 IMS(Information Management System)나 CICS(Customer Information Control System) 트랜잭션 관리 및 데이터베이스 시스템과 같은 레거시 기술과 함께 작동하므로 관련 전문 지식도 필요하다.

결과적으로 코볼은 구식 언어임에도 코볼 언어 및 개발 환경에 대한 전문 지식 수요는 매년 더 높아지는 추세다. 코볼 및 관련 기술 전문가의 구인 수요는 상당하다. 2020년 3월에는 미국 뉴저지 주가 코로나바이러스 사태를 맞아 주 실업 급여 시스템 업그레이드 작업에 참여할 코볼 프로그래머 긴급 채용 공고를 내기도 했다.


코볼 배우기

코볼 언어 수요가 높아지면서 코볼을 위한 학습 리소스도 다시 급증하고 있다. 가장 끈질긴 생명력을 가진 언어인 코볼을 익히고자 하는 현대 개발자가 선택할 수 있는 코스는 다음과 같다.

아일랜드 라임릭(Limerick) 대학의 컴퓨터 과학 및 정보 시스템 학부는 코볼 프로그래밍 과정 전체를 온라인으로 제공한다. 다른 리소스에 비해 최신 내용은 아니지만 오랜 기간 동안 코볼의 변화가 아주 적다는 점을 고려하면 결점이라고 하기는 어렵다.

오픈 메인프레임 프로젝트(Open Mainframe Project)도 코볼 리소스를 제공한다. 이 리소스에는 IBM이 공동 후원한 코볼 프로그래밍 전체 과정도 포함되는데, 라임릭 대학 과정보다 더 현대적이며 광범위하게 배포된 코볼 버전인 IBM의 zOS 코볼 구현에 맞춤 구성돼 있다.

코볼은 비즈니스 컴퓨팅 영역에서 수십 년 동안 중요한 위치를 지켜왔으며 코볼 프로그래밍 인력에 대한 수요는 앞으로도 계속 증가할 전망이다. 코볼 프로그램 유지 또는 현대화에 관심이 있다면 지금이 코볼에 뛰어들 최적의 시점이다. editor@itworld.co.kr
 Tags 코볼 COBOL

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.