!원문 캡처 · dalerank.github.io

COBOL부터 SQL, 4GL, 노코드 도구까지 ‘코드 대신 쉬운 언어로 프로그램을 만들자’는 시도는 반복해서 새로운 전문 직군을 낳았다. 자연어 기반 인공지능도 손으로 코드를 쓰는 일을 줄일 수 있지만, 요구사항을 정확히 정하고 결과를 검증할 사람까지 없애지는 못한다는 주장이다.

‘프로그래머 없이 프로그래밍’의 반복

COBOL은 관리자가 프로그램을 읽고 쓸 수 있도록 영어 문장처럼 보이는 문법을 택했지만, COBOL 프로그래머라는 직업이 생겼다. COBOL은 지금도 운영 환경에서 쓰이며, 은행 거래에서 차지하는 비중과 코드 규모에 관한 큰 수치가 자주 인용된다. 다만 이런 수치 대부분은 1990년대 후반의 한 설문에서 비롯해 반복적으로 추정된 것이므로, 정확한 통계라기보다 대략적인 규모로 보는 편이 타당하다는 지적이다.

SQL은 비전문가도 영어에 가까운 표현으로 데이터를 조회하도록 고안됐지만, 데이터베이스 관리자(DBA)와 데이터 엔지니어 같은 직군을 낳았다. 오늘날 PostgreSQL과 Oracle의 SQL 방언은 절차적 논리를 포함해 단순한 조회 언어를 넘어선다. ‘간단한 쿼리’를 작성하는 일도 중급 수준의 보수를 받을 수 있는 전문 업무가 됐다.

4GL과 CASE 도구는 프로그래머 없이 개발한다는 약속을 내걸었다. 정형화된 입력·출력 양식을 만드는 데는 편리했지만, 특수한 업무 로직이나 외부 서비스 연동이 필요해지면 한계에 부딪혔다. 개발자는 저수준 언어로 빈틈을 메우거나 특정 업체의 도구를 익혀야 했고, 기업 시스템 아키텍트나 SAP·Oracle 전문 인력 같은 새로운 전문 분야가 생겼다. 시각적 도구가 코드를 감추더라도 복잡성이 사라지는 것은 아니며, 때로는 업체에 대한 종속과 높은 교육·인증 비용까지 뒤따랐다.

UML과 모델 기반 아키텍처는 다이어그램에서 코드를 생성하려 했지만, UML은 주로 문서화와 개발자 간 소통에 쓰이게 됐다. 이후 노코드·로코드 도구도 양식, CRUD 인터페이스, 자동화처럼 표준화된 작업에는 쓰일 수 있지만, 비표준 로직이나 연동, 성능 문제가 생기면 플랫폼을 깊이 아는 개발자가 필요해진다. 플랫폼이 개발자 수요를 없애기보다 플랫폼별 전문성을 만들었다는 설명이다.

자연어는 요구사항을 완전히 고정하지 못한다

‘직원들의 분기 보너스를 계산하라’는 말을 사람은 맥락과 상식으로 이해한다. 하지만 프로그램에는 분기의 기준, 대상 직원, 계산식, 분기 중 입·퇴사자의 처리, 반올림 방식, 통화와 환율, 데이터 누락 시의 대응을 정해야 한다. 각 항목마다 추가 질문이 생긴다. 프로그래머가 업무 요청을 코드로 옮길 때 하는 일은 문장을 번역하는 데 그치지 않는다. 모호한 부분을 질문하고 답을 정해 결과에 책임지는 과정도 포함된다.

파일 정리 요청도 마찬가지다. ‘이 폴더에서 30일보다 오래된 파일을 삭제하라’고 하면 생성 날짜와 수정 날짜 중 무엇을 기준으로 삼을지, 하위 폴더와 숨김 파일도 포함할지, 심볼릭 링크는 어떻게 처리할지 정해야 한다. 모호함을 없애려면 질문을 이어 가며 사실상 명세를 작성하거나, 요청자의 의도를 대신 추정해야 한다. 프로그래밍 언어는 각 표현의 의미를 하나로 정해 이런 모호성을 줄인다.

