한 사람이 4역할을 부린다는 것 — 역할 기반 LLM 분업이 자리 잡는 풍경
결론부터
요새 LLM에게 역할을 주고 분업시키는 패턴이 빠르게 자리 잡고 있다. 한 명의 거대한 만능 agent 대신, 작은 specialist 여러 명을 두고 hub가 그들을 부리는 구조. CrewAI는 그걸 "crew", MetaGPT는 "software company", Anthropic은 "subagents"라고 부르지만 모양은 비슷하다 — 역할 정의, 권한 격리, spec 핸드오프, 그리고 hub의 통합 책임.
이 글은 그 풍경에 대한 긴 메모다. 외부 프레임워크들이 어떻게 같은 결론에 도착했는지 짚고, 픽셀 아트 타이쿤 게임을 만드는 4역할 specialist 구조를 한 사례로 끝까지 따라간다. 권한이 어떻게 분업을 지키는지, spec이 어떻게 휘발성 추론을 자산으로 바꾸는지, 그리고 — 분업이 깨지는 곳에서 무엇이 보이는지까지.
요새 LLM 분업이 자리 잡는 모양
2026년 현재, 멀티 에이전트 LLM 시스템은 더 이상 실험 단계가 아니다. 적어도 네 갈래의 자리 잡은 패턴이 있다.
CrewAI는 가장 직관적인 비유를 쓴다 — "crew". 각 agent에게 role, backstory, goal을 명시적으로 부여하고, 그들을 묶어 task를 나눠 푼다. role-based DSL이 20줄 안에 끝나서 진입 장벽이 낮다. 사람이 팀을 만드는 멘탈 모델과 정확히 일치하는 게 강점.
AutoGen / AG2는 다른 길을 간다. agent들을 하나의 GroupChat에 넣고 selector가 다음 발언자를 정한다. 토론·정제·합의가 필요한 시나리오에 강하다. CrewAI가 분업이라면 AutoGen은 회의에 가깝다.
MetaGPT는 가장 노골적인 비유다 — 소프트웨어 회사를 통째로 시뮬레이션한다. PM, Architect, Engineer, QA가 역할별 agent로 들어가고, 자연어 요구사항이 회사 안의 결재 흐름을 타고 코드로 변환된다. 회사 조직도가 그대로 agent topology가 된다.
Anthropic의 Claude Code subagents(2026 5월 시점 공식 기능)는 더 운영 친화적이다. lead agent가 계획과 통합을 책임지고, specialist subagent들이 bounded task를 들고 자기 context window·prompt·tool 권한 안에서만 일한다. 공식 문서의 표현을 그대로 가져오면 — "the main agent owns planning and integration while specialist subagents handle bounded tasks like code review, test running, frontend QA, or security checking."
네 갈래 모두 같은 결론에 도착했다. 하나의 거대 agent보다 여러 작은 specialist를 두는 게 운영하기 좋다. 이유도 비슷하다 — context window 절약, 권한 격리, 책임 경계 명확화, 그리고 한 agent의 흔들림이 다른 agent를 오염시키지 않는 isolation.
단일 agent가 모든 걸 처리하는 구조의 문제는 두 가지였다 — 컨텍스트 폭발(파일·문서·도구가 늘어날수록 한 prompt에 다 넣을 수 없다)과 책임 흐림(어디서 잘못됐는지 추적하기 어렵다). 역할별 분업은 이 두 문제를 동시에 푼다.
한 사례 — 픽셀 아트 타이쿤 게임의 4역할
이 풍경을 1인 개발 자리에 가져오면 어떻게 보일까. 2d-game-company라는 진행 중인 프로젝트가 있다. LOVE/Lua로 만드는 픽셀 아트 vampire-survivors 풍 한국식 분식 친구 게임. 한 사람이 만들고 있는데, 작업은 네 명의 specialist에게 위임된다.
- game-designer — GDD, 메커닉 spec, balance 숫자, 레벨/진행 설계. 코드·sprite·audio는 안 만짐.
- art-director — sprite, palette, Aseprite 작업, asset 소싱. 코드·audio·게임 디자인은 안 만짐.
- sound-designer — SFX/BGM prompt, Freesound CC0 큐레이션, mix spec. 코드·sprite·게임 디자인은 안 만짐.
- lua-developer —
main.lua,conf.lua,src/**. 새 메커닉 만들지 않고 designer spec을 구현만 한다.
위에 한 명이 더 있다 — specialist라고 부르는 hub agent. 사용자의 자연어 요청을 받아 어느 역할에게 어떤 chunk로 보낼지 결정하고, 결과를 종합한다.
dispatch 한 사이클을 따라가 보자. "강시(중국식 hopping zombie) 적을 추가하자"가 사용자 입력이라면:
- specialist가 game-designer를 부른다 —
docs/gdd.md에 강시 spec 추가. HP, speed, hop interval, pack spawn 규칙, 등장 시점, contact damage. - specialist가 art-director를 부른다 —
docs/style-guide.md에 강시 palette 정의, Aseprite Lua 빌드 스크립트 작성(tools/build-gangshi-idle-sprite.lua,tools/build-gangshi-walk-sprite.lua),aseprite -b --script ...실행,.aseprite마스터 +.pngexport,docs/asset-credits.md에 credit 행 두 줄 추가. - specialist가 lua-developer를 부른다 — sprite path + 16×16 dimensions + 32×16 walk strip 2-frame Anim8 grid spec을 받아
src/entities/enemy.lua에 타입 추가,src/director.lua에 spawn rule 추가, 런타임에 sine y-bob을 draw에 더해 hopping 모션 시각화. - specialist가 smoke 테스트(
pwsh -File tools/playtest.ps1)를 돌리고 사용자에게 한 문단으로 보고.
같은 패턴이 도깨비, 원귀, 호랑이, 구미호 보스, 산신령 mid-boss까지 약 22개 슬라이스에 걸쳐 반복됐다. 매 적·매 sprite·매 신규 메커닉마다 똑같은 흐름.
권한이 분업을 지킨다 — tool allowlist의 비대칭
분업이 말로만 정해져 있으면 깨지기 쉽다. 사람도 "이건 다른 팀 일이야"라고 적어 두고 실제로는 손을 댄다. LLM은 더 그렇다 — 옆 영역의 도구가 보이면 그쪽 일을 같이 처리하려는 경향이 있다.
그래서 권한 자체를 비대칭으로 깐다. 4역할의 tool allowlist를 보면:
- game-designer — Read, Write, Edit, Glob, Grep, WebSearch, WebFetch. Bash 없음.
- art-director — Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch.
- sound-designer — Read, Write, Edit, Glob, Grep, WebSearch, WebFetch. Bash 없음.
- lua-developer — Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch.
game-designer와 sound-designer는 Bash를 못 쓴다. 의도된 비대칭이다. Bash가 없으면 코드를 못 돌리고, 코드를 못 돌리면 코드 작업이 구조적으로 막힌다. game-designer가 "내가 한 번 짜볼게" 충동을 가져도 권한 자체가 그걸 못 하게 한다. spec을 쓰는 게 그가 할 수 있는 일의 전부다.
art-director와 lua-developer는 Bash가 필요하다. art-director는 aseprite -b --script ...로 sprite를 빌드해야 하고, lua-developer는 love . 또는 pwsh -File tools/playtest.ps1로 게임을 돌려야 하니까.
권한 격리는 "이 역할은 이 일만 해야 한다"는 룰을 도구 레벨에서 강제하는 메커니즘이다.
LLM이 룰을 우회하는 데 창의적이라는 걸 알면 알수록, 권한 자체를 좁히는 게 더 신뢰할 만한 가드레일이다.
CrewAI의 hierarchical process가 manager-worker를 두는 것, MetaGPT가 PM과 Engineer의 도구 셋을 분리하는 것, Anthropic이 subagent마다 독립 tool budget을 주는 것 — 모두 같은 원칙이다. 분업의 진짜 매개체는 권한이지 프롬프트가 아니다.
spec이 핸드오프 단위가 된다
분업이 4배 비싸진다는 문제는 명확하다. 한 agent로 끝낼 일을 hub → designer → art → code → hub로 최소 네 번 hop을 만든다. 매 hop마다 컨텍스트 전환 비용이 든다.
그런데 hop 사이에 무엇이 흐르는지를 보면 비용이 다르게 보인다. 단일 agent의 흐름은 휘발성 추론 trace다 — 한 prompt 안에서 한 번 결정한 게 다음 호출에 남지 않는다. 분업의 흐름은 검색 가능한 자산이다. game-designer가 쓴 spec은 docs/gdd.md에 영구 박힌다. 나중에 lua-developer가 같은 적의 balance를 다시 만질 때 그 spec을 다시 읽을 수 있다.
이 차이가 시간이 갈수록 누적된다. 한 달 뒤 "강시 hop interval을 0.8초로 줄이자"는 결정이 들어왔을 때, 분업 구조에서는 docs/gdd.md의 강시 섹션 한 줄을 고치면 끝난다. 단일 agent 구조에서는 "강시가 어떻게 정의됐었지?"를 코드와 sprite와 메모리 모두에서 다시 추론해야 한다.
spec은
이다. 매 hop이 spec을 한 줄 만들고, 그 spec이 한 달 뒤의 자기에게 메모리를 만들어 준다. 분업이 4배 비싼 자리에 4배 깊은 자산이 쌓이는 셈이다.
같은 통찰을 CrewAI는 task definition으로, AutoGen은 conversation history로, MetaGPT는 회사 문서(PRD, Design Doc)로 풀었다. 형식은 다르지만 본질은 같다 — 추론을 자산으로 영구화한다.
분업이 깨지는 곳
여기까지가 분업의 이상이다. 하지만 매 슬라이스 분업이 잘 되는 건 아니고, 깨지는 자리에서 더 흥미로운 디테일이 보인다.
Subagent 권한 외 도구가 안 보인다 — pixel-mcp의 사라짐
art-director 역할에는 처음 60개 넘는 pixel-mcp 도구가 할당됐다. create_canvas, set_palette, apply_shading, suggest_antialiasing, export_sprite — Aseprite의 거의 모든 작업을 추상화한 도구 모음. 이론상 art-director는 좌표 한 픽셀씩 박지 않고 의미 단위로 sprite를 그릴 수 있다.
실제로는 작동 안 했다. .claude/mcp.json이 subagent 세션에서 안 잡혀서 pixel-mcp 도구가 art-director에게 보이지 않았다. 첫 sprite를 만들려고 dispatch했을 때 도구 목록을 보고서야 그 사실을 알았다.
해결은 한 단계 내려가는 것이었다 — Aseprite의 내장 Lua API를 직접 쓰고, aseprite -b --script tools/build-X-sprite.lua를 Bash로 호출한다. 도깨비 idle sprite 한 장 만드는 빌드 스크립트가 133줄짜리 Lua 파일이고, 그 안에서 16×16 픽셀의 spans를 손으로 좌표 박는다.
local rows_body = {
[2] = {5, 10}, -- head top
[3] = {3, 12},
[4] = {2, 13}, -- body widest
-- ...
[15] = {4, 11}, -- feet
}이 디테일이 의미하는 건 — 분업 구조에서 권한 격리는 양날의 칼이라는 것이다. 한쪽으로는 다른 역할 일에 손 못 대게 막아주고, 다른 쪽으로는 의도한 도구가 못 보일 때 회복 경로가 좁아진다. Anthropic 문서에 적힌 "specialist subagents handle bounded tasks"의 bounded는 책임뿐 아니라 환경 자체가 좁다는 뜻이다.
한 역할이 통째로 동결될 수 있다
지금 2d-game-company의 4역할 중 한 명은 사실상 잠들어 있다 — sound-designer. assets/audio/sfx/와 assets/audio/bgm/ 디렉토리는 둘 다 .gitkeep만 있는 빈 디렉토리다. ElevenLabs prompt, Freesound CC0 큐레이션, wav/ogg commit — sound-designer의 mandate가 모두 미동작 상태.
대신 src/audio/sfx.lua(약 10KB)에 procedural SFX 생성기가 들어가 있다. lua-developer가 sound-designer의 영역을 침범해서 코드로 푼 흔적이다. 슬라이스 7E의 제목이 그걸 못 박는다 — "procedural SFX + BGM placeholder".
이게 분업이 깨진 두 번째 사례다. 4역할 중 하나가 다른 역할에게 흡수됐다. 게임이 SFX 없이는 못 굴러가지만 sound-designer가 dispatch될 자리가 매번 없었다 — 진짜 wav를 만들 시간이 매번 부족했고, 코드가 임시변통으로 그 자리를 메웠다. 그 임시변통이 8개 슬라이스째 정착됐다.
분업 구조는 모든 역할이 균등하게 호출될 거라고 가정하지 않는다.
이 발생한다. 그게 잘못은 아니지만 — 흔적이 어디 남는지(이 경우엔 src/audio/sfx.lua)는 인지하고 있어야 한다. 미래의 어느 시점에 sound-designer가 깨어나면, 그 코드를 wav로 교체하는 작업이 따로 일어나야 한다.
Cross-cutting 결정은 hub가 직접
캔버스 해상도를 320×180에서 480×270으로 바꾸는 슬라이스가 있었다. art-director는 menu-backdrop을 리스케일해야 했고, lua-developer는 push 라이브러리 설정과 좌표계를 흔들어야 했고, game-designer는 HUD 비율과 hero select cell 크기를 재산정해야 했다.
이건 한 specialist에게 위임하면 다른 영역이 빠진다. 그래서 hub가 직접 셋을 동시에 조율하고, 다음 슬라이스에서 "per-state layout sweep"으로 잔여 좌표 정리까지 끌고 갔다.
같은 패턴을 CrewAI는 hierarchical process의 manager agent로 풀고, AutoGen은 GroupChat의 selector로 풀고, Claude Code subagents는 lead agent의 "planning and integration"으로 푼다. 분업이 안 되는 영역에 hub가 들어간다는 게 모든 프레임워크의 공통 결론이다.
닫는 글
역할 기반 LLM 분업은 더 이상 "흥미로운 실험"이 아니다. CrewAI, AutoGen, MetaGPT, Claude Code subagents가 비슷한 결론에 도착했고, 1인 개발자의 작은 픽셀 아트 게임 프로젝트에서도 같은 모양이 굴러간다. 차이는 규모일 뿐 구조는 같다 — 역할 정의, 권한 격리, spec 핸드오프, hub의 통합 책임.
운영해 보면서 배운 한 줄은 — 권한이 룰보다 신뢰할 만하다. "이 역할은 이걸 안 한다"고 적어두는 것보다, 그 일을 할 도구 자체를 손에 안 쥐여주는 게 결과가 안정적이다. 분업의 진짜 매개체는 프롬프트가 아니라 tool allowlist다.
그리고 두 번째 한 줄 — 분업이 깨지는 자리가 가장 흥미롭다. 어떤 역할이 잠들고, 어떤 도구가 안 보이고, 어떤 결정은 hub가 직접 해야 하는지. 깨지는 자리를 인식하고 그 흔적을 코드와 spec에 남기면, 분업 구조는 깨진 채로도 운영된다. 깨지지 않는 구조보다, 깨진 자리를 추적할 수 있는 구조가 1인 운영에선 더 가치 있다.
같은 모양의 분업을 만들려는 누군가에게 한 줄 — 첫날부터 tool allowlist를 비대칭으로 깔아라. 그 한 결정이 매 슬라이스의 분업 신뢰도를 결정한다.
Sources: