개발 프로젝트를 열어보면 src/main 옆에 매번 보이는 src/test 폴더, 다들 보신 적 있으시죠?
막상 채우려면 막막하기도 하고 중요성을 잊기도 쉬운 공간인데요.
오늘은 이 폴더를 채우기 위해 꼭 알아야 할 TDD와 회귀 테스트에 대해 정리해 보려고 합니다.
☑️ TDD
: 반복 테스트를 이용한 소프트웨어 방법론
실패하는 테스트를 먼저 작성하고 통과하는 코드를 짜는 방식
개발 주기
| TDD Cycle | 설명 |
| 🔴 Red | 실패하는 테스트 코드를 먼저 작성 |
| 🟢 Green | 테스트 코드를 성공시키기 위한 최소한의 실제 코드 작성 |
| 🔵 Refactor | 중복 코드 제거, 일반화 등의 리펙토링을 수행 |
TDD가 적합한 / 부적합한 상황
| 적합 | ▶︎ 신규 기능 개발 ▶︎ 명확한 요구사항이 있는 로직 ▶︎ 비즈니스 규칙, 계산, 핵심 도메인 로직 |
| 부적합 | ▶︎ 요구사항이 자주 바뀌는 초기 기획 단계 ▶︎ UI 위주의 코드 ▶︎ 외부 API 연동 중심 로직 |
장단점
| 장점 | ▶︎ 결함 감소 ▶︎ 오버엔지니어링 방지 ▶︎ 디버깅 시간 절약 |
| 단점 | ▶︎ 초기 비용 발생 ▶︎ 학습 곡선 ▶︎ 테스트 코드 유지보수 |
☑️ 회귀 테스트
: 수정하거나 새로운 기능을 추가한 뒤, 기존 기능들이 여전히 정상적으로 동작하는지 확인하기 위한 테스트
회귀 테스트가 필요한 상황
- 기존 로직 리팩토링
- 성능 개선
- 외부 연동
- 버그 수정 후 재발 방지 목적
- 운영 이슈 재현 후 수정
주요 구성 요소
| 구성요소 | 설명 |
| 테스트 케이스 | ▶︎ 코드 변경으로 영향을 받을 가능성이 있는 기능에 대한 테스트 케이스 정의 ▶︎ 각 테스트 케이스는 입력값, 실행 절차 및 예상 결과를 명확히 작성 |
| 테스트 데이터 | ▶︎ 테스트에 필요한 입력값과 데이터를 실제 사용 환경과 유사하게 준비 ▶︎ 성공 데이터와 실패 데이터가 필요 |
| 테스트 환경 | ▶︎ 실제 운영 환경과 유사한 테스트 환경 구성 |
| 테스트 보고서 | ▶︎ 테스트 실행 결과, 발견된 결함에 대한 부분 문서화 |
유형
| 테스트 종류 | 설명 |
| 단위 회귀 테스트 | ▶︎ 개별 모듈 또는 컴포넌트 수준에서 변경으로 인한 오류가 없는지 확인 |
| 선택적 회귀 테스트 | ▶︎ 변경된 부분의 영향도를 분석해서, 영향을 받는 영역만 골라서 테스트 |
| 점진적 회귀 테스트 | ▶︎ 신규 기능 추가나 리팩토링 후에 수행, 기존 기능과 새 기능이 서로 어우러지는지 검증 |
| 교정 회귀 테스트 | ▶︎ 기능 변경 없이 코드난 수정했을 때(리팩토링, 버그 수정, 환경 설정 등) 수행 |
| 전체 회귀 테스트 | ▶︎ 시스템 전반의 안전성을 검증하기 위해 전체 테스트 스위트를 모두 돌려보는 방식 |
🧐 테스트 스위트: 테스트 케이스들을 실행 목적에 따라 하나의 그룹으로 묶어 한 번에 실행하는 기능
☑️ TDD vs 회귀 테스트
| 비교 항목 | 🛠️ TDD (테스트 주도 개발) | 🔐 회귀 테스트 (Regression Test) |
| 한 줄 정의 | 테스트를 먼저 작성하여 코드를 설계하는 방법론 | 변경 후 기존 기능의 안전성을 확인하는 테스트 |
| 주요 목적 | ▶︎ 설계 품질 향상 ▶︎ 결함 예방 및 오버 엔지니어링 방지 |
▶︎ 사이드 이펙트 방지 ▶︎ 수정으로 인한 기존 기능 오류 검출 |
| 수행 시점 | 기능 구현 전 ~ 구현 중 (Red-Green-Refactor 사이클) |
기능 구현 후 ~ 유지보수 단계 (배포 전, 리팩토링 후 등) |
| 관점 | 이 기능이 요구사항대로 동작하는가? | 수정으로 인하여 다른 기능에 오류가 있는가? |
| 테스트 범위 | 보통 작은 단위의 테스트 케이스 | 단위부터 전체 시스템(전체 스위트)까지 다양함 |
'CODING STUDY > 개발 지식 창고📚' 카테고리의 다른 글
| [아키텍처] 카프카(Kafka)의 기본 개념부터 최신 KRaft까지 (2) | 2026.02.24 |
|---|---|
| [Docker Desktop] docker desktop 설치 방법 및 컨테이너 만들기 (0) | 2026.02.10 |
| [Gemini CLI] Gemini CLI 고급 설정 & Hooks 활용 (심화편) (0) | 2026.02.03 |
| [Gemini CLI] Gemini CLI 실전 사용 가이드 (기본편) (0) | 2026.01.29 |
| [Claude Code] claude code의 고급 기능 & 자동화 (심화) (0) | 2026.01.27 |