A10
원칙 문서 규격
원칙마다 어긴 대가를 기재하게 하는 포맷. 시험 기록 없는 원칙은 취향으로 간주해 제외.
- 형식
- 템플릿
- 붙이는 곳
- docs/PRINCIPLES.md
- 분량
- 68줄
- 업무 단계
- —
- 버전
- v0.1 · 2026. 8. 10.
언제 쓰나
- 회고에서 도출된 개선 사항이 누적되기만 하고 이후 재검토되지 않을 때
- 동일한 논쟁이 세 번째 반복될 때 — 결론이 아니라 결론의 근거를 남겨야 하는 시점
- 신규 인원이 합류했으나 현행 방식의 근거를 설명할 문서가 없을 때
안 쓰는 경우
위반 사례가 없는 사안에는 적용하지 마십시오. 시험 기록이 없으면 모든 항목이 초안으로 남고, 초안만 있는 원칙 문서는 일반론의 나열이 됩니다. 사고를 한 번 겪은 뒤에 작성하는 문서입니다.
입력
최소 입력은 위반으로 대가를 치른 사례 1건입니다. 원칙 목록이 아니라 사고 목록에서 시작하십시오. 사고가 세 건 정도 축적되면 원칙 문서가 성립합니다.
사용법
- docs/PRINCIPLES.md 로 저장하고, 사고 사례를 먼저 나열합니다.
- 사례마다 재발 방지를 위해 무엇을 금지해야 하는지를 한 문장으로 도출합니다. 이 문장이 원칙이 됩니다.
- §원칙이 되기 위한 세 조건으로 선별합니다. 세 조건을 충족하지 못하면 규격 항목으로 이관합니다.
본문
<!-- 원칙 문서 규격 v0.1 · https://namtank96.github.io/assets/a10-principles -->
# 설계 원칙(Principles) 작성 규격
## 이 문서를 읽는 법
원칙은 **어긴 대가를 치르고 남은 것이다.** 지어낸 문장은 올리지 않는다.
각 절에 *어디서 시험됐는지*를 적는다. 근거가 없는 원칙은 취향이다. 시험 기록이 없으면 그 원칙은 지울 후보다.
새 결정이 원칙과 부딪히면 **원칙이 이긴다.**
원칙을 바꾸려면 그것이 틀렸다는 사례를 먼저 가져온다. 불편하다는 이유로는 못 바꾼다.
## 원칙 하나의 형식 (고정)
```markdown
## N. {원칙 이름 — 명사구}
**{한 문장 선언.}** {한 문장 부연.}
- {따라 나오는 금지·의무 3~5개. 각 한 줄.}
- {"~하지 않는다" 형태를 우선한다. 금지가 허용보다 검증하기 쉽다.}
> **시험**: {언제 어디서 이 원칙을 어겼고 무슨 대가를 치렀는지 1~2문장.}
> — {그 사건을 가리키는 문서·이슈·커밋}
```
`> 시험` 줄이 없는 원칙은 초안이다. **초안은 원칙 목록에 올리지 않는다.**
## 작성 규칙
1. **선언은 한 문장.** 두 문장이 필요하면 원칙이 두 개인 것이다. 쪼갠다.
2. **금지형을 우선한다.** "항상 X 한다"보다 "X 하지 않는다"가 위반을 판정하기 쉽다.
3. **시험 기록은 구체적으로.** "문제가 있었다" ✕. 무엇을 했고 무엇이 깨졌는지 적는다.
숫자가 있으면 넣는다. 없으면 어떤 증상이 났는지 적는다.
4. **원칙 개수를 10개 아래로 유지한다.** 넘어가면 아무도 안 읽는다.
늘리기 전에 기존 원칙에 흡수되는지 먼저 본다.
5. **원칙끼리 충돌하면 우선순위를 명시한다.** "둘 다 중요하다"는 답이 아니다.
충돌 상황을 적고 어느 쪽이 이기는지 적는다.
6. **규칙이 예시를 이긴다.** 본문과 부록 예시가 어긋나면 예시를 고친다.
7. **원칙을 지운 기록을 남긴다.** 폐기 절을 두고 아래 폐기 형식으로 적는다.
지운 이유가 다음 사람에게는 자산이 된다.
## 원칙이 되기 위한 세 조건
원칙 후보를 올릴 때 셋 다 만족하는지 확인한다. 하나라도 아니면 원칙이 아니라 규격 항목이다.
| 조건 | 확인 질문 |
|---|---|
| **일반성** | 이 건에만 해당하는가, 앞으로도 반복되는가 |
| **비용** | 어겼을 때 실제로 무엇을 잃었는가. 잃은 게 없으면 취향이다 |
| **판정 가능성** | 지켰는지 안 지켰는지 제3자가 볼 수 있는가 |
## 자주 나오는 실패
- **다 좋은 말 나열.** "품질을 중시한다", "사용자 중심으로 생각한다" 같은 것. 판정할 수 없으니 원칙이 아니다.
- **시험 기록 없이 늘어남.** 회고 때마다 하나씩 붙어서 20개가 된다.
- **원칙과 규격의 혼동.** 필드명·포맷·임계값은 규격이지 원칙이 아니다. 원칙은 *왜 그 규격이 그 모양인가*다.
- **원칙을 어긴 채로 두고 예외를 늘림.** 예외가 세 번째면 원칙이 틀린 것이다. 원칙을 고친다.
## 폐기
```markdown
## 폐기된 원칙
- ~~{원칙 이름}~~ — 폐기 YYMMDD
사유: {왜 틀렸는지. 어떤 사례가 반증했는지.}
```
<!-- 원칙 문서 규격 v0.1 · https://namtank96.github.io/assets/a10-principles -->
# 설계 원칙(Principles) 작성 규격
## 이 문서를 읽는 법
원칙은 **어긴 대가를 치르고 남은 것이다.** 지어낸 문장은 올리지 않는다.
각 절에 *어디서 시험됐는지*를 적는다. 근거가 없는 원칙은 취향이다. 시험 기록이 없으면 그 원칙은 지울 후보다.
새 결정이 원칙과 부딪히면 **원칙이 이긴다.**
원칙을 바꾸려면 그것이 틀렸다는 사례를 먼저 가져온다. 불편하다는 이유로는 못 바꾼다.
## 원칙 하나의 형식 (고정)
```markdown
## N. {원칙 이름 — 명사구}
**{한 문장 선언.}** {한 문장 부연.}
- {따라 나오는 금지·의무 3~5개. 각 한 줄.}
- {"~하지 않는다" 형태를 우선한다. 금지가 허용보다 검증하기 쉽다.}
> **시험**: {언제 어디서 이 원칙을 어겼고 무슨 대가를 치렀는지 1~2문장.}
> — {그 사건을 가리키는 문서·이슈·커밋}
```
`> 시험` 줄이 없는 원칙은 초안이다. **초안은 원칙 목록에 올리지 않는다.**
## 작성 규칙
1. **선언은 한 문장.** 두 문장이 필요하면 원칙이 두 개인 것이다. 쪼갠다.
2. **금지형을 우선한다.** "항상 X 한다"보다 "X 하지 않는다"가 위반을 판정하기 쉽다.
3. **시험 기록은 구체적으로.** "문제가 있었다" ✕. 무엇을 했고 무엇이 깨졌는지 적는다.
숫자가 있으면 넣는다. 없으면 어떤 증상이 났는지 적는다.
4. **원칙 개수를 10개 아래로 유지한다.** 넘어가면 아무도 안 읽는다.
늘리기 전에 기존 원칙에 흡수되는지 먼저 본다.
5. **원칙끼리 충돌하면 우선순위를 명시한다.** "둘 다 중요하다"는 답이 아니다.
충돌 상황을 적고 어느 쪽이 이기는지 적는다.
6. **규칙이 예시를 이긴다.** 본문과 부록 예시가 어긋나면 예시를 고친다.
7. **원칙을 지운 기록을 남긴다.** 폐기 절을 두고 아래 폐기 형식으로 적는다.
지운 이유가 다음 사람에게는 자산이 된다.
## 원칙이 되기 위한 세 조건
원칙 후보를 올릴 때 셋 다 만족하는지 확인한다. 하나라도 아니면 원칙이 아니라 규격 항목이다.
| 조건 | 확인 질문 |
|---|---|
| **일반성** | 이 건에만 해당하는가, 앞으로도 반복되는가 |
| **비용** | 어겼을 때 실제로 무엇을 잃었는가. 잃은 게 없으면 취향이다 |
| **판정 가능성** | 지켰는지 안 지켰는지 제3자가 볼 수 있는가 |
## 자주 나오는 실패
- **다 좋은 말 나열.** "품질을 중시한다", "사용자 중심으로 생각한다" 같은 것. 판정할 수 없으니 원칙이 아니다.
- **시험 기록 없이 늘어남.** 회고 때마다 하나씩 붙어서 20개가 된다.
- **원칙과 규격의 혼동.** 필드명·포맷·임계값은 규격이지 원칙이 아니다. 원칙은 *왜 그 규격이 그 모양인가*다.
- **원칙을 어긴 채로 두고 예외를 늘림.** 예외가 세 번째면 원칙이 틀린 것이다. 원칙을 고친다.
## 폐기
```markdown
## 폐기된 원칙
- ~~{원칙 이름}~~ — 폐기 YYMMDD
사유: {왜 틀렸는지. 어떤 사례가 반증했는지.}
```
출력 예시
시험 기록이 있는 원칙과 없는 원칙의 차이입니다.
❌ ## 3. 추적성
산출물은 추적 가능해야 한다. 근거를 명확히 한다.
✅ ## 3. 내부/표출 분리
**같은 뿌리에서 두 뷰가 갈린다.** 우리가 배우는 것과 고객이 보는 것은 다르다.
- 표출층은 한 곳에서만 거른다. 컴포넌트마다 분기하면 언젠가 한 곳이 샌다.
- 숨기는 것은 분리가 아니다. 화면에서 빼고, 데이터에서도 뺀다.
> **시험**: 표출층 차단을 화면 숨김으로 만들었더니 개발자 도구로
> 폐기 해석·미승인 항목·확인 질문이 전부 보였다. 요소 제거로 고쳤고,
> 그다음엔 임베드된 데이터에 원본이 남는 것이 드러나 데이터 파생까지 갔다.
위쪽은 판정이 불가능합니다(“명확히”의 기준을 확인할 수 없습니다). 아래쪽은 제3자가 위반 여부를 육안으로 확인할 수 있으며, 원칙의 존재 이유도 함께 기록되어 있습니다.
폐기 절도 함께 유지합니다.
## 폐기된 원칙
- ~~모든 산출물에 승인 게이트를 둔다~~ — 폐기 260715
사유: 게이트 3개를 통과해야 초안이 나오니 아무도 초안을 안 만들게 됐다.
게이트는 외부로 나가는 지점에만 둔다로 대체.
이 규칙의 근거
시험 기록 강제. 원칙 문서는 관리하지 않으면 일반론의 나열로 수렴합니다. “품질을 중시한다”, “사용자 중심으로 생각한다”와 같은 항목은 반대 의견도 없고 준수 여부도 확인되지 않습니다. 위반 대가를 함께 기록하면 해당 원칙의 존재 근거가 남습니다. 대가를 기록할 수 없는 항목은 원칙에 해당하지 않습니다.
금지형 우선. “항상 X 한다”는 준수 여부의 판정이 어렵습니다. X를 일부만 수행한 경우의 판정 기준이 불분명합니다. “X 하지 않는다”는 한 번이라도 수행하면 위반입니다. 판정이 명확한 규칙만 실제로 작동합니다.
원칙이 결정을 이기는 순서. 개별 상황의 편의가 원칙에 우선하기 시작하면 원칙 문서는 기능하지 않습니다. 이에 변경 절차를 의도적으로 무겁게 설계했습니다. 원칙이 틀렸음을 보이는 사례를 먼저 제시해야 변경이 가능하며, 불편을 사유로 한 변경은 허용하지 않습니다.
폐기 기록. 원칙의 삭제는 그 원칙이 틀렸음을 확인했다는 의미입니다. 이 확인 내용은 원칙 자체보다 중요한 정보이며, 기록하지 않으면 소실됩니다. 기록이 없으면 동일한 원칙이 다시 제안됩니다.
10개 상한. 열람되지 않는 원칙은 부재한 것과 동일합니다. 원칙이 늘어날수록 상호 충돌이 발생하고, 충돌을 방치하면 판단 기준이 상황별 재량으로 바뀝니다. 이 상태에서는 지침 기능을 상실합니다.
주의점·한계
- 원칙이 10개를 넘으면 열람률이 떨어집니다. 추가 전에 기존 원칙에 흡수 가능한지 검토하십시오.
- 시험 기록에는 사내 정보가 포함되기 쉽습니다. 외부 공개용 문서라면 도메인 정보를 제거하고 인과만 남기십시오.
- 예외가 세 번째 발생하면 원칙 자체에 문제가 있습니다. 예외를 추가하지 말고 원칙을 수정하십시오.
변경 이력
v0.1· 2026. 8. 10. · 최초 공개