Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

스타트렉의 컴퓨터는 COBOL로 돌아갈까요?

우리는 미래를 매끄럽고, 이음새 없고, 지적으로 설계된 모습으로 상상하기를 좋아합니다. 우주선의 LCARS 인터페이스에 음성으로 질의 한 번만 하면 생체신경 젤팩(생물학적 FPGA)을 통해 나노초당 575조 번의 계산이 전달되고, 대규모 병렬 연산이 실행되어 리플리케이터가 완벽한 뜨거운 얼그레이 한 잔을 물질화하는 데 필요한 최적의 분자 동역학을 계산해 내는 세상, 즉 욕망이 즉각적이고 거의 마법처럼 실현되는 세상 말입니다. 하지만 현실이 스타트렉과는 거리가 멀고 오늘날의 소프트웨어 지형과 더 비슷하되, 그 위에 수 세기 분량의 레거시 코드가 더 쌓여 있을 뿐이라면 어떻겠습니까?

우주 비행을 위해 상대론적 좌표계 계산을 수행하는 우주선을 상상해 보십시오. 그런데 그 시스템의 근간에는 1970년 Unix 에포크부터 카운트다운하는 타이머가 자리하고 있습니다. 사소한 time_t 정수 오버플로 하나로, 공들여 계획한 프록시마 센타우리 B행 항로가 갑자기 당신을 블랙홀 한가운데로 곧장 이끌게 됩니다. 이 모든 것은 400년 전 어딘가의 누군가가 그 특정 라이브러리를 아직도 누군가 쓰고 있으리라고는 생각하지 못했기 때문입니다. 그리고 항로를 수정하려고 엔진을 점화하려 하면, 엔진 제어 시스템은 glibc 2.35를 대상으로 컴파일되었는데 항법 컴퓨터는 2.34를 실행하고 있어서 점화에 실패합니다. 버너 빈지(Vernor Vinge)의 소설 A Deepness in the Sky는 이런 상황을 경이로울 만큼 섬뜩하게 그려 냅니다.

그러니까 모든 최상위 인터페이스 뒤에는 겹겹이 쌓인 지원 계층이 있었습니다. 그 소프트웨어 중 일부는 전혀 다른 상황을 위해 설계된 것이었습니다. 이따금 그 불일치가 치명적인 사고를 일으켰습니다. 우주 비행의 낭만에도 불구하고, 가장 흔한 사고는 그저 오래되고 잘못 사용된 프로그램들이 마침내 복수를 한 결과였습니다. “전부 다시 작성해야 합니다.” 팜이 말했습니다. “이미 했습니다.” 수라가 고개도 들지 않고 말했습니다. 그녀는 당직을 마칠 준비를 하고 있었고, 지난 나흘 동안 냉동 수면 자동화 시스템에서 문제 하나를 뿌리 뽑으려 애쓰고 있었습니다. “시도는 했었습니다.” 냉동실에서 막 돌아온 브렛이 바로잡았습니다. “하지만 함대 시스템 코드는 최상위 계층만 해도 엄청나게 방대합니다. 당신과 친구 천 명이 한 세기쯤은 일해야 그것을 재현할 수 있을 것입니다.” 트린리가 사악하게 씩 웃었습니다. “그리고 있잖습니까. 설령 그렇게 한다 해도, 다 끝낼 즈음이면 당신 나름의 불일치들이 생겨 있을 것입니다. 그리고 여전히 이따금 필요할지도 모르는 모든 애플리케이션과 호환되지는 않을 것입니다.” 수라는 잠시 디버깅을 포기했습니다. “이 모든 것을 가리키는 말이 바로 ‘성숙한 프로그래밍 환경’입니다. 기본적으로, 하드웨어 성능이 최종 한계까지 밀어붙여지고 프로그래머들이 수 세기 동안 코드를 작성해 오면, 합리적으로 정리할 수 있는 양보다 훨씬 많은 중요한 코드가 존재하는 지점에 이르게 됩니다. 할 수 있는 최선은 전체적인 계층 구조를 이해하고, 쓸모가 있을지도 모르는 별난 도구를 찾아내는 방법을 아는 것입니다

