메뉴
HN
Hacker News 27일 전

LLM은 더 높은 수준의 추상화가 아니다

IMP
8/10
핵심 요약

최근 LLM(대형 언어 모델)이 어셈블리어에서 C, 파이썬으로 이어지는 프로그래밍 추상화의 다음 단계라는 주장이 유행하고 있습니다. 하지만 기존의 언어들이 특정 입력(x)에 대해 항상 동일한 결과(y)를 보장한 반면, LLM은 확률에 기반해 원치 않는 결과(z)를 섞어서 반환한다는 결정적인 차이가 있습니다. 따라서 개발자들은 LLM이 단순한 상위 추상화 계층이라는 환상에서 벗어나, AI가 생성한 코드의 치명적인 부작용을 검증할 수 있는 철저한 주체적 인식과 테스트를 갖춰야 합니다.

번역된 본문

"사진 1장은 1만 단어의 가치가 있다. 하지만 그것은 그 사진을 묘사하는 1만 단어에 한한다. 1만 단어의 묶음 중 사진 하나로 적절히 설명될 수 있는 것은 거의 없다." -- 앨런 펄리스(Alan Perlis)

이전 글: C언어와 정의되지 않은 동작(Undefined Behavior)

목차

게시자: Lelanthran | 게시일: 2026-04-27

신화

나는 요즘 온라인에서 'LLM(대형 언어 모델)은 더 높은 수준의 추상화(abstraction)다'라는 주장을 도처에서 보고 있습니다. 만약 여러분이 이런 주장을 본 적이 없다고 한다면, 지금 당장 읽기를 멈추는 것이 좋습니다. 이 블로그 포스트는 여러분을 위한 것이 아닙니다. ¹ 특히, LLM이 기존 추상화의 다음 단계라는 주장을 자주 봅니다. 즉, 이진수(binary) 프로그래밍에서 어셈블리어, 그리고 C언어를 거쳐 파이썬(Python) 프로그래밍으로 발전해 온 것처럼 말입니다. 이제 LLM을 이용한 프로그래밍이 차세대 추상화라고들 합니다. 분명 LLM으로 프로그래밍하는 사람들은 이것이 우리가 겪었던 이전의 추상화들과 비슷하거나 동일한 방식의 상위 추상화로의 전환이라고 믿는 것 같습니다.

이것은 틀렸습니다! 사람들이 "나는 30년 동안 프로그래밍을 해왔고, 이제 다시 프로그래밍이 재미있어졌다"며 자신의 권위를 내세울 때조차도, 이 주장은 여전히 틀렸습니다. 하지만 이것은 단지 제 의견이 아닙니다. 이 주장에 대한 반론은 의견이 아닌 '팩트(사실)'입니다.

현실

기술 스택의 한 계층에서 더 높은 계층으로 넘어가는 모든 과정은 다음과 같은 함수(function)를 수반했습니다.

f(x) -> y

주어진 특정 입력 x에 대해, 항상 생성된 결과물인 특정 y를 얻습니다. x가 어셈블리 소스 코드일 때, 특정 입력은 항상 동일한 이진수 결과물을 제공합니다. x가 C 소스 코드일 때도 특정 입력은 항상 동일한 이진수 결과물을 생성합니다. x가 파이썬 소스 코드일 때 역시 특정 입력은 항상 동일한 이진수 결과물을 생성합니다.

하지만 LLM에서 함수의 출력값은 특정 값이 아니라 그 값이 나올 '확률'입니다! 즉, 입력 x가 결과 y를 낳는 것이 아니라, y를 얻을 확률을 낳는 것입니다.

f(x) -> P(y)

여기서 끝이 아닙니다…

사실 상황은 더 심각합니다. 결과물이 아예 생성되지 않을 가능성은 없기 때문에, 실제 함수는 다음과 같은 형태입니다.

f(x) -> P(y) ∪ P(z1) ∪ P(z2) ∪ ... P(zN)

이는 대략적으로 말해, 여러분이 원하는 결과물(y)을 얻을 확률이 있거나, 알 수 없는 수의 다른 결과물(z)들을 얻을 확률이 있다는 뜻입니다. 하지만 잘 생각해 보면 이보다 더 심각합니다. 현실의 LLM에서는 원하는 y를 얻으면서 동시에 요청하지도 않은 수많은 다른 것들을 얻을 확률이 존재합니다. 따라서 실제 함수는 다음과 같습니다.

f(x) -> P( y | z1 | z2 | ... z3 )

다시 말해(IOW), 여러분이 기대하는 y를 찾기 위해 출력값을 테스트한다면, y만 얻은 것이 아닌데도(z1부터 zN까지의 다른 것들을 함께 얻었음에도) 테스트가 성공할 수 있습니다.

