chore: 문서 수정

This commit is contained in:
DongHyeonka
2026-07-29 18:29:25 +09:00
parent 3ac0a367dc
commit 4b7f1a90d2
29 changed files with 1594 additions and 747 deletions
@@ -7,24 +7,49 @@ description: Use when a Korean technical blog or reader-facing document should r
## 핵심 원칙
기술 사실을 설명문으로 나열하지 말고, 작성자가 직접 코드를 보고 실행하면서 예상하고, 발견하고, 판단하고, 바꾼 과정으로 쓴다. 논리와 근거는 그대로 두고 서술 관점과 문장 형식만 고친다.
기술 사실을 설명문으로 나열하지 말고, 서술자가 코드를 만들고 판단했거나 직접 확인한 과정으로 쓴다. 먼저 서술자가 코드의 작성자인지 외부 분석자인지 확정한다. 논리와 근거는 그대로 두고 서술 관점과 문장 형식만 고친다.
[문장 패턴](references/sentence-patterns.md)을 처음부터 끝까지 읽은 뒤 수정한다.
## 서술자의 위치부터 고정하기
사용자가 자신이 만든 코드라고 밝혔다면 작성자 관점으로 쓴다. `처음 저장소를 열었습니다`, `코드를 따라가 보니`, `모듈을 훑어봤습니다`, `확인해 보니 이런 구조였습니다`처럼 다른 사람의 코드를 분석하는 표현을 쓰지 않는다.
작성자 관점에서는 다음 내용을 앞에 둔다.
- 만들 때 해결하려 한 문제
- 당시 정한 기준과 선택
- 그 선택을 코드와 빌드에 옮긴 방법
- 구현을 끝낸 범위와 아직 연결하지 않은 범위
- 선택하면서 받아들인 비용
예를 들어 `처음 코드를 열었을 때 19개 모듈이 보였습니다`가 아니라 `코어의 클래스패스를 제한하고 선택형 어댑터를 분리하면서 19개 모듈로 만들었습니다`라고 쓴다. 소유 관계가 확인되지 않았다면 작성자 경험을 만들어 내지 않는다.
## 경험담 문체
문서의 시작과 주요 전환에서는 `저는`이나 `제가`를 사용한다. 모든 문장에 반복하지는 않는다. 다음 흐름으로 문단 전체를 다시 쓴다.
1. 처음 마주한 코드, 화면, 요청 또는 문제를 보여 준다.
1. 처음 마주한 코드, 화면, 요청 또는 만들 때 해결하려 한 문제를 보여 준다.
2. 당시의 예상이나 처음 보인 인상을 짧게 적는다.
3. `그런데` 뒤에 실제 실행이나 코드 추적에서 발견한 차이를 둔다.
4. 낯선 용어는 그때 이해한 내용처럼 바로 풀어 쓴다.
5. 그 차이 때문에 무엇을 확인하고 선택하거나 바꿨는지 적는다.
6. 결과와 함께 새로 생긴 비용이나 남은 문제를 적는다.
여섯 요소의 이름은 출력하지 않고 필요한 요소만 쓴다. 독자가 작성자의 확인 순서를 따라가게 하며, 기준 문단이 `~했습니다`를 사용하면 같은 높임말을 유지한다.
여섯 요소의 이름은 출력하지 않고 필요한 요소만 쓴다. 독자가 작성자의 판단과 확인 순서를 따라가게 하며, 기준 문단이 `~했습니다`를 사용하면 같은 높임말을 유지한다.
`첫 번째 제약이다`를 지우거나 `호출 주체`를 구성요소 이름으로 바꾸는 것만으로는 교정이 끝나지 않는다. `처음에는`, `그런데 확인해 보니`, `그래서`, `그 결과`로 이어지는 경험의 흐름이 보여야 한다.
`첫 번째 제약이다`를 지우거나 `호출 주체`를 구성요소 이름으로 바꾸는 것만으로는 교정이 끝나지 않는다. 경험의 흐름도 서술자의 위치에 맞춰야 한다. 외부 분석자는 `처음에는`, `그런데 확인해 보니`로 쓸 수 있지만, 작성자는 `만들 때`, `구현하면서`, `그래서 …로 나눴습니다`, `그 결과`로 자신의 판단과 작업을 설명한다.
## 문장 종결을 문서 전체에서 맞추기
사용자가 `~했습니다` 문체를 예시로 주었거나 기준 문서가 높임말이면, 제목·표의 명사구·인용문·코드 블록을 제외한 독자용 본문 전체를 다음 어투로 쓴다.
- 직접 확인하거나 수행한 일: `확인했습니다`, `따라갔습니다`, `생각했습니다`
- 현재 동작과 기술 설명: `사용합니다`, `호출합니다`, `막습니다`
- 상태와 판단: `있습니다`, `없습니다`, `입니다`, `아닙니다`
- 부정: `다루지 않습니다`, `보장하지 않습니다`
한 문단만 `저는 확인했습니다`로 열고 뒤에서 `있다`, `한다`, `아니다`, `다루지 않는다`로 돌아가면 교정이 끝난 것이 아니다. 수정이 끝나면 fenced code를 제외한 본문에서 평서형 종결이 남았는지 따로 검색한다. 원문 코드, 직접 인용, 명령 출력은 어투를 바꾸지 않는다.
## 한국어 말하기 검사
@@ -38,7 +63,7 @@ description: Use when a Korean technical blog or reader-facing document should r
## 경험과 사실의 경계
코드 비교, 실행, 요청 추적처럼 실제로 수행한 작업은 1인칭으로 서술할 수 있다. 사용자가 경험담 문체를 요구했다면 이 관점을 제거하지 않는다.
코드 작성, 코드 비교, 실행, 요청 추적처럼 실제로 수행한 작업은 1인칭으로 서술할 수 있다. 사용자가 경험담 문체를 요구했다면 이 관점을 제거하지 않는다. 다만 코드를 만든 경험을 저장소를 처음 분석한 경험으로 바꾸지 않는다.
다만 근거에 없는 감정, 대화, 조언, 실패, 성과, 작업 기간은 만들지 않는다. `놀랐습니다`, `누군가 조언했습니다`, `며칠이 걸렸습니다`처럼 확인할 수 없는 경험은 추가하지 않는다. 기술 선택의 이유도 새로 만들지 않는다.
@@ -52,17 +77,20 @@ description: Use when a Korean technical blog or reader-facing document should r
## 수정 절차
1. 앞뒤 문단까지 읽고 작성자가 실제로 확인한 코드, 실행 결과와 판단을 찾는다.
2. 독자가 경험을 따라갈 시작점과 `그런데` 뒤에 놓을 발견을 고른다.
3. 주요 절을 1인칭 경험으로 열고, 기술 동작은 구체적인 구성요소와 동사로 설명한다.
4. 낯선 용어를 처음 필요한 문장 옆에서 풀어 쓴다.
5. 대조 문장은 소리 내어 읽고 `실제로는 무엇이 다른가`에 바로 답하는지 확인한다.
6. 파일을 직접 수정한 뒤 사실, 조건, 불확실성이 바뀌지 않았는지 비교한다.
1. 사용자 요청과 문서에서 코드 소유 관계를 확인하고 서술자를 작성자 또는 외부 분석자로 고정한다.
2. 앞뒤 문단까지 읽고 작성자가 실제로 구현하거나 확인한 코드, 실행 결과와 판단을 찾는다.
3. 독자가 경험을 따라갈 시작점과 `그런데` 뒤에 놓을 발견을 고른다.
4. 주요 절을 1인칭 경험으로 열고, 기술 동작은 구체적인 구성요소와 동사로 설명한다.
5. 낯선 용어를 처음 필요한 문장 옆에서 풀어 쓴다.
6. 대조 문장은 소리 내어 읽고 `실제로는 무엇이 다른가`에 바로 답하는지 확인한다.
7. 파일을 직접 수정한 뒤 사실, 조건, 불확실성이 바뀌지 않았는지 비교한다.
## 완료 조건
- 작성자의 시작점, 발견, 행동과 결과가 보인다.
- 코드 작성자의 문서가 외부 분석자의 저장소 검토처럼 읽히지 않는다.
- 단순한 객관식 해설이나 결론 목록으로 읽히지 않는다.
- 필요한 곳에서 `저는`이나 `제가`가 실제 서술 관점을 만든다.
- 사용자 예시와 같은 높임말이 독자용 본문 전체에서 유지된다.
- 한국인 개발자가 동료에게 설명할 때 쓸 수 있는 문장으로 읽힌다.
- 기술적 의미와 문서 구조가 그대로 남는다.
@@ -27,6 +27,20 @@
여기서는 `호출 주체가 다르다`를 구성요소 이름으로 바꾸는 데서 멈추지 않는다. 작성자가 같은 화면을 보고, 예상과 다른 요청을 발견하고, 낯선 값을 이해한 뒤, 각 구성요소를 확인한 순서로 문단 전체를 다시 쓴다.
## 작성자와 외부 분석자를 바꾸지 않는다
사용자가 자신이 만든 코드를 설명한다면 다음 문장은 관점이 잘못됐다.
수정 전:
> 처음 저장소를 열었을 때 19개 모듈이 먼저 보였습니다. 각 빌드 파일을 따라가 보니 코어의 클래스패스를 제한하는 구조였습니다.
수정 후:
> 코어에서 금지한 프레임워크 타입이 보이지 않게 하려고 클래스패스를 모듈마다 나눴습니다. 선택형 어댑터까지 분리한 결과 19개 모듈이 됐습니다.
작성자는 자신의 코드를 `열어 보고`, `훑어 보고`, `따라가며 발견한` 사람처럼 말하지 않는다. 만들 때 해결하려 한 문제, 정한 기준, 구현한 방법, 아직 연결하지 않은 범위와 받아들인 비용을 설명한다. 반대로 소유 관계를 알 수 없는 문서에 작성자 경험을 새로 붙이지 않는다.
## 한국어에서는 실제 차이를 바로 말한다
수정 전:
@@ -57,7 +71,7 @@
수정 후:
> AP1과 AP2에서는 브라우저가 API를 직접 부다. AP3에서는 BFF가 대신 호출하고, AP4에서는 Nginx가 요청을 이어 다.
> AP1과 AP2에서는 브라우저가 API를 직접 부릅니다. AP3에서는 BFF가 대신 호출하고, AP4에서는 Nginx가 요청을 이어 갑니다.
`호출 주체가 다르다`고 분류하지 말고 실제 구성요소와 행동을 쓴다.
@@ -69,7 +83,7 @@
수정 후:
> 그래서 패턴 이름만 보고 구현되지 않은 운영 속성을 덧붙이면 안 다.
> 그래서 패턴 이름만 보고 구현되지 않은 운영 속성을 덧붙이면 안 됩니다.
실제 순서를 뜻하지 않는 `첫 번째`, `두 번째`, `마지막`은 제거한다. 절차, 화면, 레이어처럼 순서 자체가 정보라면 유지한다.
@@ -81,7 +95,7 @@
수정 후:
> 브라우저가 Resource Server를 직접 부르는 방식은 유지해야 했다. 다만 client secret과 refresh token까지 JavaScript에 맡길 수는 없었다. 그래서 code 교환과 refresh token 보관은 confidential mediator가 맡았다.
> 브라우저가 Resource Server를 직접 부르는 방식은 유지해야 했습니다. 다만 client secret과 refresh token까지 JavaScript에 맡길 수는 없었습니다. 그래서 code 교환과 refresh token 보관은 confidential mediator가 맡았습니다.
`상황`, `선택`, `대안`, `가드레일`을 주어로 삼지 않는다. 그 자리에 요구, 행동, 이유, 남은 비용을 넣는다.
@@ -89,9 +103,9 @@
용어를 삭제하거나 모두 번역하지 않는다. 처음 이해가 필요한 지점에서만 짧게 푼다.
> 포팅은 코드를 다른 언어로 옮겨 다시 만드는 일다.
> 포팅은 코드를 다른 언어로 옮겨 다시 만드는 일입니다.
> authorized client는 로그인한 사용자와 OAuth client에 연결된 token 묶음다.
> authorized client는 로그인한 사용자와 OAuth client에 연결된 token 묶음입니다.
뒤 문장에서 이미 행동으로 뜻이 드러나면 별도의 정의를 반복하지 않는다.