고대의, 그리고 흔히 제대로 이해되지 못한 코드의 계층이 고도로 발달한 문명의 기반을 이루는 “성숙한 프로그래밍 환경“에 대한 빈지의 묘사는 그 냉소주의(혹은 하드 SF적 사실주의) 덕분에 놀라울 만큼 설득력이 있습니다. 이는 우리 사회가 소프트웨어 개발에 접근하는 방식에 이미 깊이 배어 있는 경향을 단순히 연장한 것에 불과합니다. 디지털 인프라 유산을 끊임없이 다시 작성하고 완벽하게 다듬는다는 낭만적인 관념은 흔히 냉혹하고 실용적인 현실과 충돌합니다. 바로 온갖 별난 구석이 있음에도 그저 작동하는 시스템을 교체하는 데 드는 압도적인 비용 대비 효과의 문제입니다.

과학 및 공학 소프트웨어라는 거대한 건축물을 생각해 보십시오. 오늘날에도 고성능 수치 컴퓨팅의 상당 부분, 즉 기후 모델과 천체물리학 시뮬레이션과 복잡한 공학 설계를 구동하는 카인드의 컴퓨팅은 여전히 FORTRAN으로 작성된 라이브러리와 커널에 의존합니다. 반드시 가장 날것 그대로의 FORTRAN 77을 말하는 것은 아니지만, 그 계보와 Core 알고리즘이 수십 년 전까지 거슬러 올라가는 코드베이스들입니다. 평범한 최적화 루틴을 위해 pip install scipy를 실행할 때마다, 방대한 Fortran 코드가 작동하고 있으며, 거기에는 그럴 만한 이유가 있습니다. 이들은 사소한 코드 조각이 아닙니다. 흔히 수 세기에 해당하는 인력을 들여 개발하고 검증하고 다듬어 온 산물입니다. 이것들을 “현대적인” 언어로 다시 작성하고, 비트 단위까지 동일한(그리고 올바른) 출력을 보장한 다음, 새로운 스택 전체를 수십 년간의 실험 데이터와 이론 연구에 비추어 재검증한다는 것은 너무나 막대하고 위험으로 가득한 일이어서 좀처럼 시도되지 않습니다. 기존 코드가 점점 더 강력해지는 하드웨어 위에서, 혹은 정교한 현대식 래퍼 안에서 실행되며 계속해서 신뢰할 수 있는 결과를 내놓고 있는데, 굳이 그럴 이유가 있겠습니까?

이것이 진보의 실패가 아니라 진보의 실용적인 귀결이라고 주장할 수도 있습니다. 이러한 기반 블록의 안정성과 입증된 정확성 덕분에 과학자와 엔지니어는 지하실을 끊임없이 다시 짓는 대신 더 높이 쌓아 올리고 더 복잡한 질문을 던질 수 있습니다. 같은 원리가 세계 금융의 보이지 않는 인프라에는 어쩌면 훨씬 더 절실하게 적용됩니다. Core 뱅킹 시스템, 거래 처리 엔진, 증권 거래 청산소는 흔히 COBOL로 작성된 소프트웨어로, 클라우드 컴퓨팅과 함께 자란 세대에게는 시대착오적으로 보이는 메인프레임 아키텍처 위에서 돌아갑니다. 그 상호 연결성은 어마어마합니다. 국가 결제망부터 개별 기업의 회계 소프트웨어에 이르기까지 수많은 다른 시스템이 이러한 레거시 코어와 연동되도록 만들어져 있습니다. “재작성“은 단순한 코딩 프로젝트가 아닙니다. 그것은 최고 수준의 전 지구적 물류, 경제, 정치적 과제입니다.

그럼에도 이 시스템들은 매일 수조 달러 규모의 거래를 놀라운 신뢰성으로 처리합니다. 전면 교체를 시도하려고 세계 자본주의를 떠받치는 기계 장치를 단 일주일이라도 멈춘다는 생각은 상상조차 할 수 없습니다. 자본주의는 필연적이고 대안은 없기 때문입니다. 그렇지 않습니까? 아니면 그런 질문은 아예 생각하지 않는 편이 나을지도 모릅니다.

그런데 이 시스템들이 더 깊이 뿌리내리고 더 중요해질수록 기묘한 일이 벌어집니다. 사람들이 그 시스템들을 당연하게 여기게 되는 것입니다. 내부 작동 방식의 복잡한 세부 사항은 조직이 공유하던 지식에서 점차 사라집니다. 대를 이은 엔지니어들은 그 시스템들과 인터페이스하는 법, 그 주변에 무언가를 쌓아 올리는 법, 새로운 계층을 덧붙여 새 기능을 끌어내는 법을 익히지만, Core 자체는 속을 알 수 없는 블랙박스가 됩니다. 잘 작동하는데 굳이 “어떻게“를 너무 깊이 파고들 이유가 있겠습니까? 원래 설계자들은 오래전에 은퇴했거나 세상을 떠났고, 문서는 빈약하거나 낡았거나 혹은 둘 다인 상황이라면 더욱 그렇습니다.

