반응형
Claude Code, Cursor, Copilot 다 있어요. 근데 왜 아직도 버그가 나고 코드가 망가질까요.
개발자: "알림 시스템 추가해줘"
에이전트: 토스트 메시지 컴포넌트 생성
개발자: "아니, 백엔드 알림이 필요해"
에이전트: 이메일 알림 서비스 생성
개발자: "SMS도 지원해야 해"
에이전트: SMS 프로바이더 추가
개발자: "재시도 로직은?"
에이전트: 지수 백오프 추가
...10번의 반복...
→ 처음 의도와 다른 코드베이스
→ 일관성 없는 패턴
→ 아무도 전체를 이해 못 함
이게 Vibe Coding의 한계예요. 500줄 넘어가면 무너지기 시작해요.
Spec-Driven Development가 뭔가
Vibe Coding:
아이디어 → 프롬프트 → 코드 → 문제 → 재프롬프트 → ...
Spec-Driven Development (SDD):
아이디어 → 스펙 작성 → 스펙 검증 → 에이전트 실행 → 검증
핵심 철학:
"코드를 먼저 쓰지 말고
스펙을 먼저 써라.
에이전트는 스펙을 구현한다."
Stack Overflow 2026년 3월 연구:
스펙 먼저 쓴 팀:
롤백률 67% 낮음
스펙 없이 프롬프트한 팀:
롤백률 67% 높음
스펙의 6가지 필수 요소
좋은 스펙은 에이전트가 질문 없이 실행할 수 있어야 해요.
## 1. 목표와 범위 (Goal & Scope)
무엇을 만드는가, 왜 만드는가
명시적으로 범위 밖인 것도 적기
## 2. 기능 요구사항 (Functional Requirements)
구체적이고 테스트 가능한 문장으로
"사용자가 이메일/비밀번호로 로그인할 수 있다.
세션은 비활동 30분 후 만료된다.
로그인 실패는 IP당 분당 5회로 제한된다."
## 3. 제약 조건 (Constraints)
기술 스택, 보안 요건, 성능 기준
기존 코드베이스 패턴
## 4. 이전 결정 사항 (Prior Decisions)
이미 내린 아키텍처 결정
에이전트가 재발명하지 않도록
## 5. 작업 분해 (Task Breakdown)
단계별 순서
의존성 관계
## 6. 검증 기준 (Verification Criteria)
Given/When/Then 형식
완료 조건
실전 예시 — 알림 시스템
# SPEC: 주문 알림 시스템
## 목표
주문 상태 변화 시 사용자에게 멀티채널 알림 발송
## 범위
### 포함
- 이메일 (SendGrid), SMS (Twilio), 인앱 알림 (WebSocket)
- 사용자 채널별 on/off 설정
- 조용한 시간 (오후 10시~오전 8시 SMS 차단)
### 제외
- 푸시 알림 (모바일 앱 없음)
- 마케팅 알림 (이건 별도 시스템)
- 관리자 알림
## 기능 요구사항
- 각 채널은 독립적으로 on/off 가능
- 알림 타입: 주문 확인, 결제 완료, 배송 시작, 배달 완료, 실패
- 실패 시 재시도: 3회, 지수 백오프 (1분, 5분, 15분)
- 배달 추적 로그 보관 30일
## 기술 제약
- 기존 PostgreSQL 사용 (새 DB 금지)
- TypeScript, Express 기존 스택
- 이메일 서비스는 SendGrid만 (Mailgun 사용 금지)
## 이전 결정
- 사용자 인증은 JWT 사용 (세션 기반 금지)
- 에러 처리는 커스텀 AppError 클래스 사용
## 검증 기준
- Given 주문이 배송 시작됨
When 알림 서비스 호출
Then 이메일 + SMS + 인앱 동시 발송 (채널 활성 시)
- Given SMS가 비활성화된 사용자
When 알림 서비스 호출
Then 이메일 + 인앱만 발송, SMS 없음
- Given 오후 11시
When SMS 발송 시도
Then SMS 큐에 다음날 오전 8시로 지연 등록
이 스펙을 에이전트에게 주면:
에이전트가 알아서 결정하는 것들:
→ 파일 구조
→ 클래스/함수명
→ 내부 구현 방식
에이전트가 절대 넘지 않는 것들:
→ 범위 밖 기능 추가
→ 금지된 라이브러리 사용
→ 기존 패턴 무시
SDD 워크플로우
1단계: 아이디어 명확화
─────────────────────
"어떤 문제를 해결하는가?"
한 문장으로 못 쓰면 → 아직 이해 못 한 것
2단계: 스펙 초안 작성
─────────────────────
에이전트에게 스펙 초안을 쓰게 해도 됨:
"다음 기능의 스펙을 작성해줘:
목표, 범위(포함/제외), 기능 요구사항,
기술 제약, 검증 기준 포함해서.
[기능 설명]"
→ 에이전트 초안 → 내가 검토/수정
3단계: 스펙 검증
─────────────────────
자가 점검 질문들:
□ 에이전트가 질문 없이 실행할 수 있는가?
□ 완료 조건이 명확한가?
□ 범위 밖이 명시되어 있는가?
□ 기존 코드베이스 맥락이 있는가?
4단계: 에이전트 실행
─────────────────────
"다음 스펙을 구현해줘: [스펙 내용]
구현 전에 실행 계획부터 보여줘."
→ /plan 명령으로 계획 먼저 확인
→ 계획 승인 후 구현
5단계: 스펙 대비 검증
─────────────────────
"구현된 코드가 스펙의 검증 기준을
충족하는지 확인해줘."
→ 스펙이 테스트 기준이 됨
Vibe Coding vs SDD 언제 뭘 쓸까
Vibe Coding이 맞는 경우:
→ 5분 안에 리뷰 가능한 작은 작업
→ 일회성 스크립트
→ 빠른 프로토타입 검증
→ 단순 버그 수정
SDD가 필요한 경우:
→ 500줄 이상 기능
→ 여러 세션에 걸친 작업
→ 여러 서비스에 걸친 변경
→ 되돌리기 비싼 작업
→ 팀원/다른 에이전트와 협업
→ 프로덕션 배포 예정
실용적 기준:
"리뷰하는데 5분 이상 걸릴 것 같으면 스펙을 먼저 써라"
CLAUDE.md와의 관계
CLAUDE.md = 프로젝트 레벨 스펙
(항상 적용되는 전역 컨텍스트)
기능 스펙 = 태스크 레벨 스펙
(이번 작업에만 적용)
두 개가 함께 작동:
CLAUDE.md: "이 프로젝트는 TypeScript, Jest, PostgreSQL 사용"
기능 스펙: "알림 시스템을 이렇게 만들어라"
# CLAUDE.md (프로젝트 전역 컨텍스트)
## 기술 스택
- TypeScript 5.3, Node.js 22
- PostgreSQL (Prisma ORM)
- Jest + Supertest (테스트)
## 코딩 컨벤션
- 함수형 우선, 클래스는 서비스 레이어만
- 에러는 AppError 클래스 사용
- 모든 비동기는 async/await
## 금지 사항
- any 타입 사용 금지
- console.log 프로덕션 코드에 금지
- DB 직접 쿼리 금지 (반드시 Prisma 사용)
## 테스트
- 모든 서비스 함수 단위 테스트 필수
- 커버리지 80% 이상 유지
스펙을 버전 관리하는 법
스펙도 코드처럼 관리해요.
프로젝트 구조:
myproject/
CLAUDE.md # 전역 컨텍스트
specs/
auth.md # 인증 스펙
notifications.md # 알림 스펙 (현재 작업)
payments.md # 결제 스펙
src/
...
스펙을 Git에 커밋하면:
✅ 에이전트가 이전 결정 사항 참조 가능
✅ PR 리뷰 시 스펙도 함께 리뷰
✅ 코드 변경 시 스펙도 업데이트 강제
✅ 팀원이 새로 합류해도 맥락 즉시 파악
흔한 실수
❌ 너무 광범위한 스펙
"인증 모듈을 더 좋게 리팩토링해줘"
→ 에이전트가 범위를 알 수 없음
✅ 구체적인 스펙
"src/lib/auth/session.ts만 리팩토링해줘.
토큰 만료 처리를 분리하고,
기존 인터페이스는 유지해."
❌ 검증 기준 없는 스펙
"회원가입 기능 만들어줘"
✅ 검증 기준 있는 스펙
"Given 유효한 이메일과 비밀번호
When 회원가입 요청
Then 인증 이메일 발송, DB에 사용자 생성,
중복 이메일이면 400 에러"
❌ 구현 방법 지정
"Redux로 상태 관리해줘"
✅ 결과 지정
"장바구니 상태가 페이지 리로드 후에도 유지되어야 해.
(구현 방법은 에이전트가 결정)"
제목 추천
- Spec-Driven Development — Vibe Coding 다음 단계, AI 에이전트 시대 개발 방법론
- AI 에이전트에게 코드 시키기 전에 이걸 먼저 써라 — Spec-Driven Development 실전
- 롤백률 67% 줄이는 방법 — AI 코딩 에이전트를 위한 스펙 작성법
2번이 제일 클릭 당길 것 같아요. 골라보세요.
반응형
'AI Development' 카테고리의 다른 글
| Gemini CLI 가이드 — Claude Code 대신 $0에 쓰는 법 (1) | 2026.04.21 |
|---|---|
| AI 에이전트 트래픽 7,851% 폭증 — 바뀌어야 하는 서버 설계, 방어 전략 (0) | 2026.04.20 |
| OpenAI Codex 대규모 업데이트 — 컴퓨터를 대신 써주는 AI 코딩 도구 (0) | 2026.04.17 |
| OpenAI Agents SDK 대규모 업데이트 — Claude Code Routines 나온 지 3일 만에 맞불 (2) | 2026.04.17 |
| AI 코딩 툴 보안 실전 — Claude Code 소스 유출 이후 달라진 공격 지형 (0) | 2026.04.16 |