--- id: P-REINFORCE-WIKI-DEV-TDD title: "테스트 주도 개발 (Test-Driven Development, TDD)" category: "10_Wiki/💻 Topics_Dev" status: verified canonical_id: "" aliases: ["TDD", "테스트 퍼스트", "Test-Driven Development"] duplicate_of: "" source_trust_level: A confidence_score: 1.0 tags: ["TDD", "Software_Testing", "Clean_Architecture", "Mocking", "Quality_Assurance"] raw_sources: ["Datacollector_Export_2026-05-02"] last_reinforced: 2026-05-02 github_commit: "" --- # [[테스트 주도 개발 (Test-Driven Development, TDD)]] ## 1. 개요 Test-Driven Development(TDD)는 실제 구현 코드를 작성하기 전에 테스트 코드를 먼저 작성하여 애플리케이션의 로직을 검증하고 설계를 발전시키는 소프트웨어 개발 방법론이다. 'Red(실패하는 테스트) - Green(테스트 통과) - Refactor(리팩토링)' 사이클을 통해 시스템의 신뢰성과 유지보수성을 극대화한다. ## 2. 핵심 원칙 - **테스트 우선 (Test-First)**: 요구사항을 만족하는 최소한의 테스트 코드를 먼저 작성. - **도메인 격리**: 비즈니스 로직을 외부 인프라(DB, UI)로부터 분리하여 독립적으로 검증. - **반복적 정제**: 테스트를 통과한 후 코드를 정제(Refactoring)하여 코드 품질을 지속적으로 관리. ## 3. 프레임워크별 실전 적용 - **모바일 (Flutter)**: 클린 아키텍처와 결합하여 Domain 계층의 유스케이스를 BLoC 등과 분리해 테스트. - **백엔드 (Spring Boot)**: 육각형 아키텍처를 기반으로 Mockito(모킹)나 H2(인메모리 DB)를 활용해 도메인 로직 검증. ## 4. 트레이드오프 및 주의사항 - **장점**: 높은 코드 신뢰성, 설계 개선, 회귀 버그(Regression) 방지. - **단점 (Mocking Caveat)**: 과도한 모킹 사용 시 도메인의 기능적 결함을 은폐하거나 테스트 코드 자체가 구현에 강결합될 위험. (기능 결함에도 불구하고 테스트는 통과하는 현상 방지 필요) ## 5. 지식 연결 (Related) - [[Clean_Architecture]]: TDD를 수행하기 위한 구조적 토대. - [[Hexagonal_Architecture]]: 외부 의존성을 배제하고 도메인을 테스트하기 위한 아키텍처. - [[Code_Review_Methodology]]: 작성된 테스트와 코드의 품질을 교차 검증하는 과정. ## 🧪 검증 상태 (Validation) - **정보 상태**: 검증 완료 (Verified) - **출처 신뢰도**: A - **검토 이유**: 안정적인 코드베이스 유지를 위한 핵심 공학적 실천 방안 정립.