저는 SF 문학을 좋아하기 때문에 이 문제를 자주 생각해 왔습니다. 제가 떠올린 결과 중 비교적 흥미로운 것들을 소개합니다. 하나하나가 아마 그렉 이건 스타일의 유머러스한 중편 소설이 될 수 있을 것입니다.

  1. 의례적 관리자들: 핵심 인프라(예컨대 테라포밍된 화성의 대기 처리 시스템이나 전 지구적 식량 생산 AI)가 21세기 후반에 가장 깊은 계층이 작성된 Core 운영 체제 위에서 돌아가는 미래를 상상해 보십시오. 살아 있는 사람 중 그 아키텍처를 완전히 이해하는 이는 아무도 없습니다. 유지보수는 고도로 전문화된, 거의 사제와 같은 역할이 됩니다. 과거에 효과가 있었던 패치와 우회책을 신중하게 적용하고, 수백 년 전에 사라진 하드웨어를 가리키는 오류 코드가 담긴 난해한 로그 파일을 해석하며, 그러는 내내 제대로 이해되지 않은 고대 코드의 섬세한 균형을 흐트러뜨리지 않기를 바라야 합니다. 새 기능은 Core를 바꿀 수 없는, 신이 내린 상수처럼 취급하는 점점 더 정교해지는 API를 통해 덧붙여집니다. 솔직히 말해 소프트웨어 개발의 현재 상태와 별로 다르지 않습니다.

  2. 시스템 리스크로서의 연쇄적 노후화: 가까운 미래에 등장한, 사소해 보이지만 어디에나 쓰이는 표준, 이를테면 2040년대의 데이터 압축 알고리즘이나 암호 프로토콜이 수많은 자동화 시스템에 깊숙이 자리 잡습니다. 수십 년 뒤 미묘한 결함이 발견되거나, 그것을 효율적으로 처리할 하드웨어가 희귀해집니다. 그러나 그것이 예컨대 행성 간 물류나 의료 진단 장비의 근간에 너무 깊이 엮여 있어서, 큰 혼란 없이 단계적으로 걷어 내는 일은 여러 세대에 걸친 프로젝트가 됩니다. “Y2K 버그“는 “2275년 GCC 정의되지 않은 동작 위기“에 비하면 사소해 보일지도 모릅니다.

  3. 소프트웨어 고고학자의 부상: 정말로 새로운 문제가 생기거나, 성숙한 프로그래밍 환경에 깊이 뿌리박힌 버그가 마침내 치명적인 결과와 함께 드러날 때, 사회는 전통적인 의미의 혁신가가 아니라 “소프트웨어 고고학자“라 할 만한 전문가에게 의존하게 될지도 모릅니다. 이들의 전문성은 이러한 디지털 유물을 역공학하고 이해하는 데 있습니다. 이들은 AI 보조 도구로 잊힌 언어의 컴파일된 코드를 분석하고, 단서가 될지도 모를 문서 조각이나 고대 온라인 포럼 토론을 찾아 페타바이트 규모의 역사 데이터 아카이브를 샅샅이 뒤집니다. 어쩌면 미래의 역사가들은 우리가 미노아 선형 문자 A를 두고 그러듯 APL 코드의 해석을 놓고 논쟁을 벌일지도 모릅니다.

  4. 점점 더 복잡해지는 추상화로서의 진보: 진정한 혁신은 계속되지만, 주로 주변부에서 일어납니다. 우리는 희귀 질환을 진단할 수 있는 놀라울 만큼 정교한 AI를 개발할 수도 있지만, 그 AI의 학습 알고리즘은 여전히 원래 21세기 병원 기록 시스템을 위해 설계된 데이터 형식으로 결과를 출력하고 있을지도 모릅니다. 수 페타바이트에 달하는 과거의 (그리고 법적으로 보존이 의무화된) 데이터를 보유한 국가 보건 데이터베이스가 그 Core에서 여전히 그 형식을 요구하기 때문입니다. AI는 낡은 시스템을 대체하지 않습니다. 그 한계와 특이한 습성을 능숙하게 헤쳐 나가는 법을 배웁니다. 민감한 과학 기기를 위해 원자폭탄 이전 시대의 저배경 강철을 소중히 보존하듯이, 방대한 레딧 스레드와 트위터 게시물 아카이브는 전용 데이터 센터에 보관됩니다. 현대 커뮤니케이션의 언어적 뿌리를 이해해야 하는 새로운 언어 모델을 부트스트래핑하는 데에는 그 낡은 소셜 미디어 담론이 반드시 필요하기 때문입니다.

