---
type: knowledge
domain: engineering
status: active
last-reviewed: 2026-07-07
---

# 테스트 전략 실전

> 한 줄 정의
> 테스트 전략은 "다 테스트하자"가 아니라 **한정된 자원을 어디에 쓸지의 배분**이다. 탐색적 테스트·판정은 [[QA 원리]], 실패 추적은 [[디버깅 원리]] — 여기는 자동 테스트를 어디에 얼마나 쓰는지를 다룬다.

## 테스트는 회귀 방지 자산이다

테스트의 가치는 "지금 맞다"의 확인이 아니라 **"미래에 누가 깨뜨리면 알려준다"**에 있다. 그래서 판단 기준은 하나다: *이 테스트는 어떤 미래의 실수를 잡아주는가?* — 답이 없으면 그 테스트는 유지비만 나가는 자산이다.

## 자원 배분 — 가성비 순서

| 우선순위 | 대상 | 이유 |
|---------|------|------|
| 1 | 도메인 로직 · 돈 계산 · 경계값 | 틀리면 비싸고, 테스트는 싸다 |
| 2 | 외부 연동의 **실패 시나리오** (타임아웃·5xx·malformed) | 성공 케이스보다 실패 처리가 깨진다 → [[백엔드 원리]] |
| 3 | 핵심 사용자 플로우 E2E 소수 | 가입→핵심 행동→결제, "돈 흐름 투어"의 자동화판 → [[QA 원리]] |
| 후순위 | 프레임워크 동작 자체, 단순 위임 코드, getter | 내 코드의 실수를 잡지 않는다 |

커버리지는 목표가 아니라 **미커버 영역을 찾는 계기판**이다 — 숫자를 채우기 위한 assert 없는 테스트는 커버리지의 굿하트 법칙이다 ([[지표와 실험]]).

## 행동을 테스트하라, 구현을 말고

- 테스트는 "입력 → 관찰 가능한 결과"를 검증한다. 내부 호출 순서·비공개 상태를 검증하면 **리팩토링만 해도 깨진다** — 그 테스트는 회귀가 아니라 변경 자체를 탐지하는 것이다.
- mock이 겹겹이 쌓이면 구현 결합의 신호다: mock을 통과시키느라 테스트가 구현의 복사본이 된다. 통합 지점은 가짜 서버·인메모리 구현으로 바꾸는 편이 신호가 크다.
- 좋은 테스트의 리트머스: **리팩토링에는 살아남고, 버그에는 죽는다.**

## 테스트 모양 — 역피라미드만 피하면 된다

피라미드(단위 다수)든 트로피(통합 중심)든 논쟁은 부차적이다. 진짜 실패 모양은 하나: **느리고 깨지기 쉬운 E2E 산더미 + 단위 테스트 공백**. E2E는 핵심 플로우 소수로 유지하고, 로직 검증은 아래 계층으로 내린다.

## 플레이키 테스트 — 재시도로 덮지 않는다

가끔 실패하는 테스트를 방치하면 "빨간불 = 무시"가 학습되고, 그날부터 테스트 스위트 전체가 죽은 것이다.

| 3대 원인 | 전형 | 처방 |
|---------|------|------|
| 시간 | `sleep(3)` 후 단언, 오늘 날짜 의존 | 조건 대기(폴링·이벤트), 시계 주입 |
| 순서 | 앞 테스트가 남긴 상태에 의존 | 테스트별 독립 셋업, 무작위 순서로 돌려 검증 |
| 공유 자원 | 같은 DB 행·포트·파일을 병렬 테스트가 경합 | 테스트별 격리 (고유 키·컨테이너) |

운영 규율: 플레이키 발견 → 즉시 격리(quarantine) + 수리 기한 — 격리가 무덤이 되면 안 된다.

## 테스트 데이터

- 테스트 안에서 **그 테스트에 의미 있는 값만** 눈에 보이게 — 나머지는 빌더/팩토리의 기본값으로. 20줄짜리 셋업 복붙은 어떤 값이 검증 대상인지 숨긴다.
- 매직 값 금지: `assert total == 13200` 대신 계산 근거가 보이게 (`가격 12000 + 세금 10%`).
- 프로덕션 데이터 복사 금지 — PII가 테스트 DB·로그로 번진다 → [[개인정보와 컴플라이언스]].

## LLM 산출물 테스트 — 결정적 단언은 안 통한다

- 출력 문자열 완전 일치 단언은 모델·온도에 따라 무작위로 깨진다. 대신 **속성·계약을 검증**한다: 스키마 유효, 필수 필드 존재, 금지 패턴 부재, 길이·형식.
- 품질 판정은 평가 셋(eval)의 몫이다 — 케이스 셋 + 채점 기준을 버전 관리하고 배포 게이트에 연결 → [[Agent Evaluation]] · [[Ground Truth]] · [[배포 전략 실전]].

## 관련 문서

- [[QA 원리]] — 탐색적 테스트·버그 서식지 (자동화가 못 잡는 것)
- [[디버깅 원리]] — 실패한 테스트에서 원인으로
- [[지표와 실험]] — 커버리지 굿하트
- [[Agent Evaluation]] — LLM 시스템의 품질 게이트