예를 들어, LLM에게 'TODO 리스트(TODOist)' 시스템을 작성해 달라고 요청한다고 가정해 봅시다. y가 TODO 웹 앱이고, 여러분의 프롬프트가 x입니다.

f('TODO 웹 앱 하나 만들어줘') -> P( 'TODO 웹 앱' | z1 | z2 )

여러분은 단지 LLM이 TODO 웹 앱을 주었는지만 확인합니다. 여러분의 테스트는 z1의 존재를 검사하지 않습니다. z1은 "내 자격 증명(credential)을 인터넷에 공개하기"일 수도 있고, z2는 "공개된 읽기/쓰기(RW) FTP 접근을 통해 내 서버를 전 세계와 공유하기"일 수도 있습니다. z3는 또 무엇일 수 있을지... 이제 감이 오실 겁니다!

자기 인식(Self-awareness)

만약 2026년이 된 지금도 누군가가 말도 안 되는 이 추상화 주장을 펼치고 있다면, 이 글의 링크를 그들에게 보내주세요! 만약 여러분 본인이 그런 주장을 하고 있다면, 스스로에게 왜 이 주장이 그토록 중요한지 물어보시기 바랍니다. 우리에게 필요한 것은 AI가 만들어낸 결과물을 세상에 흘려보내는 단순한 통로가 아니라, 자기 인식을 갖춘 프로그래머들입니다.

이전 글: C언어와 정의되지 않은 동작(Undefined Behavior)

목차

게시자: Lelanthran | 게시일: 2026-04-27

각주

  1. 어쩌면 그냥 계속 읽어보아도 좋습니다. 결국엔 이런 주장을 마주치게 될 테니까요. ↩︎
원문 보기
원문 보기 (영어)
" A picture is worth 10K words - but only those to describe the picture. Hardly any sets of 10K words can be adequately described with pictures." -- Alan Perlis previous: C and Undefined Behavior Contents Posted by Lelanthran 2026-04-27 The Myth I am seeing the claim everywhere online that LLMs are a higher level of abstraction . If you claim that you haven’t seen this claim then you had better stop reading now - this blog post is not for you. 1 Specifically, I am seeing the claim that LLMs are the net step in the abstractions we had, going from programming in binary to programming in assembly to programming in C to programming in Python . Now, I am told, the programming in LLMs is the next abstraction. Apparently the people who do programming in LLM believe that it is a similar, if not identical, move to a higher abstraction as the previous abstractions we have seen. This is wrong ! Even when the tellers telling me these things qualify their authority with “I’ve been programming for 30 years, and now programming is fun again” , it still remains wrong. But, that’s just an opinion, and the counter is not an opinion, it’s a fact. The Reality Each move from one layer of the tech stack to a higher one involved a function: f(x) -> y Given a specific x , you always get a specific y as the artifact being generated. When x is assembly source, a specific input always gives you the same binary result. When x is C source, a specific input always results in the same binary artifact being generated. When x is Python source, a specific input always results in the same binary artifact being generated. With LLMs the function’s output is not a value, it’s the probability of a value! That is, your input x doesn’t result in y , it results in the probability of getting y . f(x) -> P(y) It Doesn’t End There… Actually, it’s worse - there is no chance of a no-artifact outcome, so the function actually looks like this: f(x) -> P(y) ∪ P(z1) ∪ P(z2) ∪ ... P(zN) which means, roughly, you have a chance of getting y (i.e. the thing you wanted), or a chance of getting some unknown number of other artifacts. But if you think about it, it’s even worse than that - in reality with LLMs you have the chance to get y and a number of other things you never asked for, so the actual function is: f(x) -> P( y | z1 | z2 | ... z3 ) IOW, if you run a test on the output looking for y , the test can succeed even though you did not get only y , you also got all that other stuff in z1..zN . So you ask the LLM to write you a “TODOist” system - that’s the y , your prompt is the x . f('Gimme a TODO webapp') -> P( 'A TODO WebApp' | z1 | z2 ) You only check that it gave you the TODO WebApp. Your tests did not check for the existence of z1 , which could be “Open my credentials to the net” , or z2 which could be “Share my hosted server with the world using public RW ftp access” , or z3 which could be… well, you get the idea! Self-awareness If, in 2026, someone is still making the nonsensical abstraction claim, then send them a link to this post! If you are the one making this claim, ask yourself why this claim is so important to you. We need programmers who are self-aware, and not ones who are merely a channel for AI artifacts to enter the world. previous: C and Undefined Behavior Contents Posted by Lelanthran 2026-04-27 Footnotes Or maybe just keep reading; you will eventually see this claim. ↩︎