이것은 일종의 정체, 즉 결국 언젠가 청구서가 날아올 문명 차원의 기술 부채가 쌓이는 것일까요? 그럴지도 모릅니다. 하지만 이것은 기묘하게 창발하는 진보의 한 형태로 볼 수도 있습니다. “해결된” 문제 하나하나가 아무도 의문을 품지 않는 인프라의 일부가 된 소프트웨어 안에 담기면서, 다음 세대는 이름도 방법도 더는 알지 못할 수 있는 디지털 거인들의 어깨 위에 서서 새로운 과제에 지적 에너지를 집중할 수 있게 됩니다.

아니면, 더 발전한 (그리고 어쩌면 더 깨어 있는) 사회는 일본 신토 신사와 비슷한 철학을 채택할지도 모릅니다. 이 신사들은 20년마다 완전히 허물어진 뒤 바로 옆 부지에 세심하게 다시 지어지는데, 이는 식년천궁(式年遷宮)이라 불리는 전통으로 1300년 넘게 이어져 왔습니다. 이것은 보수가 아닙니다. 새로운 자재와 고대의 기법을 사용해 완전히 다시 짓는 것이며, 무상함과 정결함, 그리고 다음 세대로의 지식 전수에 관한 믿음에 뿌리를 두고 있습니다. 이는 50년 된 수많은 Unix 유틸리티가 현재 메모리 안전 언어로 다시 작성되고 있는 모습과 다르지 않습니다.

그러나 이러한 접근 방식에는 아마도 지금보다 훨씬 더 발전하고 경제적으로도 다른 사회 구조가 필요할 것입니다. 이는 당장의 위기 때문이 아니라 원칙과 장기적인 건전성의 문제로서 이러한 기념비적인 재건을 감행할 수 있을 만큼 자원과 숙련된 인력의 시간이 충분히 풍부한 사회를 전제로 합니다. 또한 이는 소프트웨어 개발이 빠른 반복, 울타리 치기, 시장 장악에 몰두하는 지금의 약육강식적이고 과대광고에 휘둘리는 광란의 잔치처럼 취급되기보다는, 세심한 장인 정신과 전통이 지속되는 것처럼 깊이 존중받는 공예로 취급되는 문화를 의미할 것입니다. 그리고 오늘날 소프트웨어 분야에서 일하는 사람이라면 누구나 그것이 우리가 지금 하는 일과는 아주, 아주 거리가 멀다는 것을 알고 있습니다.

소프트웨어의 미래는 밑바닥부터 끊임없이 급진적으로 재발명하는 이야기가 아니라, 끝없이 늘어나고 끝없이 낡아 가는 기술 유산을 축적하고 층층이 쌓아 올리며 점점 더 정교하게 관리하는 이야기일지도 모릅니다. 내일의 가장 진보한 시스템도 그 Core 깊숙한 곳에서는 오늘날의 디지털 유령 위에서 돌아가고 있을지도 모릅니다. 그것이 무서운 일인지는 잘 모르겠지만, 분명 소프트웨어 개발이라는 공예에 곰곰이 생각해 볼 만한 일종의 경외감과 무게를 불어넣어 줍니다.


원문 © Stephen Diehl, stephendiehl.com · 글 CC BY-SA 4.0, 코드 MIT · Stephen Diehl은 런던의 소프트웨어 엔지니어이자 작가입니다(저자가 정한 소개 문구). 이 글은 저자가 개인 자격으로 쓴 것이며 어떤 조직과의 연관도 밝히거나 암시해서는 안 됩니다 (라이선스와 고지).
이 페이지는 원문을 한국어로 옮기며 변경한 비공식 번역이며 같은 CC BY-SA 4.0으로 제공합니다 · yeokja 한국어 번역 · Anthropic 사의 claude-opus-5-5 모델을 활용하여 번역되었으며 학습을 모두 비허용한 상태로 작업하였습니다.