NestJS 테스트와 CI

커버리지 기준은 숫자 문턱이 아니라 병합 전 위험 판정 흐름이다

coverage threshold, 핵심 분기, flaky 신호, CI artifact를 한 줄로 연결해 “통과 가능한 변경인지”를 판단합니다.

차단 핵심 branch 하락, artifact 누락, retry 통과만 존재
보류 changed files의 guard, pipe, exception 경로 미검증
통과 threshold와 flaky 분리가 CI required check에 반영

판단 흐름: threshold → critical branch → flaky → artifact → gate

1 기준

coverage threshold

global 평균과 핵심 모듈 기준을 분리합니다.

lines보다 branches 우선
2 경로

critical path

인증, 결제, 상태 전이, 데이터 손실 경로를 먼저 봅니다.

guard false path 포함
3 신호

flaky signal

retry로만 통과하는 spec은 커버리지 품질에서 분리합니다.

불안정 통과는 보류
4 근거

CI artifact

HTML report, diff, 실패 로그, flaky 목록을 PR에 남깁니다.

리뷰 가능한 증거
5 결정

merge gate

기준 미달이나 불안정 신호가 있으면 병합을 멈춥니다.

required check
입력 레인
읽는 신호
위험 신호
점검 기준
CI 산출물
coverage report lcov / html
line, branch, function의 하락 구간을 함께 봅니다.
line만 높고 branch가 비는 provider와 controller입니다.
핵심 파일 threshold는 전체 평균보다 높게 둡니다.
HTML report, threshold 실패 요약, 미검증 branch 목록
changed files PR diff
바뀐 guard, pipe, interceptor, transaction 경계를 표시합니다.
새 분기가 생겼는데 spec diff가 없으면 보류합니다.
변경 파일의 critical branch는 통과 기준을 따로 둡니다.
changed coverage diff, uncovered lines, reviewer note
unstable test retry / timeout
retry 통과, 시간 의존 spec, 외부 연동 mock 흔들림을 분리합니다.
flaky spec이 threshold를 채우면 품질 신호가 오염됩니다.
안정화 전에는 merge gate에서 경고나 차단으로 처리합니다.
flaky 목록, 재실행 횟수, 실패 스택, 격리 이슈 링크

위험 신호 매트릭스

차단 critical branch 미달

권한 거부, 예외, rollback branch가 비면 숫자와 무관하게 막습니다.

경고 changed file 증거 부족

새 분기나 DTO 검증이 추가됐는데 coverage diff가 설명하지 못합니다.

격리 flaky retry 통과

재실행으로 통과한 spec은 성공 신호가 아니라 안정화 대상입니다.

통과 artifact로 추적 가능

리포트와 로그가 남아 리뷰어가 누락 branch를 직접 확인할 수 있습니다.

merge gate 판정식

PASS

threshold 충족, critical branch 검증, flaky 없음, artifact 존재

HOLD

changed files의 위험 분기 설명 부족 또는 flaky 격리 전

BLOCK

기준 하락, 빈 critical branch, CI 산출물 누락

coverage report
changed files
unstable test
→
required check

근거가 없거나 흔들리면 병합하지 않습니다.