- Authors

- Name
- Youngju Kim
- @fjvbn20031
SW 개발 방법론과 Vibe 코딩: 전통적 방법론에서 AI 보조 개발까지 완전 가이드
소프트웨어 개발 방법론은 수십 년에 걸쳐 진화해 왔습니다. 1970년대의 Waterfall에서 2001년 Agile 선언, 그리고 2025년 이후 AI 보조 개발(Vibe Coding)까지 — 각 시대마다 더 나은 소프트웨어를 만들기 위한 끊임없는 혁신이 있었습니다. 이 가이드에서는 전통적 방법론의 핵심 원리를 이해하고, AI를 개발 생명주기 전반에 통합하는 실전 전략을 다룹니다.
1. 전통적 SW 개발 방법론
1.1 Waterfall (폭포수 모델)
Waterfall은 Winston Royce가 1970년에 제안한 순차적 개발 방법론입니다. 각 단계가 완료된 후에야 다음 단계로 진행합니다.
단계별 흐름:
요구사항 분석 → 시스템 설계 → 구현 → 통합/테스팅 → 운영/유지보수
장점:
- 명확한 단계와 산출물 정의
- 문서화가 철저해 유지보수 용이
- 고정된 범위와 예산 관리에 적합
- 규제 산업(의료, 항공우주)에서 여전히 활용
단점:
- 요구사항 변경에 매우 경직됨
- 테스팅이 후반부에 집중되어 결함 발견이 늦음
- 고객 피드백 반영 시점이 너무 늦음
- 대형 프로젝트에서 실패율이 높음 (CHAOS Report 기준 약 70%)
Waterfall이 적합한 상황:
- 요구사항이 완전히 확정된 단기 프로젝트
- 규제/컴플라이언스 요구가 강한 도메인
- 외주 계약 기반 고정 범위 프로젝트
1.2 V-Model
V-Model은 Waterfall의 변형으로, 각 개발 단계에 대응하는 테스트 단계를 명시적으로 매핑합니다.
요구사항 분석 ────────────── 인수 테스트
시스템 설계 ──────────── 시스템 테스트
아키텍처 설계 ──────── 통합 테스트
상세 설계 ────────── 단위 테스트
구현 (코딩)
V-Model의 핵심은 "검증(Verification)과 확인(Validation)"입니다. 왼쪽 내리막은 개발 활동, 오른쪽 오르막은 테스트 활동입니다. 임베디드 시스템, 의료기기 소프트웨어 개발에 널리 사용됩니다.
1.3 Spiral 모델
Barry Boehm이 1986년에 제안한 Spiral 모델은 리스크 분석을 중심에 두는 반복적 방법론입니다.
4개 사분면 반복:
- 목표/대안/제약 식별
- 리스크 평가 및 해결
- 개발 및 검증
- 다음 단계 계획
각 나선(Spiral)은 이전보다 더 구체적인 산출물을 만들어 냅니다. 리스크가 높은 대형 정부/국방 프로젝트에 적합하지만, 복잡성과 비용이 높습니다.
2. Agile 방법론
2.1 Agile 선언의 탄생
2001년 2월, 17명의 소프트웨어 개발자들이 유타주 스노우버드에 모여 Agile 소프트웨어 개발 선언을 작성했습니다.
4가지 핵심 가치:
- 프로세스와 도구보다 개인과 상호작용
- 포괄적인 문서보다 작동하는 소프트웨어
- 계약 협상보다 고객과의 협력
- 계획 준수보다 변화에 대응
12가지 원칙 중 핵심:
- 고객 만족을 위한 지속적인 소프트웨어 배포
- 짧은 주기(2주~2개월)로 작동하는 소프트웨어 제공
- 기술적 탁월성과 좋은 설계에 지속적 관심
- 단순성 — 하지 않아도 되는 일의 양을 최대화하는 기술
2.2 Scrum 프레임워크
Scrum은 가장 널리 사용되는 Agile 프레임워크입니다. Ken Schwaber와 Jeff Sutherland가 1990년대에 개발했습니다.
Scrum의 세 가지 기둥:
- 투명성(Transparency): 프로세스와 작업을 모두에게 공개
- 검사(Inspection): 진행 상황을 정기적으로 검토
- 적응(Adaptation): 문제 발견 시 즉각적으로 조정
Scrum 팀 구성:
- Product Owner(PO): 백로그 관리, 비즈니스 가치 최대화
- Scrum Master: 팀 코치, 장애물 제거, 프로세스 수호
- Development Team: 자기 조직적, 3~9명의 개발자
Scrum Ceremonies (이벤트):
| 이벤트 | 주기 | 목적 | 시간 제한 |
|---|---|---|---|
| Sprint | 1~4주 | 개발 주기 | - |
| Sprint Planning | Sprint 시작 | 목표와 작업 선정 | 8시간/month |
| Daily Scrum | 매일 | 동기화, 장애물 식별 | 15분 |
| Sprint Review | Sprint 종료 | 완료 작업 데모 | 4시간/month |
| Sprint Retrospective | Sprint 종료 | 프로세스 개선 | 3시간/month |
Scrum Artifacts (산출물):
- Product Backlog: 모든 요구사항의 우선순위 목록 (PO 소유)
- Sprint Backlog: 현재 Sprint에서 완료할 작업 목록
- Increment: Sprint 완료 시 나오는 잠재적 릴리즈 가능 제품
Definition of Done (완료의 정의) 예시:
- 코드 리뷰 완료
- 단위 테스트 통과 (커버리지 80% 이상)
- 통합 테스트 통과
- 문서 업데이트
- 스테이징 환경 배포 성공
2.3 Kanban
Kanban은 Toyota의 생산 시스템에서 유래한 시각적 워크플로우 관리 방법론입니다.
핵심 원칙:
- 현재 하는 일을 시각화
- 진행 중 작업(WIP) 제한
- 흐름 관리
- 명시적 프로세스 정책
- 피드백 루프 구현
- 협력적 개선
Kanban 보드 예시:
Backlog | Ready | In Progress (WIP: 3) | Review | Done
--------|-------|----------------------|--------|------
Task 5 |Task 4 | Task 3 |Task 2 |Task 1
Task 6 | | Task 7 | |
| | Task 8 | |
Scrum vs Kanban:
| 항목 | Scrum | Kanban |
|---|---|---|
| 주기 | 고정 Sprint | 연속 흐름 |
| 변경 | Sprint 내 변경 제한 | 언제든 변경 가능 |
| 역할 | 명확한 역할 | 역할 없음 |
| 측정 | 속도(Velocity) | 사이클 타임, 처리량 |
| 적합한 팀 | 새 기능 개발 | 유지보수, 운영 |
2.4 SAFe (Scaled Agile Framework)
SAFe는 대규모 조직에서 Agile을 적용하기 위한 프레임워크입니다.
4가지 레벨:
- Team Level: Scrum/Kanban 팀 (5~11명)
- Program Level: Agile Release Train (ART, 50~125명)
- Large Solution Level: 복수 ART 조율
- Portfolio Level: 전략과 투자 결정
Program Increment (PI) Planning:
- 8~12주 주기
- 전체 ART가 참여하는 2일 이벤트
- 다음 PI의 목표와 의존성 시각화
3. 요구사항 단계와 Vibe 코딩
3.1 User Stories + AI
전통적 User Story 형식:
As a [role], I want [feature], so that [benefit].
AI를 활용한 User Story 작성:
프롬프트 예시:
다음 비즈니스 요구사항에서 User Story를 작성해줘:
"온라인 쇼핑몰에서 고객이 구매 이력을 기반으로 추천 상품을 받고 싶어한다"
다음 형식으로 작성해:
- User Story (As/I want/So that)
- Acceptance Criteria (Given/When/Then)
- Story Points 추정
- 잠재적 엣지 케이스 5개
AI가 생성한 User Story 예시:
User Story: 맞춤형 상품 추천
As a 반복 구매 고객,
I want 내 구매 이력을 기반한 상품 추천을 홈 화면에서 보고 싶다,
So that 관심 있는 상품을 빠르게 발견할 수 있다.
Acceptance Criteria:
- Given 3회 이상 구매한 고객이
- When 홈 화면에 접속하면
- Then 구매 이력 기반 상위 10개 추천 상품이 표시된다
- And 각 추천에는 "왜 추천되었는지" 이유가 표시된다
- And 관심 없음 버튼으로 해당 추천을 숨길 수 있다
3.2 Event Storming with Claude
Event Storming은 Alberto Brandolini가 개발한 도메인 탐색 워크숍 기법입니다. Claude와 함께 디지털 Event Storming을 진행할 수 있습니다.
워크숍 진행 방식:
1단계: 도메인 이벤트 식별 (오렌지 포스트잇)
→ Claude에게 "이커머스 주문 도메인에서 발생하는 모든 도메인 이벤트를 나열해줘"
2단계: 커맨드 식별 (파란 포스트잇)
→ "각 이벤트를 발생시키는 커맨드는 무엇인가?"
3단계: 액터 식별 (노란 포스트잇)
→ "각 커맨드를 실행하는 액터(사용자/시스템)는?"
4단계: 집합체(Aggregate) 식별 (노란 큰 포스트잇)
→ "관련 이벤트와 커맨드를 묶는 집합체는?"
5단계: 경계 컨텍스트(Bounded Context) 정의
→ "집합체들을 논리적 경계로 그룹화"
Claude 프롬프트 예시:
이커머스 플랫폼의 주문 처리 도메인에 대한 Event Storming을 진행해줘.
다음 형식으로 출력해:
도메인 이벤트 (과거형):
- OrderPlaced (주문됨)
- PaymentProcessed (결제처리됨)
...
각 이벤트에 대해:
1. 트리거 커맨드
2. 선행 조건
3. 후행 결과
4. 관련 집합체
3.3 CLAUDE.md로 컨텍스트 제공
CLAUDE.md는 Claude가 프로젝트를 처음 만났을 때 읽는 컨텍스트 파일입니다. 요구사항 단계부터 잘 작성된 CLAUDE.md는 AI 보조 개발의 품질을 크게 향상시킵니다.
CLAUDE.md 작성 예시:
# 프로젝트 컨텍스트
## 프로젝트 개요
이커머스 플랫폼 백엔드 서비스 (Node.js + TypeScript)
## 기술 스택
- Runtime: Node.js 20, TypeScript 5.3
- Framework: NestJS 10
- Database: PostgreSQL 16 (TypeORM), Redis 7
- Message Queue: RabbitMQ
- Testing: Jest, Supertest
## 아키텍처 결정
- DDD (Domain-Driven Design) 적용
- CQRS 패턴 사용
- 이벤트 소싱 적용 (주문 집합체)
## 코딩 컨벤션
- 함수형 프로그래밍 선호
- 불변 데이터 구조 사용
- 에러 처리: Result 타입 패턴 (neverthrow 라이브러리)
## 금지 사항
- any 타입 사용 금지
- console.log 대신 winston logger 사용
- 직접 DB 쿼리 금지 (Repository 패턴 사용)
## 테스트 요구사항
- 단위 테스트 커버리지 90% 이상
- 모든 public API에 통합 테스트 필수
- E2E 테스트: 핵심 결제 플로우
## 현재 작업 컨텍스트
Sprint 3: 추천 시스템 구현
- User Story: US-123 구매 이력 기반 추천
- 기술 부채: 레거시 ProductService 리팩토링 필요
4. 설계 단계: AI 보조 설계
4.1 Architecture Decision Records (ADRs)
ADR은 중요한 아키텍처 결정과 그 이유를 기록하는 문서입니다. AI와 함께 ADR을 작성하면 더 체계적인 의사결정이 가능합니다.
ADR 템플릿:
# ADR-001: 데이터베이스 선택
## 상태
승인됨 (2026-03-17)
## 컨텍스트
추천 시스템을 위한 데이터베이스가 필요함.
요구사항:
- 초당 10,000 읽기 요청 처리
- 상품 간 관계 그래프 쿼리
- 실시간 업데이트
## 결정
PostgreSQL + pgvector 확장을 선택
## 대안들
1. MongoDB: 유연한 스키마이나 복잡한 관계 쿼리 약함
2. Neo4j: 그래프 DB이나 팀 경험 부족, 운영 복잡성
3. Redis + PostgreSQL: 캐싱 레이어 추가로 성능 보완
## 결과
- 긍정: pgvector로 벡터 유사도 검색 가능
- 긍정: 팀의 PostgreSQL 경험 활용
- 부정: 초대형 그래프 쿼리 시 성능 한계
- 부정: pgvector 설정 및 인덱싱 학습 필요
Claude를 활용한 ADR 작성:
우리 시스템의 메시지 큐 선택에 대한 ADR을 작성해줘.
요구사항:
- 초당 50,000 메시지 처리
- At-least-once 전달 보장
- 메시지 재처리 기능
- 팀 규모: 5명
후보: Kafka, RabbitMQ, AWS SQS
각 대안의 장단점과 우리 상황에 맞는 최적 선택을 추천해줘.
4.2 AI 보조 설계 리뷰
다음 클래스 다이어그램을 리뷰해줘:
[다이어그램 붙여넣기]
확인 사항:
1. SOLID 원칙 위반 여부
2. 순환 의존성
3. 인터페이스 분리 기회
4. DDD 관점에서 집합체 경계 적절성
5. 개선 제안
5. 구현 단계: Vibe 코딩 실전
5.1 AI 보조 TDD (Test-Driven Development)
전통적 TDD: Red → Green → Refactor
AI 보조 TDD 흐름:
1. 요구사항을 Claude에게 설명
2. Claude가 실패하는 테스트 코드 생성
3. 개발자가 테스트 검증 및 수정
4. Claude가 테스트를 통과하는 최소 구현 생성
5. 개발자와 Claude가 함께 리팩토링
예시 — 추천 서비스 TDD:
// 1단계: Claude가 생성한 실패 테스트
describe('RecommendationService', () => {
describe('getPersonalizedRecommendations', () => {
it('should return top 10 recommendations based on purchase history', async () => {
// Arrange
const userId = 'user-123'
const purchaseHistory = [
{ productId: 'prod-1', category: 'Electronics', purchasedAt: new Date() },
{ productId: 'prod-2', category: 'Electronics', purchasedAt: new Date() },
]
mockPurchaseRepository.findByUserId.mockResolvedValue(purchaseHistory)
mockProductRepository.findSimilar.mockResolvedValue(generateMockProducts(15))
// Act
const result = await service.getPersonalizedRecommendations(userId)
// Assert
expect(result).toHaveLength(10)
expect(result[0]).toMatchObject({
productId: expect.any(String),
score: expect.any(Number),
reason: expect.any(String),
})
expect(mockPurchaseRepository.findByUserId).toHaveBeenCalledWith(userId)
})
it('should return popular products when no purchase history exists', async () => {
mockPurchaseRepository.findByUserId.mockResolvedValue([])
mockProductRepository.findPopular.mockResolvedValue(generateMockProducts(10))
const result = await service.getPersonalizedRecommendations('new-user')
expect(result).toHaveLength(10)
expect(mockProductRepository.findPopular).toHaveBeenCalled()
})
it('should exclude already purchased products from recommendations', async () => {
const purchasedProductId = 'prod-already-bought'
mockPurchaseRepository.findByUserId.mockResolvedValue([
{ productId: purchasedProductId, category: 'Books' },
])
const recommendations = generateMockProducts(12)
recommendations[0].productId = purchasedProductId
mockProductRepository.findSimilar.mockResolvedValue(recommendations)
const result = await service.getPersonalizedRecommendations('user-123')
expect(result.map((r) => r.productId)).not.toContain(purchasedProductId)
})
})
})
5.2 AI와 페어 프로그래밍
효과적인 AI 페어 프로그래밍 패턴:
패턴 1: 드라이버-네비게이터
- 개발자가 드라이버(코드 작성)
- Claude가 네비게이터(방향 제시, 리뷰)
패턴 2: 핑퐁 TDD
- Claude가 테스트 작성
- 개발자가 구현
- Claude가 리팩토링 제안
- 개발자가 수락/거절
패턴 3: 탐험적 프로그래밍
- Claude가 빠른 프로토타입 생성
- 개발자가 실험하고 학습
- 함께 프로덕션 수준으로 개선
5.3 Claude를 활용한 코드 리뷰
다음 PR을 리뷰해줘:
[코드 붙여넣기]
리뷰 기준:
1. 버그 및 엣지 케이스
2. 성능 이슈 (N+1 쿼리, 메모리 누수)
3. 보안 취약점 (SQL 인젝션, XSS, 인증/인가)
4. 코딩 컨벤션 (CLAUDE.md 기준)
5. 테스트 커버리지
6. 가독성 및 유지보수성
각 이슈에 대해:
- 심각도: Critical/Major/Minor
- 개선 코드 예시
- 이유 설명
6. 테스팅 단계: AI 기반 테스트 자동화
6.1 AI 생성 테스트 케이스
동등 분할 및 경계값 분석 자동화:
다음 함수에 대한 포괄적인 테스트 케이스를 생성해줘:
function calculateShippingFee(weight: number, distance: number, isPremium: boolean): number
비즈니스 규칙:
- 무게 0~1kg: 기본 요금 3000원
- 무게 1~5kg: kg당 500원 추가
- 무게 5kg 초과: 전체 20% 추가
- 거리 100km 초과: 1000원 추가
- 프리미엄 회원: 10% 할인
- 무료 배송 조건: 프리미엄 + 10kg 미만
테스트 케이스 생성 시:
- 경계값 분석 적용
- 동등 분할 클래스 식별
- 음수, 0, 극단값 포함
- 복합 조건 테스트
- Jest 형식으로 작성
6.2 뮤테이션 테스팅
뮤테이션 테스팅은 테스트의 품질을 측정하는 방법입니다. 코드에 의도적인 버그(뮤턴트)를 주입해 테스트가 이를 잡아내는지 확인합니다.
Stryker.js 설정:
{
"mutate": ["src/**/*.ts", "!src/**/*.spec.ts"],
"testRunner": "jest",
"reporters": ["html", "clear-text", "progress"],
"thresholds": {
"high": 80,
"low": 60,
"break": 50
}
}
Claude를 활용한 뮤테이션 분석:
다음 뮤테이션 테스팅 결과를 분석하고 생존한 뮤턴트를 잡는 테스트를 추가해줘:
생존한 뮤턴트:
1. Line 45: `>` 를 `>=` 로 변경 → 테스트가 감지 못함
2. Line 72: `&&` 를 `||` 로 변경 → 테스트가 감지 못함
현재 테스트 코드:
[테스트 코드 붙여넣기]
6.3 속성 기반 테스팅 (Property-Based Testing)
import fc from 'fast-check'
describe('ShippingFee property-based tests', () => {
it('premium members always pay less than or equal to regular members', () => {
fc.assert(
fc.property(
fc.float({ min: 0.1, max: 100 }),
fc.integer({ min: 1, max: 1000 }),
(weight, distance) => {
const regularFee = calculateShippingFee(weight, distance, false)
const premiumFee = calculateShippingFee(weight, distance, true)
return premiumFee <= regularFee
}
)
)
})
it('shipping fee is always positive', () => {
fc.assert(
fc.property(
fc.float({ min: 0, max: 1000 }),
fc.integer({ min: 0, max: 10000 }),
fc.boolean(),
(weight, distance, isPremium) => {
return calculateShippingFee(weight, distance, isPremium) >= 0
}
)
)
})
})
7. CLAUDE.md 작성 완전 가이드
효과적인 CLAUDE.md는 AI 보조 개발의 품질을 결정짓는 핵심 요소입니다. 다음 템플릿을 참고하세요.
# 프로젝트명 - Claude 컨텍스트 파일
## 프로젝트 개요
- 목적: [한 문장 설명]
- 단계: [MVP/Beta/Production]
- 팀 규모: [n명]
- 주요 도메인: [이커머스/핀테크/헬스케어 등]
## 기술 스택
### Backend
- Language: TypeScript 5.3 (strict mode)
- Runtime: Node.js 20 LTS
- Framework: NestJS 10
- ORM: TypeORM 0.3
- Database: PostgreSQL 16
### Frontend
- Framework: Next.js 14 (App Router)
- Styling: Tailwind CSS 3.4
- State: Zustand 4
### Infrastructure
- Container: Docker + Kubernetes
- CI/CD: GitHub Actions
- Cloud: AWS (EKS, RDS, ElastiCache)
## 아키텍처
- 패턴: DDD + CQRS + Event Sourcing
- 서비스 분리: 모놀리식 (모듈러 모놀리스)
- API: REST + WebSocket (실시간 알림)
## 코딩 규칙
### 필수 준수
- TypeScript strict 모드: any 타입 절대 금지
- 함수 길이: 30줄 이하 유지
- 중첩 깊이: 3단계 이하
- 에러 처리: Result 패턴 (neverthrow)
- 로깅: winston logger (console.log 금지)
### 명명 규칙
- 클래스: PascalCase
- 함수/변수: camelCase
- 상수: UPPER_SNAKE_CASE
- 파일: kebab-case.ts
- 테스트 파일: \*.spec.ts
### 디렉토리 구조
src/ modules/ order/ domain/ entities/ value-objects/ events/ application/ commands/ queries/ infrastructure/ repositories/ presentation/ controllers/ dtos/
## 테스트 전략
- 단위 테스트: 도메인 로직 (커버리지 90%)
- 통합 테스트: API 엔드포인트 (커버리지 80%)
- E2E: 핵심 비즈니스 플로우 3개
- 뮤테이션 테스트: 뮤턴트 생존율 20% 이하
## 현재 Sprint 컨텍스트
Sprint 3 (2026-03-10 ~ 2026-03-24)
목표: 추천 시스템 v1 출시
진행 중:
- US-123: 구매 이력 기반 추천 API (담당: 김개발)
- US-124: 실시간 추천 업데이트 WebSocket (담당: 이개발)
완료:
- US-121: 추천 알고리즘 기초 구현
- US-122: 추천 데이터 파이프라인
기술 부채:
- ProductService 레거시 코드 리팩토링 필요
- 테스트 없는 UserRepository 커버리지 향상 필요
## 금지 사항
- 직접 SQL 쿼리 (Repository 패턴 사용)
- 동기 파일 I/O (fs.readFileSync 등)
- 하드코딩된 시크릿 (환경 변수 사용)
- 무분별한 try-catch (에러 타입 명시)
8. 실전 예시: Next.js 앱 Vibe 코딩 워크플로우
8.1 프로젝트 초기화
# 1단계: 프로젝트 생성
npx create-next-app@latest my-shop --typescript --tailwind --app
# 2단계: CLAUDE.md 생성 (첫 번째 Claude 프롬프트)
CLAUDE.md 초기 설정 프롬프트:
Next.js 14 App Router 기반 이커머스 프로젝트를 시작합니다.
다음 요구사항으로 CLAUDE.md를 생성해줘:
- 상품 목록, 상세, 장바구니, 결제 기능
- TypeScript strict 모드
- Tailwind CSS + shadcn/ui
- Zustand 상태관리
- React Query v5 서버 상태관리
- Prisma + PostgreSQL
- NextAuth.js 인증
- Vitest + Testing Library 테스트
팀 컨벤션:
- 컴포넌트: shadcn/ui 기반 원자적 설계
- 서버 컴포넌트 기본, 클라이언트 컴포넌트 최소화
- 에러 바운더리 + Suspense 패턴
8.2 기능 개발 플로우
1단계: User Story 정의
US-001: 장바구니에 상품 추가
As a 쇼핑객
I want 상품 상세 페이지에서 장바구니에 상품을 추가하고 싶다
So that 나중에 한번에 구매할 수 있다
Acceptance Criteria:
- Given 상품 상세 페이지에서
- When "장바구니 담기" 버튼을 클릭하면
- Then 선택한 옵션(사이즈, 색상)과 수량이 장바구니에 추가된다
- And 장바구니 아이콘에 수량이 업데이트된다
- And 이미 담긴 상품은 수량이 증가한다
2단계: 구현 요청
위 User Story를 구현해줘.
기술 요구사항:
- Zustand store에 cartSlice 추가
- Server Action으로 장바구니 서버 동기화
- Optimistic Update 적용
- 재고 체크 (useQuery로 실시간)
- 에러 처리: 재고 부족, 네트워크 오류
- 애니메이션: 장바구니 아이콘 bounce
파일 구조:
- store/cartStore.ts
- components/product/AddToCartButton.tsx
- app/actions/cart.ts
- hooks/useCart.ts
3단계: 테스트 작성
위 구현에 대한 테스트를 작성해줘:
1. cartStore 단위 테스트 (Vitest)
2. AddToCartButton 컴포넌트 테스트 (Testing Library)
3. cart Server Action 통합 테스트
4. 속성 기반 테스트 (재고 제약 조건)
퀴즈로 배우기
Q1: Waterfall과 Agile의 근본적인 차이점은?
정답: Waterfall은 단계가 순차적으로 진행되며 변경이 어렵고, Agile은 짧은 반복 주기(Sprint)로 변경에 유연하게 대응합니다.
설명: Waterfall에서는 요구사항 단계가 완전히 끝난 뒤 설계 단계가 시작되므로, 설계 단계에서 요구사항을 변경하면 막대한 비용이 발생합니다. 반면 Agile은 2~4주 Sprint마다 작동하는 소프트웨어를 배포하므로, 고객 피드백을 빠르게 반영할 수 있습니다. Agile 선언의 핵심 가치는 "계획 준수보다 변화에 대응"입니다.
Q2: Scrum의 세 가지 역할과 각각의 책임은?
정답: Product Owner(백로그 우선순위 관리), Scrum Master(팀 코치 및 장애물 제거), Development Team(자기 조직적 개발)입니다.
설명: Product Owner는 비즈니스 가치를 최대화하기 위해 Product Backlog를 관리하고 우선순위를 결정합니다. Scrum Master는 팀이 Scrum을 올바르게 실천하도록 코칭하고 조직적 장애물을 제거합니다. Development Team은 Sprint 내에서 자기 조직적으로 작업을 분배하고 실행합니다. 중요한 점은 Scrum Master는 팀의 관리자가 아닌 서번트 리더입니다.
Q3: CLAUDE.md에 포함해야 할 핵심 내용 5가지는?
정답: 기술 스택, 아키텍처 결정, 코딩 컨벤션, 현재 Sprint 컨텍스트, 금지 사항입니다.
설명: CLAUDE.md는 AI가 프로젝트 컨텍스트를 이해하는 핵심 파일입니다. 기술 스택은 AI가 올바른 언어/프레임워크로 코드를 생성하게 합니다. 아키텍처 결정(ADR 요약)은 일관된 설계를 유지하게 합니다. 코딩 컨벤션은 팀 스타일에 맞는 코드를 생성하게 합니다. 현재 Sprint 컨텍스트는 현재 집중해야 할 작업을 명확히 합니다. 금지 사항은 알려진 안티패턴을 피하게 합니다.
Q4: V-Model에서 "V자" 구조의 의미는?
정답: 왼쪽 내리막은 개발 단계(요구사항→설계→구현), 오른쪽 오르막은 각 개발 단계에 대응하는 테스트 단계를 나타내며, 검증(Verification)과 확인(Validation)의 대응 관계를 보여줍니다.
설명: V-Model의 핵심은 각 개발 단계가 대응하는 테스트 단계를 갖는다는 것입니다. 예를 들어 요구사항 분석 단계는 인수 테스트와 대응하고, 시스템 설계는 시스템 테스트와, 상세 설계는 단위 테스트와 대응합니다. 이를 통해 테스트 계획을 개발 초기부터 수립할 수 있으며, 특히 임베디드 시스템과 의료기기 소프트웨어 개발에 널리 사용됩니다.
Q5: 속성 기반 테스팅(Property-Based Testing)이 일반 단위 테스팅보다 유리한 상황은?
정답: 비즈니스 불변식(invariant)을 검증할 때, 엣지 케이스가 많을 때, 수학적 속성이 있는 함수(정렬, 역함수 등)를 테스트할 때 유리합니다.
설명: 일반 단위 테스팅은 개발자가 생각한 케이스만 테스트합니다. 속성 기반 테스팅은 "프리미엄 회원은 항상 일반 회원보다 적게 낸다"와 같은 속성(property)을 정의하면, 수천 개의 랜덤 입력을 자동 생성해 해당 속성이 항상 성립하는지 검증합니다. 개발자가 미처 생각하지 못한 엣지 케이스를 발견하는 데 매우 효과적이며, fast-check(JavaScript) 또는 Hypothesis(Python)와 같은 라이브러리로 구현합니다.
Q6: Event Storming의 주요 구성 요소와 각 색상의 의미는?
정답: 오렌지(도메인 이벤트), 파랑(커맨드), 노랑 작은 것(액터), 노랑 큰 것(집합체), 분홍(핫스팟/문제점), 초록(외부 시스템)입니다.
설명: Event Storming은 도메인 전문가와 개발자가 함께 도메인을 탐색하는 워크숍입니다. 도메인 이벤트(오렌지)는 "주문됨", "결제처리됨"처럼 과거에 발생한 사실을 나타냅니다. 커맨드(파랑)는 이벤트를 트리거하는 액션입니다. 집합체(노랑 큰 것)는 관련 이벤트와 커맨드를 묶는 논리적 단위입니다. AI(Claude)를 활용하면 디지털 환경에서 빠르게 Event Storming을 진행할 수 있습니다.
정리
SW 개발 방법론의 선택은 프로젝트 성패를 결정하는 중요한 요소입니다. 전통적 방법론(Waterfall, V-Model)은 요구사항이 명확하고 변경이 적은 도메인에서 가치 있고, Agile(Scrum, Kanban)은 불확실성이 높고 빠른 피드백이 필요한 현대적 제품 개발에 적합합니다.
Vibe 코딩은 특정 방법론을 대체하는 것이 아니라, 모든 방법론의 각 단계에서 AI를 강력한 파트너로 활용하는 개발 패러다임입니다. CLAUDE.md로 컨텍스트를 명확히 제공하고, User Story에서 코드 생성, 테스트 자동화까지 AI를 전략적으로 통합하면 개발 생산성을 획기적으로 향상시킬 수 있습니다.
다음 단계:
- CLAUDE.md 템플릿을 현재 프로젝트에 적용
- Sprint Planning에 AI 보조 User Story 작성 도입
- 뮤테이션 테스팅으로 테스트 품질 측정 시작