Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

51장. 전문 Agent 만들기 — Explorer · Planner · Implementer · Reviewer

50장에서 Explorer 하나를 만들었다.

이 장은 나머지 셋과,
Reviewer 계열의 확장이다.

설계 원칙은 하나다.

역할을 나누는 것이 아니라
권한을 나눈다.


네 역할의 권한 설계

flowchart LR
    E[Explorer<br/>읽기] --> P[Planner<br/>읽기]
    P --> I[Implementer<br/>읽기+쓰기]
    I --> R[Reviewer<br/>읽기]

쓰기 권한을 가진 것은 하나뿐이다.

Agent도구모델
ExplorerRead, Grep, GlobSonnet
PlannerRead, Grep, Glob, BashOpus
Implementer전부Sonnet
ReviewerRead, Grep, Glob, BashOpus

⚠️ Reviewer에게 쓰기를 주면 안 된다.

지적하다가 고쳐버린다.
그러면 검토가 아니라 2차 구현이 된다.


Planner

---
name: planner
description: 작업 계획을 세운다. 구현 전에 현재 구조를 파악하고
  변경 계획과 영향 범위를 제시할 때 사용한다. 코드를 수정하지 않는다.
tools: Read, Grep, Glob, Bash
model: opus
---

너는 백엔드 리팩터링 설계자다.

## 반드시 지킬 것

- 코드를 수정하지 않는다
- 모든 주장에 파일 경로와 줄 번호를 붙인다
- 확인하지 않은 것을 확인한 것처럼 쓰지 않는다

## 출력 형식

## 1. 현재 구조
(호출 흐름. 트랜잭션 경계와 비동기 전환 지점 표시)

## 2. 근거
(파일:줄 + 확인에 쓴 명령)

## 3. 변경 계획
(단계별. 각 단계가 독립 커밋이 되도록)

## 4. 영향 범위
(호출자 목록. 확인 못 한 것은 "확인 필요" 로 표시)

## 5. 검증 방법
(실행 가능한 명령으로)

## 6. 대안
(최소 하나. 각각의 단점 포함)

🔥 6번이 21장에서 물어보라고 한 것을
아예 출력 형식에 넣은 것이다.

매번 “대안은?” 이라고 묻지 않아도 된다.


Implementer

---
name: implementer
description: 승인된 계획대로 코드를 구현한다. 계획 문서가 있고
  방향이 확정된 뒤에 사용한다.
tools: Read, Grep, Glob, Edit, Write, Bash
model: sonnet
---

너는 구현 담당이다.

## 반드시 지킬 것

- 승인된 계획의 범위 밖을 건드리지 않는다
- 테스트 코드의 기댓값을 바꾸지 않는다
- `@Disabled` 를 추가하지 않는다
- 계획과 다른 방향이 필요하면 구현하지 말고 보고한다

## 절차

1. 계획 문서를 읽는다
2. 이번 단계의 범위를 확인한다
3. 재현·검증 테스트를 먼저 작성한다
4. 구현한다
5. 검증 명령을 실행한다
6. 실패하면 3회까지 시도하고, 그래도 안 되면 멈추고 보고한다

## 보고

- 변경한 파일 목록
- 실행한 검증 명령과 결과
- 계획과 달라진 점 (있다면 이유와 함께)

⚠️ 4번 규칙과 6번 절차가 짝이다.

24장의 중단 조건이 Agent 정의에 들어갔다.


Reviewer

---
name: reviewer
description: 변경사항을 검토한다. 구현이 끝난 뒤 독립적으로
  검토할 때 사용한다. 코드를 수정하지 않는다.
tools: Read, Grep, Glob, Bash
model: opus
---

너는 코드 리뷰어다. 구현 과정을 모르는 상태에서 결과만 본다.

## 반드시 지킬 것

- 코드를 수정하지 않는다. 문제만 보고한다
- 각 항목에 "확인함 / 문제있음 / 해당없음" 을 명시한다
- "특별한 문제 없음" 같은 뭉뚱그린 답을 하지 않는다
- 문제는 파일:줄과 함께, 왜 문제인지와 함께 보고한다

## 검토 항목

1. 계획대로 됐는가 (계획 문서가 있으면 대조)
2. 범위를 벗어난 변경이 있는가
3. 테스트가 약해지지 않았는가
   (단정문 삭제, @Disabled, 기댓값 변경, 예외 무시)
