여러 사람이 함께 쓸 때 — 운영 규약과 도구의 결손
0. 이 문서가 적용되는 범위
혼자 한 기계에서 쓰는 구성에는 이 문서의 어느 항목도 적용되지 않습니다. recipe에 경로를
그대로 적고 tabbit --recipe recipe.jsonc로 끝이며, 산출물을 커밋하든 말든 충돌할 상대가
없고, 환경도 히스토리도 나눌 것이 없습니다.
아래의 모든 항목은 다른 사람이 함께 쓰거나 환경이 추가되는 시점부터 비용이 되는 것들입니다. 그 경계를 먼저 적는 것은, 규약을 필요하지 않은 곳에 적용하면 그 규약이 지켜지지 않기 때문입니다.
| 무엇이 생겼나 | 그때부터 필요해지는 것 |
|---|---|
| 다른 사람 | §2 산출물의 기록 주체 · §3 원본의 소유와 브랜치 · §5 히스토리 · §6.1 조기 검출 |
| 추가 환경 | §4 환경 구분 — 키 분리 · recipe 매개변수화 · 승격 |
| CI | §2.3 전달 경로 · §5.3 기록 주체 · §6.5 서비스 계정 |
도구도 같은 경계로 만들었습니다 — ${NAME}과 --env는 쓰지 않으면 없는 것과 같고, 혼자
쓰는 recipe는 이 개정 전과 한 글자도 달라지지 않습니다.
1. 요약
사람이 늘어나는 순간 문제가 되는 것은 산출물의 공동 커밋 · 환경 구분의 부재 · 히스토리의 분산 3가지입니다. 셋 다 변환 자체의 결함이 아니라 쓰는 규약이 정해지지 않은 것이고, 그중 2가지는 규약만으로 해결되지 않아 도구에 자리가 필요합니다.
| 문제 | 현재 상태 | 처방 | 도구 변경 |
|---|---|---|---|
| 산출물의 공동 커밋 | 이 저장소는 시연 목적으로 커밋하고 있고, 소비 프로젝트가 그것을 관례로 오해할 여지가 있습니다 | 커밋 주체를 CI 하나로 고정합니다 — 생성 코드는 CI가 커밋하고, 데이터는 매니페스트·업데이터가 전달합니다 | 불필요 |
SchemaBaseline의 동시 갱신 | 커밋 대상이며 실행마다 갱신됩니다 | CI만 갱신하고 사람은 AcceptSchemaChanges로 의도를 선언합니다 | 불필요 |
| 환경 구분 | 됨 — ${NAME}이 recipe 전체에 적용되고 --env가 그 낱말을 정합니다 | recipe 하나 + 변수 두 벌, 그리고 키와 권한의 분리 | 끝남 — §4.5 |
| 브랜치 운용 | 엑셀은 파일이라 브랜치를 따라가지만, 구글 시트는 상태가 하나뿐이고 병합 수단이 없습니다 | 시트는 trunk 전용, 릴리스 라인은 스냅샷 커밋이 담당합니다 — §3.3 | 불필요 |
| 라이브 빌드의 재현성 | 구글 스프레드시트는 조회 시점의 상태만 반환합니다 | 승격 시점의 워크북 스냅샷을 커밋합니다 | 불필요 (절차) |
| 히스토리 | 기록 주체가 규정되어 있지 않습니다 | CI 한 곳만 기록하고 조회는 --serve 1대 | 불필요 |
| 구글 인증 | 됨 — 서비스 계정으로 접속할 수 있습니다 | CI는 서비스 계정, 사람은 클라이언트 비밀 | 끝남 — §6.5 |
| 도구 버전 드리프트 | summary의 run에 toolVersion과 environment가 함께 기록됩니다 | 버전 고정 + summary를 데이터 옆에 냅니다 | 불필요 — §6.2 |
단일 원칙 하나로 요약됩니다 — 하나의 산출물 트리에 쓰는 주체는 하나여야 합니다. 그 주체는 CI이고, 사람의 로컬 실행은 확인용이며 그 결과를 저장 소에 반영하지 않습니다.
이 문서의 나머지
| 무엇 | 어디 |
|---|---|
| 산출물과 원본을 함께 쓸 때 | 생성물을 함께 커밋하는 것과, 시트를 동시에 고치는 것 |
| 환경과 히스토리 | 사람마다 다른 환경을 가르는 법과, 히스토리의 단일 기록자 원칙 |
| 사람이 늘어날 때 | 규모가 커지며 나오는 것, 오늘 할 수 있는 것, 도구가 바꾼 것 |