글에서는 라이스 정리를 근거로, 일반적인 경우 프로그램이 요청한 일을 정확히 하는지 자동으로 보장할 수 없다고 설명한다. 생성된 코드가 요구사항을 충족하는지 확인할 사람이 필요하며, 그 검증에는 결과물에 대한 이해가 따른다. 자연어로 명세를 작성하는 일 역시 규모가 커질수록 어려워진다. 짧은 기능은 말로 설명할 수 있어도, 대규모 시스템의 의미와 의존 관계를 문장만으로 일관되게 구성하기는 어렵다는 주장이다.

자연어의 의미는 앞뒤 문맥에 따라 달라지기도 한다. 글은 ‘당나귀를 가진 모든 농부는 그것을 때린다’는 문장을 예로 든다. 사람은 ‘그것’이 당나귀를 가리킨다고 자연스럽게 이해하지만, 문장을 앞에서부터 작은 단위로 나눠 처리하면 그 연결을 보존하기가 쉽지 않다. 프로그래밍 언어에서는 변수의 유효 범위가 명시되지만, 자연어에서는 문장 사이로 문맥이 이어질 수 있다.

이런 문제는 인공지능이 등장하기 전부터 언어학에서 다뤄졌다. 글은 1980년대 초 Hans Kamp의 동적 의미론 연구와 Irene Heim의 파일 변경 의미론 연구가 문장 의미를 앞서 나온 내용과 분리해 계산하기 어렵다는 점을 다뤘고, 담화 표상 이론(DRT)이 형성되는 배경이 됐다고 설명한다. 다만 현대 대규모 언어 모델은 DRT에 기반한 것이 아니라 통계적 트랜스포머다. 이 논의는 인공지능의 기반을 설명하려는 것이 아니라, 자연어를 정밀한 명세 언어로 쓰려 할 때 문맥과 의미를 다루는 일이 복잡해지는 이유를 보여주는 데 쓰인다.

자연어 코딩이 바꾸는 일

글의 주장은 대규모 언어 모델이 이전 도구와 다른 도약을 이뤘다는 점도 인정한다. 과거의 도구가 제한된 블록이나 다이어그램, 특수 문법을 사용했다면, 대규모 언어 모델은 임의의 자연어를 다룬다. 그러나 모호성, 검증 가능성, 재현성의 문제는 도구가 달라져도 남는다. 누군가는 일을 정확하게 나누어 설명하고, 생성된 코드를 읽고, 실제 운영 환경에서의 동작을 책임져야 한다.

윌리엄 스탠리 제번스는 1865년 증기기관 효율이 높아져도 전체 석탄 소비가 늘 수 있다는 역설을 설명했다. 단위 작업의 비용이 낮아지면 이전에는 경제성이 없던 활용처가 생겨 전체 작업량이 늘어난다는 것이다. 글은 코드 작성 비용이 내려갈 때도 소프트웨어 수요가 생산 비용보다 빠르게 커질 수 있다고 본다. 도구가 일부 수작업을 줄여도 새로운 프로젝트와 업무가 늘어 프로그래머 수요가 오히려 커질 수 있다는 주장이다.

변화는 업무 구성에서 나타난다. 정형화된 코드, 간단한 CRUD 시스템, 마크업과 반복 코드처럼 해법이 이미 알려진 작업은 줄어들 수 있다. 반면 시스템 설계, 업무 영역에 대한 이해, 디버깅, 성능 최적화, 보안, 예측 가능한 동작이 필요한 시스템에 구성 요소를 통합하는 일은 중요해진다. 프로그래머가 사라지기보다 손으로 코드를 쓰는 시간은 줄고 설계와 검토의 비중이 커진다는 전망이다.

자연어는 대략 맞아도 되는 작업에는 쓸 수 있지만, 실수가 손실이나 피해로 이어지는 시스템에는 동작을 정확히 명시하는 형식이 필요하다는 것이 글의 결론이다. 은행·의료·항공을 비롯해 예측 가능한 동작이 중요한 분야에서는 그 형식이 어떤 모습으로 바뀌더라도 계속 요구될 수 있다.

따라서 바이브 코딩은 일을 정확히 정해야 한다는 필요를 없애지 않고, 부정확한 표현의 대가를 치르는 시점만 바꾼다. 코드 대신 자연어로 요청하더라도 결과물을 확인하고 책임지는 기술 인력이 필요하다. 글은 이들이 앞으로 ‘Senior Opus Engineer’ 같은 새로운 이름으로 불릴 수도 있다고 전망하며, ‘프로그래머 없이 프로그래밍’이라는 약속이 또 다른 전문 직군을 낳을 것이라고 주장한다.