Ch11. Spec 기반 개발
구조화된 개발 프로세스, 반복 개발, 요구사항 관리
Spec 기반 개발은 구조화된 문서를 통해 기능을 설계하고 구현하는 체계적인 접근법입니다. 요구사항 정의부터 설계, 구현, 테스트까지 전 과정을 문서화하고, Kiro와 함께 반복적으로 개선해나가는 개발 방법론입니다.
Spec 워크플로우 유형 (v0.10+)
v0.10부터 3가지 Spec 워크플로우를 지원합니다.
| 워크플로우 | 용도 | 시작점 | 추가 시기 |
|---|---|---|---|
| Requirements-First | 신규 기능 개발 | 요구사항 정의 | 기존 |
| Design-First | 브라운필드 앱 확장 | 기술 아키텍처/설계 | v0.10 |
| Bugfix | 버그 수정 | 이슈 설명 | v0.10 |
Design-First Workflow (v0.10)
기존 코드베이스에 기능을 추가할 때, 기술 아키텍처나 설계도에서 시작합니다. 고수준/저수준 설계, 시스템 다이어그램을 제공하면 Kiro가 실현 가능한 요구사항을 자동 도출합니다.
Bugfix Spec (v0.10)
버그 수정 전용 Spec으로, 최소 변경으로 문제를 해결하는 것에 집중합니다.
- Current Behavior: 현재 버그 동작 기술
- Root Cause Analysis: 근본 원인 자동 분석
- Fix Design: 최소 변경 수정 설계
Spec 시스템 개념
Spec의 구성 요소
- 요구사항 정의: 기능의 목적과 범위
- 기술적 설계: 아키텍처와 구현 방법
- 인터페이스 명세: API, UI, 데이터 구조
- 구현 계획: 단계별 작업 분할
- 검증 기준: 테스트 시나리오와 성공 조건
Spec 문서 구조
기본 Spec 템플릿
---
title: '사용자 인증 시스템'
version: '1.0'
status: 'draft' # draft, review, approved, implemented
created: '2024-02-01'
updated: '2024-02-01'
author: '개발팀'
reviewers: ['팀리더', '시니어개발자']
---
# 사용자 인증 시스템 Spec
## 1. 개요
### 목적
안전하고 사용자 친화적인 인증 시스템을 구현하여
사용자 계정 관리와 보안을 강화합니다.
### 범위
- 이메일/비밀번호 기반 로그인
- 소셜 로그인 (Google, GitHub)
- JWT 토큰 기반 세션 관리
- 비밀번호 재설정 기능
### 제외 사항
- 2FA (다음 버전에서 구현)
- 기업 SSO 연동
## 2. 요구사항
### 기능 요구사항
- FR-001: 사용자는 이메일과 비밀번호로 로그인할 수 있어야 함
- FR-002: 사용자는 Google 계정으로 로그인할 수 있어야 함
- FR-003: 사용자는 비밀번호를 재설정할 수 있어야 함
- FR-004: 시스템은 JWT 토큰을 발급하고 검증해야 함
### 비기능 요구사항
- NFR-001: 로그인 응답 시간은 2초 이내여야 함
- NFR-002: 비밀번호는 bcrypt로 해시화되어야 함
- NFR-003: JWT 토큰은 15분 후 만료되어야 함
- NFR-004: 모든 인증 시도는 로그로 기록되어야 함
## 3. 기술적 설계
### 아키텍처
```mermaid
flowchart LR
A[Client] --> B[Auth Controller]
B --> C[Auth Service]
C --> D[User Repository]
C --> E[JWT Service]
C --> F[OAuth Service]
D --> G[Database]
```데이터 모델
외부 스키마 참조: #[[file:database/auth-schema.sql]]
API 설계
OpenAPI 스펙 참조: #[[file:docs/auth-api.yaml]]
4. 구현 계획
Phase 1: 기본 인증 (1주)
- 사용자 모델 및 데이터베이스 스키마
- 회원가입 API
- 로그인 API
- JWT 토큰 발급/검증
Phase 2: 소셜 로그인 (1주)
- Google OAuth 연동
- GitHub OAuth 연동
- 소셜 계정 연결 로직
Phase 3: 비밀번호 관리 (3일)
- 비밀번호 재설정 요청
- 이메일 인증 링크 발송
- 새 비밀번호 설정
Phase 4: 보안 강화 (2일)
- 로그인 시도 제한
- 보안 로그 기록
- 토큰 갱신 메커니즘
5. 테스트 계획
단위 테스트
- Auth Service 메서드 테스트
- JWT 토큰 생성/검증 테스트
- 비밀번호 해시/검증 테스트
통합 테스트
- 로그인 플로우 전체 테스트
- 소셜 로그인 연동 테스트
- 비밀번호 재설정 플로우 테스트
E2E 테스트
- 사용자 회원가입부터 로그인까지
- 소셜 로그인 전체 플로우
- 비밀번호 재설정 전체 플로우
6. 검증 기준
성공 조건
- 모든 기능 요구사항 구현 완료
- 단위 테스트 커버리지 90% 이상
- 통합 테스트 모두 통과
- 성능 요구사항 충족
검토 체크리스트
- 코드 리뷰 완료
- 보안 검토 완료
- 성능 테스트 완료
- 문서화 완료
7. 위험 요소 및 대응
기술적 위험
- OAuth 연동 복잡성 → 단계별 구현으로 리스크 분산
- JWT 보안 이슈 → 업계 표준 라이브러리 사용
일정 위험
- 소셜 로그인 연동 지연 → 기본 인증 우선 완성 후 진행
8. 참고 자료
## 외부 파일 참조 시스템
### API 스펙 참조
```yaml
# docs/auth-api.yaml
openapi: 3.0.0
info:
title: Authentication API
version: 1.0.0
paths:
/auth/login:
post:
summary: User login
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
password:
type: string
minLength: 8
responses:
'200':
description: Login successful
content:
application/json:
schema:
type: object
properties:
token:
type: string
user:
$ref: '#/components/schemas/User'데이터베이스 스키마 참조
-- database/auth-schema.sql
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255),
name VARCHAR(255) NOT NULL,
avatar_url VARCHAR(500),
email_verified BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE oauth_accounts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
provider VARCHAR(50) NOT NULL,
provider_id VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(provider, provider_id)
);
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_oauth_provider ON oauth_accounts(provider, provider_id);디자인 목업 참조
# Spec 문서에서 Figma 파일 참조
UI/UX 디자인: #[[file:design/auth-mockups.figma]]
사용자 플로우: #[[file:design/user-flow.png]]Kiro와 함께하는 Spec 기반 개발
1. Spec 문서 작성 지원
"사용자 프로필 관리 기능에 대한 Spec 문서를 작성해주세요.
다음 요구사항을 포함해주세요:
- 프로필 정보 조회/수정
- 아바타 이미지 업로드
- 계정 설정 관리"
Kiro가 구조화된 Spec 문서 템플릿을 생성하고,
요구사항 분석부터 구현 계획까지 체계적으로 작성2. 단계별 구현 가이드
"Auth Spec의 Phase 1을 구현해주세요"
Kiro가 Spec 문서를 참조하여:
- 사용자 모델 생성
- 데이터베이스 마이그레이션 작성
- 회원가입/로그인 API 구현
- JWT 토큰 서비스 구현3. 테스트 케이스 자동 생성
"Auth Spec에 정의된 테스트 계획에 따라
단위 테스트와 통합 테스트를 작성해주세요"
Kiro가 Spec의 테스트 계획을 바탕으로:
- 각 기능별 단위 테스트 생성
- API 엔드포인트 통합 테스트 작성
- E2E 테스트 시나리오 구현반복적 개선 프로세스
1. 요구사항 변경 관리
# Spec 문서 업데이트
"고객 피드백에 따라 2FA 기능을 추가해야 합니다.
Auth Spec을 업데이트하고 구현 계획을 수정해주세요"
Kiro가 기존 Spec을 분석하고:
- 새로운 요구사항 통합
- 기술적 설계 업데이트
- 구현 계획 재조정
- 영향도 분석 제공2. 설계 검토 및 개선
"현재 Auth Spec의 보안 측면을 검토하고
개선 사항을 제안해주세요"
Kiro가 보안 관점에서:
- 현재 설계의 취약점 분석
- 업계 베스트 프랙티스와 비교
- 구체적인 개선 방안 제시
- Spec 문서 업데이트3. 구현 진행 상황 추적
"Auth Spec의 현재 구현 진행 상황을 확인하고
다음 단계를 계획해주세요"
Kiro가 진행 상황을 분석하고:
- 완료된 작업 체크
- 남은 작업 우선순위 조정
- 일정 재검토
- 다음 스프린트 계획 수립팀 협업에서의 Spec 활용
1. 역할별 Spec 활용
# 백엔드 개발자
"Auth Spec의 API 설계 부분을 구현해주세요"
→ API 엔드포인트, 비즈니스 로직, 데이터베이스 연동
# 프론트엔드 개발자
"Auth Spec의 UI 요구사항에 따라 로그인 폼을 만들어주세요"
→ React 컴포넌트, 폼 검증, API 연동
# QA 엔지니어
"Auth Spec의 테스트 계획에 따라 테스트 케이스를 작성해주세요"
→ 테스트 시나리오, 자동화 스크립트, 검증 기준2. 코드 리뷰에서 Spec 활용
"이 PR이 Auth Spec의 요구사항을 모두 충족하는지 확인해주세요"
Kiro가 Spec과 구현 코드를 비교하여:
- 요구사항 충족도 검증
- 설계 원칙 준수 확인
- 누락된 기능 식별
- 개선 제안 제공3. 문서 동기화
"구현이 완료된 후 Auth Spec 문서를 실제 구현에 맞게 업데이트해주세요"
Kiro가 코드를 분석하여:
- 실제 구현과 Spec의 차이점 식별
- 문서 내용 업데이트
- 새로운 기능 추가 반영
- 버전 관리 및 변경 이력 기록복잡한 프로젝트에서의 Spec 관리
1. 마이크로서비스 Spec 관리
# 서비스별 Spec 구조
project/
├── specs/
│ ├── auth-service.md
│ ├── user-service.md
│ ├── product-service.md
│ └── order-service.md
├── shared/
│ ├── api-contracts/
│ ├── data-models/
│ └── integration-specs/2. 의존성 관리
# 서비스 간 의존성을 Spec에 명시
## 의존 서비스
- User Service: 사용자 정보 조회 API
- Notification Service: 이메일 발송 API
- Audit Service: 로그 기록 API
## 제공 인터페이스
- Authentication API: 토큰 발급/검증
- User Profile API: 사용자 프로필 관리3. 버전 관리
# Spec 버전 관리 전략
auth-service-spec/
├── v1.0/
│ ├── spec.md
│ ├── api-spec.yaml
│ └── implementation/
├── v1.1/
│ ├── spec.md
│ ├── api-spec.yaml
│ ├── migration-guide.md
│ └── implementation/모범 사례
1. Spec 작성 원칙
✅ 좋은 Spec:
- 명확하고 측정 가능한 요구사항
- 구체적인 구현 가이드
- 외부 파일 참조로 상세 정보 제공
- 단계별 구현 계획
❌ 나쁜 Spec:
- 모호한 요구사항
- 구현 세부사항 누락
- 테스트 계획 부재
- 일정 계획 없음2. 반복 주기 관리
# 2주 스프린트 기준
Week 1:
- Spec 작성/검토
- 설계 확정
- Phase 1 구현 시작
Week 2:
- Phase 1 완료
- 테스트 및 검증
- Spec 업데이트
- 다음 Phase 계획3. 품질 관리
# Spec 품질 체크리스트
- [ ] 모든 요구사항이 명확히 정의됨
- [ ] 기술적 설계가 구체적임
- [ ] 외부 참조 파일이 최신 상태임
- [ ] 테스트 계획이 포함됨
- [ ] 위험 요소가 식별됨
- [ ] 팀 리뷰가 완료됨Spec 기반 개발은 복잡한 소프트웨어 프로젝트를 체계적으로 관리하고, 팀 전체가 동일한 목표와 방향을 공유할 수 있게 하는 강력한 방법론입니다. Kiro와 함께 사용하면 문서 작성부터 구현, 테스트까지 전 과정을 효율적으로 자동화할 수 있습니다.
참고 문서
- Kiro 공식 사이트: https://kiro.dev
- Spec 워크플로우 블로그: https://kiro.dev/blog/specs-bugfix-and-design-first/
- Kiro 문서: https://kiro.dev/docs