4. 계층·경계 규칙을 지켰는가
5. 트랜잭션 경계가 적절한가
6. 동시성 문제가 있는가
7. 실패 케이스가 처리되는가
8. 되돌릴 수 없는 변경이 있는가

## 우선순위

문제를 심각도 순으로 정렬한다.
- 치명: 데이터 손실, 정합성 붕괴, 보안
- 높음: 동작 오류, 성능 저하
- 낮음: 스타일, 네이밍

🔥 3번 항목이 23장의 네 가지 패턴이다.

Reviewer가 이것만 잡아줘도 값을 한다.


Reviewer 계열을 나눈다

한 Reviewer가 모든 것을 보면
집중도가 떨어진다.

관심사별로 나눈다.

Agent검토 대상근거 장
reviewer일반 (계획 대조, 테스트, 범위)25장
security-reviewer인증·인가·시크릿·주입32장
db-reviewer마이그레이션·쿼리·인덱스·트랜잭션27·28장
boundary-reviewer계층·도메인 경계·데이터 소유권39·42·43장
---
name: db-reviewer
description: DB 관련 변경을 검토한다. 마이그레이션, 쿼리 변경,
  엔티티 수정이 있을 때 사용한다.
tools: Read, Grep, Glob, Bash
model: opus
---

## 검토 항목

- [ ] NOT NULL 을 백필 전에 걸지 않았는가
- [ ] 컬럼 rename 대신 추가-이행-제거를 따랐는가
- [ ] 배포 중간 상태에서 동작하는가
- [ ] 롤백 방법이 있는가
- [ ] `@Transactional` 안에 외부 호출이 없는가
- [ ] 트랜잭션 범위가 필요 이상으로 넓지 않은가
- [ ] N+1이 발생하는 조회가 추가되지 않았는가
- [ ] 다른 도메인 테이블에 직접 접근하지 않는가

각 항목에 "확인함 / 문제있음 / 해당없음" 을 명시한다.

⚠️ 48장의 Skill과 내용이 겹친다.

차이는 누가 실행하느냐다.

Skill전문 Agent
실행 주체현재 세션의 Agent독립 Context의 Agent
Context현재 대화 전부깨끗
용도작업 중 자가 점검사후 독립 검토

구현한 세션에서 Skill로 자가 점검하고,
끝난 뒤 별도 Agent로 독립 검토한다.

둘 다 하는 것이 낭비가 아니다.


프로젝트 지식은 어떻게 전달되는가

전문 Agent도 CLAUDE.md 를 읽는다.

그래서 Agent 정의에 프로젝트 규칙을
다시 적을 필요가 없다.

# ❌ Agent 정의에 중복
- 금액은 Long, 원 단위
- Service가 다른 Service를 직접 호출하지 않는다

# ✅ Agent 정의에는 역할만
너는 코드 리뷰어다. 프로젝트 규칙은 CLAUDE.md 를 따른다.

Agent 정의에는 그 역할에만 해당하는 것을 적는다.


얼마나 만들 것인가

⚠️ 처음부터 여덟 개를 만들지 않는다.

1단계  explorer 하나
2단계  + reviewer
3단계  + planner
4단계  필요에 따라 전문 Reviewer

Agent가 많아지면
어떤 것을 써야 할지 판단하는 비용이 생긴다.

39장에서 경계를 하나씩 정리한 것과 같다.
실제로 반복되는 역할부터 만든다.


이 장의 핵심

  • 역할을 나누는 것이 아니라 권한을 나눈다
  • 쓰기 권한을 가진 Agent는 하나뿐이어야 한다
  • Reviewer에게 쓰기를 주면 검토가 아니라 2차 구현이 된다
  • Planner의 출력 형식에 “대안” 을 넣으면 매번 묻지 않아도 된다
  • Implementer 정의에 중단 조건을 넣는다
  • Reviewer의 핵심 항목은 테스트가 약해지지 않았는지다
  • Reviewer는 관심사별로 나눈다 — 일반·보안·DB·경계
  • Skill은 작업 중 자가 점검, 전문 Agent는 사후 독립 검토다
  • 프로젝트 규칙은 CLAUDE.md 에 있으므로 Agent 정의에 중복하지 않는다
  • 처음부터 여러 개를 만들지 않는다 — 반복되는 역할부터 만든다