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>
This commit is contained in:
DongHyeonka
2026-09-07 19:12:37 +09:00
co-authored by Claude Opus 5
parent b1653dbba8
commit 6917ce2420
14 changed files with 279 additions and 99 deletions
@@ -31,17 +31,21 @@ source:
## 목적
무엇도 잡지 못하는 가드가 초록불로 남는 것을 막는다. 이 상태는 가드가 있는 것과 화면에서 구분되지 않는다.
무엇도 잡지 못하는 가드가 초록불로 남는 것을 막는다.
가드를 넣었다는 것과 그 가드가 무엇을 잡는다는 것은 다르다. 둘은 화면에서 구분되지 않는다 — 검사가 통과했을 때 그 결함이 원래 없었는지 검사가 그것을 안 보는지 알 방법이 없다.
## 규칙
### 1. 결함을 되돌려 그 가드가 실제로 멈추는 것을 확인한 뒤 커밋한다
계약에서 값을 빼고 대조 검사가 빨개지는지 본다. 매핑을 떼어 보고 그 연산 하나를 짚는지 본다.
계약에서 값을 빼고 대조 검사가 빨개지는지 본다. 매핑을 떼어 보고 그 연산을 짚는지 본다. 굵기 선언을 빼고 제목 급 검사가 멈추는지 본다.
되돌리는 것이 어려우면 그 가드가 무엇을 전제하는지 다시 본다. 되돌릴 수 없는 상태를 잡는 가드는 그 상태가 어떻게 생기는지를 아무도 모른다는 뜻이다.
### 2. 가드가 짚는 대상이 하나인지 본다
전부를 짚으면 어디가 문제인지 알 수 없고, 결과가 곧 읽히지 않는다.
전부를 짚으면 어디가 문제인지 알 수 없고, 결과가 곧 읽히지 않는다. 매핑 하나를 떼었을 때 그 연산 하나만 나와야 한다.
### 3. 되돌릴 수 없는 것은 현재 상태를 대신 증거로 남긴다
@@ -49,7 +53,7 @@ source:
### 4. 가드를 CI 에 묶는다
사람이 기억해서 돌리는 가드는 절반만 존재한다.
사람이 기억해서 돌리는 가드는 절반만 존재한다. 가드가 정확해도 결과를 아무도 읽지 않으면 빨간 채로 여러 커밋을 지나간다.
## 적용 조건
@@ -59,16 +63,12 @@ source:
## 예외
- 결함을 되돌릴 수 없는 것 — 이미 마이그레이션으로 고친 데이터, 지난 배포에서만 나던 상태 — 은 현재 상태가 고쳐져 있음을 증거로 남긴다.
- 결함을 되돌릴 수 없는 것 — 이미 마이그레이션으로 고친 데이터, 지난 배포에서만 나던 상태 — 은 현재 상태가 고쳐져 있음을 대신 증거로 남긴다.
- 기존 가드를 옮기거나 이름만 바꾸는 변경은 되돌려 확인하지 않아도 된다. 다만 옮긴 뒤에 한 번은 돌린다.
## 예시
- 가드 셋을 각각 결함으로 되돌려 실제로 빨개지는 것을 확인한 기록을 남겼다.
- 계약에서 CONCEPT 을 빼자 백엔드의 계약 대조 테스트가 빨개졌다.
- 매핑을 떼어 보고 계약 대조 테스트가 그 연산 하나를 정확히 짚는 것을 확인했다.
- 굵기 선언을 빼 보고 제목 급 검사가 실제로 멈추는 것을 확인했다.
- 가드 셋을 각각 결함으로 되돌려 실제로 빨개지는 것을 확인한 기록을 남겼다
- 계약에서 CONCEPT 을 빼자 백엔드의 계약 대조 테스트가 빨개졌다
- 매핑을 떼어 보고 계약 대조 테스트가 그 연산 하나를 정확히 짚는 것을 확인했다
- 굵기 선언을 빼 보고 제목 급 검사가 실제로 멈추는 것을 확인했다
@@ -31,26 +31,32 @@ CI 에 묶이지 않은 검증이 남아 있으면 그것을 돌리는 것은
## 목적
배포 전에 돌려야 하는 것을 사람이 기억에 의존해 고르는 것을 막는다. 두 번 빠뜨려 결함이 배포까지 갔다.
배포 전에 돌려야 하는 것을 사람이 기억에 의존해 고르는 것을 막는다.
이 저장소에서 두 번 빠뜨려 결함이 배포까지 갔다. 명령이 여럿이고 그중 일부만 도는 것이 가능한 구조에서는 「돌렸다」가 무엇을 돌렸다는 뜻인지 정해 두어야 한다.
## 규칙
### 1. 프론트는 다섯 개를 다 돌린다
타입 검사 · lint · 단위 테스트 · 컴포넌트 테스트 · 화면 테스트다. 화면 테스트는 단위 테스트 명령이 돌리지 않다.
타입 검사·lint·단위 테스트·컴포넌트 테스트·화면 테스트다. 화면 테스트는 단위 테스트 명령이 돌리지 않으므로, 넷을 돌리고 「전부 통과」라고 읽으면 화면 테스트가 빠진다.
### 2. 타입 검사는 프로젝트를 순회하는 명령으로 돌린다
루트 tsconfig 를 직접 부르는 명령은 한 파일도 검사하지 않고 성공한다.
루트 tsconfig 를 직접 부르는 명령은 한 파일도 검사하지 않고 성공한다. 루트가 `"files": []` 에 project references 만 나열하기 때문이다.
### 3. 백엔드는 커밋한 뒤에 빌드한다
빌드 산출물 이름에 커밋 해시가 들어간다. 작업 트리가 더러우면 해시가 달라져 stale 산출물 검사가 멈춘다.
빌드 산출물 이름에 커밋 해시가 들어간다. 작업 트리가 더러우면 해시가 달라져 stale 산출물 검사가 멈춘다. 이 순서를 몰라 두 번 헤맸다.
### 4. 테스트를 npm 이나 npx 로 감싸 돌리지 않는다
`npm_config_*` 환경 변수가 설정되어 CI 워크플로 생성 테스트가 실패한다. 그 변수를 지우고 실행기를 직접 부른다.
### 5. 환경 때문에 실패하는 것은 실패로 세지 않되 목록에 적는다
하위 프로세스를 띄우는 세 케이스는 이 환경에서 실패하고 같은 리비전의 다른 실행에서도 똑같이 재현된다. 코드 변경과 무관하다는 것을 적어 두지 않으면 다음 사람이 그것을 고치려 든다.
## 적용 조건
- CI 에 묶이지 않은 검증이 남아 있는 저장소에서 배포 직전에 하는 일
@@ -59,19 +65,12 @@ CI 에 묶이지 않은 검증이 남아 있으면 그것을 돌리는 것은
## 예외
- CI 가 그 명령을 돌리면 이 목록에서 뺀다.
- 환경 때문에 실패하는 것은 실패로 세지 않는다. 하위 프로세스를 띄우는 세 케이스는 이 환경에서 실패하고 같은 리비전의 다른 실행에서도 똑같이 재현되므로 코드 변경과 무관하다.
- CI 가 그 명령을 돌리면 이 목록에서 뺀다. 사람이 기억해서 돌리는 가드는 절반만 존재한다.
- 테스트 실행기가 메모리를 더 필요로 하는 조합이면 힙을 올린다. 증상이 테스트 실패가 아니라 실행기를 완료할 수 없다는 메시지로 나와 원인을 가린다.
## 예시
- 프론트 다섯 명령 :
`npm run check:types`
`npm run lint`
단위 · 컴포넌트 · 화면 테스트
- 백엔드 : 커밋한 뒤 stale 산출물을 지우고 빌드한다. 이 순서를 몰라 두 번 헤맸다.
- 설계 패키지 : 계약 자체의 유효성 · 세 계약 사이의 정합 · 프론트와 백엔드가 아는 종류와 오류 코드가 같은지, 셋을 돌린다.
- 테스트 JVM 힙이 기본값이면 컨텍스트 캐시와 아키텍처 검사와 컨테이너가 겹치면서 메모리가 모자란다. 증상이 테스트 실패가 아니라 실행기를 완료할 수 없다는 메시지라 원인을 가린다.
- 화면 테스트를 돌리지 않아 23건이 빨간 채로 여러 커밋을 지나갔다
- 루트 tsconfig 를 직접 부르는 명령이 통과해서 운영의 ReferenceError 를 못 봤다
- 커밋 전에 빌드해 stale 산출물 검사가 멈춘 것을 두 번 겪었다
- 설계 패키지는 계약 자체의 유효성·세 계약 사이의 정합·양쪽이 아는 종류와 오류 코드가 같은지 셋을 돌린다