멀티에이전트 시스템 설계 Designing Multi-Agent Systems
Chapter 15 · 사례 연구

소프트웨어 엔지니어링 에이전트 구축하기

정답을 미리 알 수 없는 문제 — 코드를 쓴다는 것은 탐색과 반복, 적응적 문제 해결이다. 에이전트는 자신이 가진 툴과 그 사용을 안내하는 지침만큼만 유능하다.

에이전트 + 툴 + 메모리 다섯 가지 툴 범주 5단계 프롬프트 메타인지 툴 컨텍스트 엔지니어링

Section 1자율 패턴이 필요한 이유

14장의 결정론적 워크플로우는 해법으로 가는 길이 분명할 때 잘 작동한다. 그러나 정답을 미리 알 수 없는 상황 — 탐색과 반복, 적응적 문제 해결이 요구되는 과제라면?

소프트웨어 엔지니어링이 바로 그런 문제다. 코드를 쓴다는 것은 요구사항과 기존 코드베이스의 컨텍스트를 다루고, 작업 분해 계획을 세우고, 다양한 전문 지식을 적용하고, 테스트하고 버그를 수정하며 여러 차례 반복하는 과정이다. 고정된 워크플로우에 깔끔하게 들어맞지 않는다.

에이전트 + 툴 + 메모리

가능한 모든 동작을 스크립트로 작성하는 대신, 과제에 어떻게 접근할지를 자율적으로 결정하는 에이전트를 구축한다 — 2장 분류의 자율 패턴. 이 에이전트 + 툴 + 메모리 패턴은 모든 현대 AI 코딩 어시스턴트의 토대다 — GitHub Copilot Agent Mode, Cursor, Claude Code, OpenAI Codex, Windsurf 모두 4.1절의 실행 루프 위에 세워진 변주를 쓴다. 핵심 통찰 — 에이전트는 자신이 가진 툴과, 그 사용을 안내하는 지침만큼만 유능하다.

Section 2다섯 가지 툴 범주

똑똑하지만 경험이 적은 주니어 개발자를 멘토링한다고 상상하라 — 워크플로우의 윤곽을 그려줄 것이다. 에이전트는 한 가지가 다르다 — 기반 LLM이 이미 강력한 추론·코딩 기술을 갖췄다. 부족한 것은 파일 시스템과 상호작용하고 명령을 실행하고 상태를 지속시키는 능력 — 그것이 툴이 제공하는 운영 능력이다.

Motion · 다섯 가지 툴 범주 STEP 01 / 6
파일 · 실행 · 메모리 · 메타인지
표 · 소프트웨어 엔지니어링 에이전트의 툴 범주
범주
파일 조작read_file, write_file(3모드), list_directory, grep_search
코드 실행python_repl(즉각 테스트), bash_execute(테스트·빌드)
메모리 시스템MemoryTool — view·create·search·append·str_replace
메타인지·조율ThinkTool(연습장), TodoWriteTool·TodoReadTool
직관 · str_replace의 외과적 정밀성

str_replace 모드는 결정적이다. 이것이 없으면 에이전트는 파일 전체를 읽고, 변경을 반영해 전체를 재작성하고, 변경되지 않아야 할 부분에 에러를 끼워 넣을 위험을 감수해야 한다. str_replace는 파일 전체를 재작성하지 않고도 외과적 정밀도로 변경한다 — 에러를 줄이고 서식을 보존한다.

실행 툴이 없으면 에이전트는 눈을 감고 일하는 셈이다 — 검증할 수 없는 코드를 쓰고, 실행해 볼 수 없는 테스트를 제안하며, 실패를 디버깅할 수 없다. 메모리가 학습을 가능케 한다 — 첫 과제에서 만든 testing_pattern.md를 두 번째 과제가 검색해 적용한다. 메타인지 툴은 코드를 수정하지 않는다 — 행동에 앞서 계획하고 남은 일을 추적하는 공간을 제공한다.

Section 3프롬프트의 결정적 역할

툴은 능력을 제공하지만, 프롬프트는 안내한다. 최소한의 프롬프트("You can write code. Use tools.")는 빈약한 결과를 낳는다 — 에이전트는 언제 메모리를 확인할지, 워크플로우를 어떻게 구조화할지, 완료를 어떻게 판단할지 알지 못한다.

