Files
document-haness/docs/TechLog/tech-log-studio/when-a-guard-can-be-trusted/reference/reference-what-a-person-must-run-before-deploying.md
T
DongHyeonkaandClaude Opus 5 6917ce2420 docs(TechLog): 남은 주제를 다시 쓰고 SSOT 를 저장소 실물로 더 보강한다
주제 11~13 을 다시 쓰고, Case 가 얇은 것들을 저장소에서 실물을 확인해 채웠다.

  §13.4  ManagementClientSafeMessages — 삭제 관련 코드 여섯의 고정 문구와
         원문 메시지를 내보내지 않는 이유(javadoc)
  §16.1  다섯 참조가 전부 DOCUMENT_IN_USE 하나로 나가고, SSOT 가 인용한 영어 문장은
         DeleteDocumentDraftUseCase 안에 남는 진단 메시지라 밖으로 나가지 않는다
  §13.6  romanizeSyllable 실물과 음운 변동을 뺀 이유, 문서 slug 와 같은 정규식을 쓰는 이유
  §15.4  check:types 가 도는 tsconfig 여섯 — app·node·test·recipes·web-worker·service-worker

SSOT 62,643 → 67,526 자. 인용한 코드는 전부 저장소에서 찾아 대조했다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 19:12:37 +09:00

3.8 KiB

kind, slug, title, topic, topicName, project, status, verifiedOn, sourceRevision, source
kind slug title topic topicName project status verifiedOn sourceRevision source
REFERENCE what-a-person-must-run-before-deploying 배포 전에 사람이 돌려야 하는 것과 그 함정 when-a-guard-can-be-trusted 가드를 언제 믿을 수 있는가 TechLog 게시 전 2026-09-04 tech-log@2026-09-02
final/document.md#§15.4
final/document.md#§12.3
final/document.md#§12.7
final/document.md#§12.8
final/document.md#§16.6

배포 전에 사람이 돌려야 하는 것과 그 함정

CI 에 묶이지 않은 검증이 남아 있으면 그것을 돌리는 것은 사람이다. 다섯 명령을 다 돌려야 하고, 그중 둘은 순서와 환경 때문에 그냥 돌리면 틀린 답을 준다.

관계

  • 가드는 작동했는데 제가 그것을 돌리지 않아 두 번 새어 나갔다 이 목록이 필요해진 사건이다.
  • npx tsc --noEmit 이 한 파일도 검사하지 않고 성공했다 목록의 첫 줄이 왜 그 명령이 아닌지가 그 기록에 있다.
  • 레지스트리 없이 tar 를 import 하는 배포 경로 빌드 산출물에 커밋 해시가 들어가는 이유가 그 개념에 있다.

목적

배포 전에 돌려야 하는 것을 사람이 기억에 의존해 고르는 것을 막는다.

이 저장소에서 두 번 빠뜨려 결함이 배포까지 갔다. 명령이 여럿이고 그중 일부만 도는 것이 가능한 구조에서는 「돌렸다」가 무엇을 돌렸다는 뜻인지 정해 두어야 한다.

규칙

1. 프론트는 다섯 개를 다 돌린다

타입 검사·lint·단위 테스트·컴포넌트 테스트·화면 테스트다. 화면 테스트는 단위 테스트 명령이 돌리지 않으므로, 넷을 돌리고 「전부 통과」라고 읽으면 화면 테스트가 빠진다.

2. 타입 검사는 프로젝트를 순회하는 명령으로 돌린다

루트 tsconfig 를 직접 부르는 명령은 한 파일도 검사하지 않고 성공한다. 루트가 "files": [] 에 project references 만 나열하기 때문이다.

3. 백엔드는 커밋한 뒤에 빌드한다

빌드 산출물 이름에 커밋 해시가 들어간다. 작업 트리가 더러우면 해시가 달라져 stale 산출물 검사가 멈춘다. 이 순서를 몰라 두 번 헤맸다.

4. 테스트를 npm 이나 npx 로 감싸 돌리지 않는다

npm_config_* 환경 변수가 설정되어 CI 워크플로 생성 테스트가 실패한다. 그 변수를 지우고 실행기를 직접 부른다.

5. 환경 때문에 실패하는 것은 실패로 세지 않되 목록에 적는다

하위 프로세스를 띄우는 세 케이스는 이 환경에서 실패하고 같은 리비전의 다른 실행에서도 똑같이 재현된다. 코드 변경과 무관하다는 것을 적어 두지 않으면 다음 사람이 그것을 고치려 든다.

적용 조건

  • CI 에 묶이지 않은 검증이 남아 있는 저장소에서 배포 직전에 하는 일
  • 명령이 여럿이고 그중 일부만 도는 것이 가능할 때
  • 빌드 산출물이 작업 트리 상태에 따라 달라지는 저장소에서

예외

  • CI 가 그 명령을 돌리면 이 목록에서 뺀다. 사람이 기억해서 돌리는 가드는 절반만 존재한다.
  • 테스트 실행기가 메모리를 더 필요로 하는 조합이면 힙을 올린다. 증상이 테스트 실패가 아니라 실행기를 완료할 수 없다는 메시지로 나와 원인을 가린다.

예시

  • 화면 테스트를 돌리지 않아 23건이 빨간 채로 여러 커밋을 지나갔다
  • 루트 tsconfig 를 직접 부르는 명령이 통과해서 운영의 ReferenceError 를 못 봤다
  • 커밋 전에 빌드해 stale 산출물 검사가 멈춘 것을 두 번 겪었다
  • 설계 패키지는 계약 자체의 유효성·세 계약 사이의 정합·양쪽이 아는 종류와 오류 코드가 같은지 셋을 돌린다