|
| 1 | +# CLAUDE.md — 블로그 게시글 작성 가이드 |
| 2 | + |
| 3 | +이 디렉토리는 블로그 게시글을 저장하는 곳이다. 글 작성을 요청받으면 아래 규칙을 반드시 따른다. |
| 4 | + |
| 5 | +## Frontmatter |
| 6 | + |
| 7 | +```yaml |
| 8 | +--- |
| 9 | +title: "제목" |
| 10 | +slug: english-kebab-case |
| 11 | +created: YYYY-MM-DD |
| 12 | +updated: YYYY-MM-DD # 선택. 수정한 경우에만 |
| 13 | +description: "설명" # 선택 |
| 14 | +category: category-id # categories.ts의 id 값 |
| 15 | +tags: [tag1, tag2] |
| 16 | +type: [til, series] # 선택. TIL이면 [til], 시리즈면 [series] |
| 17 | +series: "시리즈 이름" # 선택. type에 series가 있을 때만 |
| 18 | +order: 1 # 선택. 시리즈 내 순서 |
| 19 | +--- |
| 20 | +``` |
| 21 | + |
| 22 | +- `slug`는 반드시 영어 kebab-case |
| 23 | +- `category`는 java, kotlin, rust, cpp, spring, blog2, docker, github-actions, arch-linux, linux, algorithm, nvim, etc 중 하나 |
| 24 | +- `created`는 오늘 날짜 사용 |
| 25 | + |
| 26 | +## 파일 위치 |
| 27 | + |
| 28 | +`posts/{category}/파일명.md` 형식으로 저장한다. |
| 29 | + |
| 30 | +## 문체 |
| 31 | + |
| 32 | +### 종결어미: "~다" 체 (해라체/평서체) |
| 33 | + |
| 34 | +모든 글은 "~다" 체로 작성한다. "~요", "~습니다" 체는 절대 사용하지 않는다. |
| 35 | + |
| 36 | +``` |
| 37 | +(O) tmux는 서버-클라이언트 구조로 동작한다. |
| 38 | +(O) 이 명령은 프로젝트를 빌드할 수 있다. |
| 39 | +(O) 러스트에서 변수는 기본적으로 불변이다. |
| 40 | +(X) tmux는 서버-클라이언트 구조로 동작합니다. |
| 41 | +(X) 이 명령은 프로젝트를 빌드할 수 있어요. |
| 42 | +``` |
| 43 | + |
| 44 | +### 자주 사용하는 문장 패턴 |
| 45 | + |
| 46 | +| 용도 | 패턴 | 예시 | |
| 47 | +|------|------|------| |
| 48 | +| 정의/설명 | ~이다, ~한다 | "카고는 러스트에서 사용하는 빌드 시스템이다." | |
| 49 | +| 해결/방법 | ~하면 된다 | "NFD로 저장된 파일명을 NFC로 변환하면 된다." | |
| 50 | +| 필수사항 | ~해야 한다 | "엔티티 클래스는 기본 생성자가 있어야 한다." | |
| 51 | +| 이유/근거 | ~이기 때문이다, ~것이다 | "SSH 세션이 끊어져도 작업이 유지되는 이유이기도 하다." | |
| 52 | +| 가능성 | ~수 있다 | "워크플로우를 만들어서 자동화할 수 있다." | |
| 53 | +| 주의 | ~면 안 된다, ~에 주의한다 | "엔티티 클래스는 final이면 안 된다." | |
| 54 | +| 결과 발견 | ~했더니, ~했다 | "turbopack을 사용하니 폴더가 생성되지 않았다." | |
| 55 | +| 선택/결정 | ~하기로 했다 | "음악 플레이어를 따로 사용하기로 했다." | |
| 56 | + |
| 57 | +### 1인칭 |
| 58 | + |
| 59 | +"나"를 자연스럽게 사용한다. |
| 60 | + |
| 61 | +``` |
| 62 | +(O) 나는 systemd-boot를 선택했다. 나에겐 속도가 가장 중요하기 때문이다. |
| 63 | +(O) 나는 LazyVim을 쓰면서 처음 접했는데, 사용하기 괜찮아서 이걸 선택했다. |
| 64 | +(O) 내가 원했던 것은 2안이었지만, 실제로 해 보니 pr과 merge 과정이 더 귀찮았다. |
| 65 | +``` |
| 66 | + |
| 67 | +### 접속어 |
| 68 | + |
| 69 | +자연스럽게 사용하되 과하지 않게: |
| 70 | + |
| 71 | +- "그래서", "그런데", "하지만", "따라서", "그리고" |
| 72 | +- "단,", "이렇게 하면", "주의할 점은" |
| 73 | + |
| 74 | +## 글의 종류별 스타일 |
| 75 | + |
| 76 | +### 1. 레퍼런스/치트시트 (C++, Java 기본 문법 등) |
| 77 | + |
| 78 | +- 매우 간결하게 작성한다. 불필요한 서론 없이 바로 본론으로 들어간다. |
| 79 | +- 코드 위주, 설명은 최소화한다. |
| 80 | +- 표(table)로 함수/옵션을 정리한다. |
| 81 | + |
| 82 | +```markdown |
| 83 | +## 헤더 |
| 84 | + |
| 85 | +\`\`\`cpp |
| 86 | +#include <queue> |
| 87 | +\`\`\` |
| 88 | + |
| 89 | +## 선언 |
| 90 | + |
| 91 | +\`\`\`cpp |
| 92 | +queue<int> q; |
| 93 | +\`\`\` |
| 94 | + |
| 95 | +## 함수 |
| 96 | + |
| 97 | +| 함수 | 설명 | |
| 98 | +| ----- | ------------------------- | |
| 99 | +| push | back에 값을 추가한다. | |
| 100 | +| pop | front의 값을 삭제한다. | |
| 101 | +``` |
| 102 | + |
| 103 | +### 2. 튜토리얼/문제 해결 (블로그 구축, 설정 등) |
| 104 | + |
| 105 | +- **문제 → 시도 → 해결** 또는 **목표 → 방법 → 결과** 구조를 따른다. |
| 106 | +- 과정을 순서대로 서술한다. |
| 107 | +- 실패한 시도도 기록한다. |
| 108 | +- 코드 블록 사이에 설명을 넣는다. |
| 109 | + |
| 110 | +```markdown |
| 111 | +## 문제 |
| 112 | + |
| 113 | +개발 코드와 배포 코드가 다르다보니 매번 별도로 배포를 해야 했다. |
| 114 | + |
| 115 | +## 해결 |
| 116 | + |
| 117 | +다른 배포 방법이 있었다. GitHub Actions를 통해 workflow 안에서 직접 배포하는 방법이다. |
| 118 | + |
| 119 | +\`\`\`yaml |
| 120 | +... |
| 121 | +\`\`\` |
| 122 | + |
| 123 | +이렇게 하니 배포 과정이 훨씬 깔끔해졌다. |
| 124 | +``` |
| 125 | + |
| 126 | +### 3. TIL (Today I Learned) |
| 127 | + |
| 128 | +- 실용적이고 핵심만 전달한다. |
| 129 | +- 목표 → 방법 → 동작 방식 순서로 작성한다. |
| 130 | +- 깊은 배경지식보다 바로 쓸 수 있는 내용에 집중한다. |
| 131 | + |
| 132 | +### 4. 개념 설명 (알고리즘, 언어 특성 등) |
| 133 | + |
| 134 | +- 개념을 먼저 정의하고, 코드로 보여준다. |
| 135 | +- 비교가 있으면 표로 정리한다. |
| 136 | +- 공식 문서 링크를 포함한다. |
| 137 | + |
| 138 | +## 마크다운 포맷 |
| 139 | + |
| 140 | +### 제목(heading) |
| 141 | + |
| 142 | +- `##`부터 사용한다. `#`은 사용하지 않는다 (제목은 frontmatter의 title이 담당). |
| 143 | +- `###`은 `##` 내부의 하위 섹션에 사용한다. |
| 144 | + |
| 145 | +### 코드 블록 |
| 146 | + |
| 147 | +- 반드시 언어를 명시한다: ````cpp`, ````bash`, ````yaml` 등 |
| 148 | +- 코드 블록 앞뒤에 간결한 설명을 붙인다. |
| 149 | +- 주석은 꼭 필요한 경우에만 넣는다. |
| 150 | + |
| 151 | +### 표(table) |
| 152 | + |
| 153 | +- 옵션, 함수, 비교 등 구조화된 정보는 표를 적극 사용한다. |
| 154 | + |
| 155 | +### 인용(blockquote) |
| 156 | + |
| 157 | +- 부연 설명, 주의사항, 팁에 사용한다. |
| 158 | +- 개인적인 경험이나 여담을 넣을 때도 사용한다. |
| 159 | + |
| 160 | +```markdown |
| 161 | +> turbopack을 사용하니 `.contentlayer` 폴더가 아예 생성되지 않았다. 꼭 turbopack 옵션은 끄고 서버를 실행해야 한다. |
| 162 | +
|
| 163 | +> 나는 유선랜이라 추가 작업이 필요 없었다. |
| 164 | +``` |
| 165 | + |
| 166 | +### 참고 링크 |
| 167 | + |
| 168 | +본문 하단에 번호 참조 방식을 선호한다: |
| 169 | + |
| 170 | +```markdown |
| 171 | +본문에서 [링크 텍스트][1]로 참조한다. |
| 172 | + |
| 173 | +[1]: https://example.com 'title' |
| 174 | +``` |
| 175 | + |
| 176 | +또는 인라인 링크도 사용한다: |
| 177 | + |
| 178 | +```markdown |
| 179 | +[공식 문서](https://example.com)에서 확인할 수 있다. |
| 180 | +``` |
| 181 | + |
| 182 | +## 하지 말 것 |
| 183 | + |
| 184 | +- "~습니다", "~요" 체 사용 금지 |
| 185 | +- 과도한 이모지 사용 금지 |
| 186 | +- 불필요한 인사말이나 맺음말 금지 ("안녕하세요", "감사합니다", "도움이 되셨길 바랍니다" 등) |
| 187 | +- 과도하게 친절하거나 장황한 설명 금지 |
| 188 | +- 내용과 무관한 SEO성 문장 금지 |
| 189 | +- AI가 작성한 티가 나는 뻔한 표현 금지 ("이번 포스팅에서는", "알아보도록 하겠습니다", "마무리하며" 등) |
0 commit comments