Listing 15.2 · 5단계 워크플로우 프롬프트
instructions = """
You are an expert software engineering agent.

## PHASE 1: MEMORY CHECK (ALWAYS DO THIS FIRST)
1. Use memory tool to view /memories directory
2. Check for relevant patterns and previous decisions

## PHASE 2: PLANNING
1. Use think tool to analyze requirements
2. Use todo_write to create a structured task list

## PHASE 3: EXECUTION
1. Use coding tools  2. Test changes immediately
3. Mark completed, start next  4. Log decisions to /memories

## PHASE 4: VERIFICATION
1. Run tests  2. Check all todos complete  3. Verify quality

## PHASE 5: COMPLETION
NEVER stop with in_progress or pending tasks.
"""
프롬프트 엔지니어링 원칙

명시적 워크플로우 구조 — 번호 매긴 단계로 무작위 건너뜀을 막는다. 메모리 우선 — 새로 시작하기 전 이전 패턴을 확인한다. 진행 상황 추적 — 구조화된 목록 유지. 완료 기준 — "완료"가 모호하면 에이전트가 너무 일찍 멈춘다. 에러 처리 지침 — 첫 실패에서 포기하지 않게 한다.

Motion · 5단계 워크플로우 — 메모리에서 완료까지 STEP 01 / 6
in_progress가 남으면 멈추지 마라

Section 4과제 완료와 컨텍스트 엔지니어링

에이전트는 LLM이 더 이상 어떤 툴도 호출하지 않기로 결정할 때 멈춘다. 짧은 과제는 프롬프트 기반 기준으로 충분하다. 그러나 장기 실행 과제 — 44개 파일을 가로지르는 50회 반복의 코드 리뷰 — 는 그렇지 않다.

함정 · 완료에는 외부 검증이 필요하다

장기 실행 과제에는 단지 멈추기로 결정한 것이 아니라 실제로 끝났는지를 외부에서 검증해 주는 훅이 필요하다. CompletionCheckHook이 할 일 목록을 읽고, 루프를 종료시키기 전에 에이전트가 실제로 작업을 마쳤는지 검증한다.

컨텍스트 엔지니어링 — 압축(compaction), 훅, 격리(4.12절) — 이 데모 에이전트를 실제 일을 처리하는 에이전트로부터 가른다. 적절한 구성 없이는 44개 파일의 리뷰가 쓰레싱이나 조기 종료, 폭주하는 토큰 비용으로 무너진다.

Section 5핵심 통찰 — 앞을 내다보며

표 · 소프트웨어 엔지니어링 에이전트의 다섯 통찰
통찰의미
툴은 전제, 보장이 아니다품질은 LLM의 학습, 프롬프트의 안내, 실행 피드백에 달려 있다
프롬프트는 전문성을 코드화한다모범 사례·워크플로우·완료 기준을 새겨 범용 LLM을 전문화한다
메모리가 향상을 가능케 한다메모리 없으면 모든 과제가 영에서 출발 — 패턴이 누적된다
완료에는 외부 검증이 필요하다장기 과제는 실제로 끝났는지 검증하는 훅이 필요하다
컨텍스트 엔지니어링이 규모를 가능케 한다압축·훅·격리가 데모와 실제 일하는 에이전트를 가른다
에필로그 · 책임의 무게중심이 이동한다

이 책에서 다룬 대부분은 AI 모델 주위에 자리한 소프트웨어 스택이다. 에이전트란 결국 AI 모델이 반복 호출되어 의사결정·행동·추론하는 하나의 루프다. 모델이 좋아질수록 책임의 무게중심이 위쪽 — 모델 — 으로 밀려 올라가고, 에이전틱 스캐폴딩은 가벼워진다. 더 나은 모델은 더 적은 스캐폴딩을 요구하며, 역설적이게도 전반적으로 더 나은 시스템으로 이어진다.

맺는 단상

다중 에이전트 시스템은 마법이 아니다 — AI 컴포넌트로 빚어진 소프트웨어다. 목표는 모든 곳에 에이전트를 쓰는 것이 아니라 말이 되는 곳에 효과적으로 쓰는 것이다. 어떤 때는 스크립트가, 어떤 때는 단일 에이전트가, 어떤 때는 결정론적 워크플로우가 더 낫다. 영속할 핵심 원칙 — 과업 분해, 평가, 관측 가능성, 인간의 감독, 책임 있는 배포. 바로 그 기초 위에 쌓아 올려라.

멀티에이전트 시스템 설계 제15장 · 소프트웨어 엔지니어링 에이전트