위로가 아니라 옆으로 — LLM이 가져온 새로운 추상화의 본질 (Martin Fowler)
원문 정보
- 제목: LLMs bring new nature of abstraction
- 출처: Martin Fowler (martinfowler.com)
- 발행: 2025-06-24 · 약 5~7분 분량, 소제목 없이 한 편의 짧은 에세이
- 원문 링크: https://martinfowler.com/articles/2025-nature-abstraction.html
이 위키에는 이미 Fowler의 fragment를 다룬 글이 여럿 있는데, 이건 그 짧은 메모들과 달리 하나의 관찰을 끝까지 밀고 나가는 독립 에세이다. LLM이 프로그래밍에 무엇을 하는지에 대한, 이 위키가 반복해 온 질문에 Fowler가 가장 압축적으로 답한 글이라 Articles에 담는다.
한 줄 요약 (TL;DR)
assembler에서 고급 언어로의 도약이 추상화의 층을 위로 올렸다면, LLM은 그 층을 올리는 동시에 옆으로 — 결정론(determinism)에서 비결정성(non-determinism)으로 — 움직인다. 그래서 LLM은 단순히 더 높은 추상화가 아니라 프로그래밍의 본질(nature) 자체를 바꾸는 사건이며, “코드를 git에 넣으면 언제나 같은 결과가 나온다”는 우리 직업의 오래된 전제가 처음으로 흔들린다.
왜 이 글을 골랐나
“LLM은 그냥 더 높은 프로그래밍 언어일 뿐”이라는 비유는 흔하다. Fowler는 그 비유가 절반만 맞다고 짚는다. 추상화의 도약이라는 점에서는 맞지만, 지금까지의 모든 도약이 지켜 온 한 가지 — 결정론 — 을 LLM이 깨뜨린다는 점에서 틀리다. 이 한 끗의 차이가 왜 vibe coding, 검증 비용, 재현성 같은 최근의 모든 논의가 예전과 다르게 느껴지는지를 설명한다. 짧지만, 이 위키가 흩어서 다뤄 온 주제들을 관통하는 좌표축 하나를 제시하는 글이다.
핵심 내용
원문은 소제목 없이 흐르는 한 편의 에세이다. 아래는 그 논지를 흐름대로 정리한 것이다.
추상화의 역사: 결이 바뀌지 않은 도약들
Fowler는 자기 이력에서 출발한다. 그의 첫 직업 프로그래밍은 Fortran IV였고, ELSE 절이 없어 조건 분기를 우회해야 했으며 정수 변수 이름은 I~N으로 시작해야 하는 관습이 있었다. 그 뒤로 언어는 블록 구조·명명 변수·고수준 제어문을 얻으며 계속 진화해 Ruby 같은 오늘날의 언어에 이르렀다.
그런데 Fowler가 강조하는 건, 이 긴 여정에서 결(ambiance)은 바뀌지 않았다는 점이다. assembler에서 Fortran으로, 다시 Ruby로 오면서 우리는 기계의 명령어 집합에서 점점 멀어져 “문장의 시퀀스, 대안을 고르는 조건문, 반복” 같은 더 높은 개념으로 사고했다. 하지만 Ruby로 코드를 짜는 지금도 “여전히 비슷한 방식으로 기계에게 말하고 있다”고 그는 말한다. 각 단계는 더 쉽고 더 또렷해졌을 뿐, 프로그래밍의 성질 자체를 바꾸는 근본적 변화는 아니었다.
비결정성이라는 새 좌표축
여기서 핵심 논지가 등장한다. 지금까지의 모든 추상화 도약이 공유한 전제는 결정론이다. Fowler의 표현을 빌리면:
“내가 Fortran 함수를 하나 짜서 백 번 컴파일해도, 결과는 언제나 똑같은 버그를 그대로 드러냈다.”
LLM은 이 보장을 깨뜨린다. 같은 프롬프트를 넣어도 매번 다른 출력이 나온다. 그래서 그는 프롬프트로 기계에게 말하는 일이 “Fortran이 assembler와 다른 만큼 Ruby와도 다르다”고 본다. 도약의 크기는 assembler→고급 언어에 견줄 만하지만, 방향이 다르다. 동료 Birgitta Böckeler의 프레임을 인용해 이를 이렇게 요약한다:
“우리는 추상화의 층을 위로(up) 올라가고 있는 것만이 아니라, 옆으로(sideways) 비결정성 속으로 움직이고 있다.”
추상화가 여태 1차원(위로)이었다면, LLM은 거기에 두 번째 축(옆으로)을 더해 2차원으로 만든다. Fowler는 이 비결정성의 진화가 “우리 직업의 역사에서 전례 없는 일”이라고 못 박는다.
재현성이라는 오래된 전제가 흔들린다
이 ‘옆으로의 이동’이 실무에서 가장 먼저 부딪히는 벽이 재현성이다. 지금까지 우리는 코드를 버전 관리에 넣어 두면 언제 누가 실행해도 같은 동작을 얻는다는 전제 위에서 일해 왔다. Fowler는 이제 “프롬프트를 git에 저장해 둔다고 매번 같은 동작을 얻으리라 장담할 수 없다”고 지적한다. 코드가 신뢰할 수 있고 반복 가능한 산출물이라는, 현대 개발 관행의 밑바닥에 깔린 가정이 흔들리는 것이다. 그는 이 관찰이 자기 혼자의 것이 아니라 동료들의 gen-ai 탐험 기록에서 함께 길어 올린 것임을 밝힌다.
무엇을 잃고 무엇을 얻을지 — 아직 모른다
Fowler는 이 변화의 결과를 단정하지 않는다. 잃을 것과 얻을 것을 대칭적으로 열어 둔다:
“우리가 잃게 될 무언가에 나는 분명 서운해할 것이다. 하지만 우리 중 아직 아무도 잘 이해하지 못한, 얻게 될 무언가도 있을 것이다.”
마무리의 어조는 불안보다 흥미에 가깝다. 이 전례 없는 비결정성과 “어떻게 함께 살아갈지”를 개발자들이 앞으로 알아내야 한다는, 조심스럽지만 설레는 태도로 글을 닫는다.
분석과 인사이트
여기서부터는 원문 요약이 아니라 내 관점이다.
- 이 글의 진짜 기여는 결론이 아니라 ‘좌표축’이다. Fowler는 “LLM이 좋다/나쁘다”를 말하지 않는다. 대신 추상화를 2차원 평면으로 다시 그린다 — 세로축은 여태 우리가 오르던 추상화 수준, 가로축은 새로 열린 비결정성. 이 한 장의 좌표가 있으면 “LLM은 그냥 더 높은 언어”라는 비유가 왜 어긋나는지 단번에 보인다. 위로만 보면 같은 종류의 도약이지만, 옆으로 보면 완전히 새 영역이다.
- 비결정성은 ‘버그’가 아니라 ‘성질’이다. 여기서 실수하기 쉬운 지점이 있다. 같은 프롬프트가 다른 출력을 내는 걸 우리는 본능적으로 ‘고쳐야 할 결함’으로 취급한다. 하지만 Fowler의 프레임을 받아들이면, 그건 새 매체의 본질적 성질이다. temperature를 0으로 낮춰 억지로 결정론을 흉내 낼 수는 있어도, 그건 assembler 시절의 사고로 새 매체를 다루는 것에 가깝다. 진짜 과제는 비결정성을 제거하는 게 아니라 다루는 법을 배우는 것이다.
- “재현성이 깨진다”는 관찰이 최근 담론 전체의 뿌리다. 왜 요즘 검증 비용, vibe coding의 불편함, 신뢰의 근거 이동 같은 논의가 쏟아지는가. 근본 원인 하나로 수렴한다 — 산출물이 더 이상 결정론적 아티팩트가 아니기 때문이다. 같은 축을 정확히 반대편에서 다룬 글이 확률적 엔지니어링과 24-7 직원이다. Tim Davis는 소프트웨어가 정확성을 “아는(know)” 결정론에서 “믿는(believe)” 확률론으로 옮겨 간다고 말하는데, 이는 Fowler가 말한 ‘옆으로의 이동’과 같은 현상을 실무 언어로 옮긴 것이다.
- Fowler가 열어 둔 ‘잃을 것’의 목록은 이미 채워지고 있다. 그가 “서운해할 무언가”를 특정하지 않았지만, 이 위키가 정리해 온 다른 글들이 그 빈칸을 메운다. 바이브 코딩과 에이전틱 엔지니어링에서 Simon Willison이 고백한 ‘모든 줄을 리뷰하지 않게 되는’ 불편함, 검증이 비싸지는 시대에서 말한 ‘인지적 항복’의 위험 — 이것들이 비결정성 축을 건널 때 치르는 구체적 비용이다.
- 추상화 논의로서도 정직하다. 추상화는 이 직업의 오랜 주제이고, 잘못 세운 추상화가 얼마나 비싼지는 잘못된 추상화가 보여 준 바 있다. Fowler의 글이 신선한 건, 추상화의 품질이 아니라 추상화의 종류가 바뀌었다고 말하기 때문이다. 지금까지 우리가 쌓아 온 추상화 감각(더 높이 올릴수록 좋다)이, 새 축에서는 그대로 통하지 않을 수 있다는 경고로도 읽힌다.
- 어조의 균형이 이 글의 미덕이다. 과장(모든 게 바뀐다)도 냉소(별것 아니다)도 아니다. “전례 없는 일이지만, 무엇을 잃고 얻을지는 아직 모른다”는 태도야말로 새 매체를 대하는 가장 성숙한 자세다. 단정하지 않으면서도 좌표축은 또렷이 남긴다.
적용 포인트
- LLM을 “더 높은 프로그래밍 언어”라고 부르고 싶어질 때, 두 축으로 나눠 생각한다. 추상화 수준(위로)에서는 맞는 비유지만, 결정론성(옆으로)에서는 완전히 다른 매체임을 잊지 않는다.
- 프롬프트·에이전트 워크플로를 설계할 때 재현성을 기본값으로 가정하지 않는다. “이 프롬프트를 git에 넣으면 재현된다”가 더는 참이 아니다. 재현이 필요한 지점은 명시적으로 고정(seed·temperature·평가 하니스)하고, 나머지는 비결정성을 전제로 검증 루프를 건다.
- 같은 입력이 다른 출력을 낼 때 반사적으로 ‘버그’라 부르지 말고, 성질인지 결함인지 먼저 구분한다. 성질이라면 제거가 아니라 관리(범위 제한, 다중 샘플, 검증)로 대응한다.
- 팀에 “무엇을 잃고 있는가”를 의식적으로 기록한다. Fowler처럼 잃을 것과 얻을 것을 대칭으로 놓고 보면, 편리함에 떠밀려 조용히 사라지는 역량(직접 읽고 검증하는 근육)을 붙잡을 수 있다.
- 새 도구를 도입할 때 “추상화가 올라갔는가”만 묻지 말고 “결정론성이 유지되는가”를 함께 묻는다. 이 한 질문이 도구의 리스크 성격을 크게 갈라 준다.
마무리
Fowler의 글은 짧지만 좌표축 하나를 또렷이 남긴다. 프로그래밍의 역사는 오래도록 추상화를 위로 쌓아 온 여정이었고, 그동안 결정론이라는 바닥은 한 번도 흔들리지 않았다. LLM은 그 바닥을 처음으로 옆으로 밀어낸다. 무엇을 잃고 무엇을 얻을지는 아직 아무도 모른다 — 그러나 우리가 지금 서 있는 곳이 사다리의 다음 칸이 아니라 처음 보는 평면 위의 한 점이라는 것만은 분명하다. 이 비결정성과 어떻게 함께 살아갈지를 알아내는 일이, 앞으로 이 직업의 가장 흥미로운 과제가 될 것이다.
더 읽어보기
- 원문 — LLMs bring new nature of abstraction (Martin Fowler)
- 확률적 엔지니어링과 24-7 직원 (Tim Davis) — 정확성을 ‘아는’ 결정론에서 ‘믿는’ 확률론으로 옮겨 가는, 같은 축의 실무 버전
- 바이브 코딩과 에이전틱 엔지니어링 (Simon Willison) — 비결정성 축을 건널 때 신뢰의 근거가 어떻게 이동하는가
- 코딩이 공짜가 되면 무엇이 비싸지는가 — Fowler의 Fragments — 비결정성이 부른 ‘검증 비용’과 ‘인지적 항복’
- Martin Fowler의 Fragments로 읽는 LLM 시대의 균형 감각 — 같은 저자, LLM 시대를 보는 균형 감각
- 잘못된 추상화 (Sandi Metz) — 추상화의 ‘품질’을 다룬 고전과 대비해 읽기