LLM이 소프트웨어를 제대로 만들 수 없는 이유
Why LLMs can't really build software
TL;DR Highlight
Zed 에디터 CEO가 LLM은 소프트웨어 엔지니어링의 핵심인 멘탈 모델 유지 능력이 없다고 분석하며 AI 코딩 도구의 현실적 한계와 올바른 활용법을 제시했다.
Who Should Read
AI 코딩 도구(Cursor, Claude Code, Copilot 등)를 실무에 쓰고 있거나 도입을 검토 중인 개발자. LLM에 어디까지 맡기고 어디서 직접 개입해야 하는지 판단 기준이 필요한 사람.
Core Mechanics
- 소프트웨어 엔지니어링의 핵심은 '요구사항의 멘탈 모델'과 '코드가 실제로 하는 일의 멘탈 모델' 두 가지를 동시에 유지하면서 차이를 좁혀가는 반복 루프인데, LLM은 이 두 모델을 동시에 들고 비교하는 능력이 없다.
- LLM은 코드 생성 자체는 잘 하지만, 테스트가 실패하면 코드를 고쳐야 하는지 테스트를 고쳐야 하는지 판단하지 못하고, 답답해지면 전부 지우고 처음부터 다시 짜는 패턴을 보인다. 이건 좋은 엔지니어의 정반대 행동이다.
- 사람은 문제가 생기면 전체 컨텍스트를 잠시 스택에 넣고 세부 이슈에 집중한 뒤 다시 돌아오는 '멘탈 스택' 조작이 가능한데, LLM은 컨텍스트 윈도우에 텍스트를 계속 쌓을 뿐 이런 추상화 수준 전환을 못 한다.
- 현재 생성형 모델의 구조적 한계로 세 가지를 꼽았다: 빠진 컨텍스트를 잘 못 찾는 문제(context omission), 최근에 본 내용에 편향되는 문제(recency bias), 없는 내용을 지어내는 문제(hallucination).
- 그렇다고 LLM이 쓸모없다는 건 아니다. 요구사항이 명확하고 문제가 단순한 경우에는 한 번에 결과물을 뽑아내는 데 탁월하고, 문서 합성이나 코드 초안 생성에도 좋다.
- 다만 비교적 복잡한 작업에서는 LLM이 정확한 컨텍스트를 유지하면서 반복적으로 해결책을 수렴시키는 게 불가능하므로, 요구사항 명확화와 코드 검증은 여전히 사람의 몫이다.
- Zed의 입장은 '사람과 에이전트의 협업'이되, 운전대는 사람이 잡아야 한다는 것. LLM은 도구일 뿐이라는 관점이다.
Evidence
- 한 개발자가 Cline + Sonnet 3.7로 Rails TDD를 하면서 '테스트 먼저 작성하고 작은 단위로 나눠서 리뷰하면 코드 vs 테스트 판단도 꽤 잘 한다'며, 최소한 주니어 엔지니어 수준은 된다고 반박했다. 다만 '완벽하진 않고 가끔 풀지 못하는 버그가 있다'고 인정했다.
- GPT5로 WebGPU/wgpu 렌더러를 만들다 런타임 에러에 막혀 LLM에 도움을 요청했더니 2시간 동안 그럴듯한 설명만 늘어놓고 해결 못 했는데, 직접 10분 생각하니 버퍼 포맷 불일치라는 단순한 문제였다는 경험담이 공유됐다. '쉬운 건 혼자 하고, 어려운 건 LLM이 못 하면 대체 뭐에 쓰냐'는 불만.
- 투자 관점에서 '인터넷도 90년대엔 엉망이었고, 트위터도 fail whale 시절이 있었지만 계속 성장했다. LLM도 2022년 대비 10배 나아졌으니 5년 뒤엔 이런 작업도 가능해질 것'이라는 기술 낙관론이 있었다.
- TDD의 Red-Green-Refactor 단계를 LLM에게 명시적으로 알려주면('지금은 RED 단계니까 테스트가 실패해야 정상') 코드 vs 테스트 판단을 훨씬 잘 한다는 실용적 팁이 공유됐다.
- Claude Code를 쓰면서 '멘탈 모델 유지 못 하는 문제'에 점점 더 좌절한다는 댓글과, 반대로 'enum 값 추가 같은 반복 작업을 여러 에이전트에 맡기고 자기는 아키텍처에 집중하니 개발 속도가 크게 올랐다'는 긍정적 경험이 공존했다.
How to Apply
- LLM에게 복잡한 작업을 맡길 때는 한 번에 큰 덩어리를 주지 말고, 문제를 작은 단위로 쪼개서 하나씩 지시하면 멘탈 모델 유지 실패로 인한 삽질을 크게 줄일 수 있다.
- TDD 기반으로 LLM을 쓸 때 Red-Green-Refactor 단계를 프롬프트에 명시하면('지금은 GREEN 단계, 이 테스트를 통과하는 최소한의 코드만 작성해') 코드/테스트 혼동 문제를 완화할 수 있다.
- LLM이 생성한 코드가 수백 줄 넘어가면 나중에 문제 발견 시 사실상 처음부터 다시 해야 하므로, 각 단계마다 직접 리뷰하고 검증한 뒤 다음 단계로 넘어가는 워크플로를 유지해야 한다.
- enum 추가 후 매칭 포인트 수정, 보일러플레이트 CRUD, 컴파일 에러 수정 같은 '지적 난이도는 낮지만 손이 많이 가는 작업'에 LLM을 집중 투입하고, 아키텍처 설계와 디버깅 판단은 직접 하는 식으로 역할을 분리하면 생산성이 올라간다.
Terminology
관련 논문
프로덕션 AI 에이전트를 GPT-5.6으로 마이그레이션: 2.2배 빠르고 27% 저렴
마케팅 웹사이트를 자동 생성하는 프로덕션 AI 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환한 실전 경험담으로, 단순 모델 교체가 아니라 eval 하네스, 툴 스키마, 캐싱, 추론 리플레이까지 손봐야 했던 과정을 구체적인 수치와 함께 정리했다.
xAI Grok Build CLI가 xAI 서버로 전송하는 데이터: 네트워크 레벨 분석
xAI의 공식 코딩 CLI 도구 Grok Build가 사용자 동의 없이 전체 Git 저장소와 .env 시크릿 파일을 xAI 서버로 업로드한다는 사실이 네트워크 트래픽 분석으로 밝혀졌다.
중요할 때 기억하라: Long-Horizon 에이전트를 위한 Proactive Memory Agent
LLM 에이전트가 긴 작업 중 중요한 정보를 잊어버리는 문제를 별도의 메모리 에이전트가 '적절한 타이밍에' 끼어들어 해결하는 방법
WebSwarm: 깊고 넓은 웹 검색을 위한 재귀적 Multi-Agent Orchestration
복잡한 웹 검색을 재귀적으로 분해하고 각 노드에 적합한 검색 모드를 동적으로 할당하는 멀티에이전트 프레임워크
웹 앱을 리버스 엔지니어링해서 AI Agent 도구로 자동 변환하기
로그인된 웹 앱의 API 호출을 브라우저에서 감시해 자동으로 MCP 도구로 변환하는 에이전트를 만들었다. 소스 코드나 공식 API 문서 없이도 Jira, Spotify 같은 서비스에 AI 어시스턴트를 붙일 수 있다.
FableCut – AI 에이전트가 조작할 수 있는 브라우저 기반 비디오 에디터 (zero deps)
타임라인 전체를 JSON 파일 하나로 표현하고 MCP/REST로 AI 에이전트가 직접 편집할 수 있는 브라우저 비디오 에디터로, Claude 같은 AI가 프롬프트 하나로 영상을 자동 컷편집하고 결과를 실시간으로 UI에 반영해준다.