개념
모듈 4의 Go/No-Go 회의가 매주 돌아가면
모듈 4 레슨 5에서 릴리스 Go/No-Go 의사결정을 배웠다. 실행 현황은 "무엇을 안 했는가"로, 미해결 결함은 "왜 안 고쳤는가"까지, 잔존 리스크는 가장 쓰기 어렵고 가장 중요한 칸이었다. 그리고 QA는 결정하지 않지만 침묵하지도 않는다.
그 회의가 분기마다 한 번이면 사람이 한 장짜리 요약을 손으로 만들 수 있다. 매주 돌아가면 불가능하다. 매주 사람이 반나절씩 결과를 모으면 게이트는 곧 "지난주와 비슷하네요, Go" 로 형식화된다. 주간 게이트가 살아 있으려면 요약은 기계가 만들고, 사람은 판단이 필요한 곳에만 시간을 쓰는 구조가 필요하다.
이 레슨의 게이트는 세 단계다.
[1] 자동 판정 판정 레코드(레슨 4)를 조회해 차단 규칙을 적용하고 게이트 요약을 만든다
↓
[2] 사람 검토 QA가 요약의 경고·예외 요청·판정 불가·표본 검토 결과를 확인한다
↓
[3] 결정과 기록 책임자가 Go / 조건부 Go / No-Go 를 결정하고, 결정과 근거를 기록한다1단계 — 차단 규칙은 코드로, 문장이 아니라 조건으로
차단 규칙이 문서에 문장으로만 있으면 매주 해석이 달라진다. 규칙을 조건으로 쓰고, 버전을 붙여 저장소에 둔다.
# gate-policy.yaml — version 2026.09.1 (owner: qa-platform)
block:
- id: B1
when: "verdict == 'fail' and criterion.severity in ['critical', 'high'] and layer in ['regression', 'pre-release']"
reason: "치명·높음 기준 실패"
- id: B2
when: "criterion.category == 'upgrade' and verdict != 'pass'"
reason: "업그레이드 경로 미통과 — 기존 고객 리소스 위험"
- id: B3
when: "judge.type == 'llm' and calibration.status != 'approved'"
reason: "보정 승인되지 않은 판정자의 판정은 근거로 쓰지 않는다"
- id: B4
when: "required_criteria_not_executed > 0"
reason: "실행되지 않은 필수 기준 — 통과가 아니라 미확인"
warn:
- id: W1
when: "attempt_verdicts contains both 'pass' and 'fail'"
reason: "재시도 통과 — 플래키 여부 확인 필요"
- id: W2
when: "verdict == 'abstain'"
reason: "판정자 판정 불가 — 사람 판정 필요"
- id: W3
when: "human_sample.pass_disagreements >= 2"
reason: "해석 판정 PASS 표본에서 사람 불일치 — 판정자 신뢰 하락"규칙 B4를 보자. 실행되지 않은 기준은 통과가 아니다. 환경 문제로 테스트가 안 돌았는데 "실패 0건"으로 요약되는 것이 자동 게이트의 가장 흔한 거짓 Go다. 모듈 4 레슨 5의 "실행 현황은 무엇을 안 했는가"가 코드로 옮겨진 것이다.
규칙 B3은 레슨 3과 게이트를 잇는다. 보정 기록이 없거나 만료된 판정자의 PASS는 근거 목록에서 빠진다. 그 기준은 미확인으로 계산되어 B4에 걸린다.
게이트 요약 — 한 장, 기계가 만든다
자동 판정이 만드는 요약의 형식을 정한다. 모듈 4 레슨 5의 한 장 양식에 AI 판정 근거 칸이 더해진다.
[주간 배포 게이트 요약 — 2026-W38 후보 release-2026.38.0]
생성: 2026-09-17 09:00 (gate-policy 2026.09.1, criteria compute 2026.09.2 / train 2026.09.1 / infer 2026.08.4)
자동 판정 결과: 차단 1건, 경고 4건 → 사람 검토 필요
■ 차단
B1 D-COMP-042 쿼터 거부 후 포트 잔존 (회귀 3/3 실패, 릴리스 전 2/2 실패)
결함 PLAT-2231 (높음), 담당 compute팀, 수정 PR #4412 리뷰 중
근거: 레코드 rgr-2026-09-16-0200, pre-2026-09-17-0600 / 증거 경로
■ 경고
W1 D-TRAIN-031 체크포인트 재개 후 스텝 번호 연속성 — 회귀 5회 중 1회 실패
W2 I-INFER-ERRMSG-03 판정 불가 2건
W3 (해당 없음)
기타 판정자 보정 cal-logsum 만료 D-7
■ 실행 현황
필수 기준 412 / 실행 412 / 통과 409 / 실패 1 / 경고 대상 2
미실행 0
이번 주 새로 추가된 기준 6 (전부 실행)
릴리스 전 전용: 업그레이드 경로 18/18 통과, 롤백 리허설 통과, 성능 기준 11/11 통과
■ 해석 판정 근거
보정 승인 판정자 3 (errmsg κ0.78 / logsum κ0.74 / ui-warning κ0.81)
PASS 표본 재검토 30건 중 사람 불일치 1건 (경보선 2건 미만)
■ 지난주 대비
새 실패 1 / 해결된 실패 3 / 재시도 통과 증가 +2요약의 모든 줄이 레코드 ID로 추적 된다는 점이 핵심이다. 회의에서 "그 실패 진짜예요?"라는 질문이 나오면 레코드와 증거 경로를 바로 연다. 요약을 사람이 쓰면 이 연결이 끊긴다.
요약에 AI가 쓴 자연어 설명을 곁들일 수도 있다. 그 경우에도 숫자와 차단 판정은 규칙 엔진이 만들고, 자연어는 설명만 한다. 설명이 요약의 숫자와 어긋나지 않는지 결정적으로 대조하는 검사를 붙인다. LLM이 "특이 사항 없음"이라고 요약했는데 차단이 1건이면 요약 생성 자체가 실패다.
2단계 — 사람 검토는 어디에 시간을 쓰는가
QA가 게이트 검토에 쓰는 시간은 네 곳으로 정해 둔다.
| 검토 대상 | 확인할 것 |
|---|---|
| 차단 항목 | 결함이 맞는가(환경·데이터 문제 아닌가), 심각도가 맞는가, 수정 일정 |
| 경고 항목 | 재시도 통과는 플래키인가 간헐 결함인가, 판정 불가 건의 사람 판정 |
| 예외 요청 | 차단 항목을 안고 배포하자는 요청의 근거 |
| 기준 변경 | 이번 주 완화·삭제된 기준이 있는가, 승인 기록이 있는가 |
마지막 줄은 자주 빠진다. 게이트를 통과시키는 가장 조용한 방법은 기준을 지우는 것 이다. 게이트 요약에 "이번 주 기준 변경" 절을 넣고, 완화 변경은 요약 맨 위로 올린다.
재시도 통과(W1)를 판단할 때는 모듈 13 레슨 6의 네 관점(테스트 코드·앱·환경·인프라)으로 좁힌다. 체크포인트 재개처럼 간헐성이 제품의 실제 결함일 수 있는 영역 에서 "플래키니까 무시"는 위험하다. 학습 작업이 다섯 번에 한 번 스텝 번호를 잃는다면, 고객의 12시간 학습이 다섯 번에 한 번 틀린 지점에서 재개된다는 뜻일 수 있다.
예외 승인 — 막을 권한과 풀 권한을 나눈다
차단을 안고 배포해야 하는 상황은 반드시 온다. 보안 패치가 급하거나, 차단 결함의 영향이 매우 좁을 때다. 예외 자체는 나쁘지 않다. 기록 없는 예외 가 나쁘다.
[게이트 예외 기록 — EX-2026-038]
대상 차단: B1 / D-COMP-042 쿼터 거부 후 포트 잔존
요청자: compute팀 리드
요청 사유: 이번 후보에 CVE 대응 패치 포함, 다음 주 배포로 미룰 수 없음
영향 분석: 쿼터 초과 시에만 발생, 잔존 포트는 과금 대상 아님, 포트 쿼터를 1개씩 소모
지난 30일 운영 쿼터 초과 요청 212건 → 최대 212개 포트 누수 추정
완화 조치: 운영 정리 배치로 1시간마다 고아 포트 삭제 (배포와 함께 활성화, 검증 완료 레코드 첨부)
만료: 다음 주 게이트 (W39) 까지. W39 에서 D-COMP-042 미통과 시 예외 연장 불가, 차단
QA 의견: 완화 조치 검증 후 조건부 동의. 정리 배치 자체 실패 시 알림 설정 확인 필요
승인: 플랫폼 엔지니어링 책임자 (2026-09-17 11:20)설계 원칙은 셋이다. 막는 사람(QA 게이트)과 푸는 사람(책임자)을 나눈다. 예외에는 만료 를 붙인다. 완화 조치도 검증된 레코드 로 첨부한다. 만료 없는 예외는 영구 면제가 되고, 몇 달 뒤 게이트에는 예외만 남는다.
3단계 — 결정은 셋 중 하나, 기록은 항상
모듈 4 레슨 5의 조건부 Go가 주간 게이트에서 가장 자주 쓰인다. 결정 기록 양식을 고정한다.
[게이트 결정 — 2026-W38]
결정: 조건부 Go
조건: (1) EX-2026-038 완화 배치 활성화 확인 후 배포
(2) 배포 후 24시간 고아 포트 수 모니터링, 50개 초과 시 롤백 검토
(3) D-TRAIN-031 은 격리하지 않고 결함 PLAT-2240 으로 등록, W39 회귀에서 20회 반복 실행
근거: 게이트 요약 gate-2026-W38 (레코드 412건), 예외 EX-2026-038, 판정자 보정 3건
반대·유보 의견: QA — D-TRAIN-031 이 제품 결함일 가능성 배제 못함, 학습 작업 재개 기능 공지 검토 요청
결정자: 플랫폼 엔지니어링 책임자
참석: QA 리드, compute·train·infer 리드, SRE 당번
후속 확인: 2026-09-18 10:00 SRE 당번이 조건 (2) 결과를 이 기록에 추가"반대·유보 의견" 칸이 QA가 침묵하지 않는 자리 다. 결정이 QA 의견과 달라도 괜찮다. 의견이 기록되어 있으면 나중에 그 판단이 옳았는지 배울 수 있다. 기록이 없으면 사고 후 "QA는 뭐 했냐"만 남는다.
기록은 게이트 요약·레코드·예외·결정이 서로 링크 로 이어져야 한다. 채용 공고의 "판정은 근거와 함께 기록으로 남습니다"가 요구하는 것이 이 연결이다. 인증 심사나 고객 납품 검증(모듈 39 레슨 8)에서 "이 버전을 왜 배포했는가"를 물을 때 이 사슬이 그대로 답이 된다.
결함 관리와 잇기
게이트의 차단·경고는 결함 관리 흐름(모듈 6)에 들어가야 추적된다. 자동화할 연결은 이렇다.
| 이벤트 | 자동 동작 |
|---|---|
| 기준이 회귀에서 처음 실패 | 결함 초안 생성: 기준 ID, 재현 조건(레코드의 환경·커밋·입력), 증거 링크. 사람이 확인 후 등록 |
| 같은 기준이 연속 실패 | 새 결함을 만들지 않고 기존 결함에 발생 기록 추가 |
| 결함이 해결됨으로 바뀜 | 해당 기준을 다음 회귀에서 반복 실행하도록 표시 |
| 기준이 통과로 돌아옴 | 결함에 확인 레코드 링크, 사람이 종료 |
결함 초안은 AI가 쓰기 좋은 영역이다. 레코드에 재현 조건이 구조화되어 있으므로 모듈 6 레슨 2의 "좋은 결함 리포트" 형식으로 옮기는 일은 해석이 적다. 다만 등록 버튼은 사람이 누른다. 자동 등록은 중복·오분류 결함을 쌓고, 결함 추세 지표(레슨 6)를 오염시킨다. 모듈 18a 레슨 2의 AI 결함 분류·중복 탐지를 초안 단계에 붙이면 사람의 확인 시간이 줄어든다.
게이트가 형식이 되는 신호
게이트는 운영할수록 무뎌진다. 다음 신호를 분기마다 확인한다.
| 신호 | 의미 |
|---|---|
| 예외 승인율이 계속 오른다 | 차단 규칙이 현실과 안 맞거나, 예외가 기본 경로가 됐다 |
| 차단이 몇 달째 0건인데 운영 결함은 나온다 | 기준이 운영 결함을 못 본다. 탈출 결함을 기준으로 역추적 |
| 결정 기록의 반대 의견 칸이 늘 비어 있다 | QA가 말하지 않거나, 말할 자리가 형식적이다 |
| 게이트 요약을 아무도 열지 않고 결정한다 | 요약이 판단에 필요한 정보를 주지 못한다 |
| 조건부 Go의 조건 확인 기록이 비어 있다 | 조건이 장식이다 |
두 번째 신호가 가장 중요하다. 운영에서 나온 결함마다 "어느 기준이 잡았어야 했나"를 묻고 기준을 추가한다. 이 역추적이 게이트를 시간이 갈수록 강하게 만드는 유일한 경로다.
실무에서 왜 필요한가
"주간 배포 게이트를 운영하기 시작한 단계"인 조직에서 QA가 처음 맡는 일은 대개 게이트가 매주 같은 방식으로 돌아가게 만드는 것이다. 규칙이 문장이면 담당자에 따라 결정이 달라지고, 요약을 손으로 만들면 담당자가 휴가일 때 게이트가 멈춘다. 규칙을 코드로, 요약을 레코드 조회로, 결정을 고정 양식으로 만드는 순간 게이트가 사람이 아니라 체계 가 된다.
AI 판정이 들어간 게이트에서는 한 가지가 더 필요하다. 판정자를 믿는 근거(보정 기록)가 게이트 요약에 보여야 한다. 그래야 책임자가 "AI가 통과라고 했으니"가 아니라 "이 범위에서 믿을 수 있는 판정자가 통과라고 했으니"로 결정하고, QA가 최종 판단을 책임질 수 있다.