| name | md-link-check |
| description | Validates markdown internal links, anchor links, and TOC completeness. Use after creating or modifying any .md file to verify link integrity and heading numbering. |
Markdown Link & TOC Check Rules
๋ชฉ์
.md ํ์ผ ์์ฑ/์์ ํ ๋ค์ ์ธ ๊ฐ์ง๋ฅผ ๋ฐ๋์ ๊ฒ์ฆํฉ๋๋ค.
- ๋ด๋ถ ํ์ผ ๋งํฌ (
[ํ
์คํธ](๊ฒฝ๋ก.md)) โ ํ์ผ ์กด์ฌ ์ฌ๋ถ
- ์ต์ปค ๋งํฌ (
#์น์
๋ช
) โ ์ค์ H2 ์น์
๊ณผ ์ผ์น ์ฌ๋ถ
- ๋ชฉ์ฐจ ์๊ฒฐ์ฑ โ ์ค์ H2 ์น์
์ด ๋ชฉ์ฐจ์ ๋ชจ๋ ํฌํจ๋์ด ์๋์ง
1. ์ต์ปค ๋งํฌ ๊ฒ์ฌ
GitHub ์ต์ปค ๋ณํ ๊ท์น
ํค๋ฉ ํ
์คํธ โ ์ต์ปค ๋ณํ ์ ์ ์ฉ๋๋ ๊ท์น:
- ์๋ฌธ์ ๋ณํ
- ์์ซ์ยทํ๊ธยท๊ณต๋ฐฑยทํ์ดํ ์ด์ธ ๋ฌธ์ ์ ๊ฑฐ (ํน์๋ฌธ์ ํฌํจ)
- ๊ณต๋ฐฑ โ
- ๋ณํ (์ฐ์ ๊ณต๋ฐฑ๋ ๊ฐ๊ฐ -๋ก, ์ถ์ฝ ์์)
ํน์๋ฌธ์ ์ ๊ฑฐ๋ก ์ธํ ์ด์ค ํ์ดํ ๋ฐ์ ์์:
| ํค๋ฉ | ์ต์ปค | ์ด์ |
|---|
์ปจํ
์คํธ / ๋๊ตฌ ์์ธ | #์ปจํ
์คํธ--๋๊ตฌ-์์ธ | / ์ ๊ฑฐ โ ์์ชฝ ๊ณต๋ฐฑ์ด ๊ฐ๊ฐ - |
ํ ํฐ ์ ์ฝ & ์ฑ๋ฅ ์ต์ ํ | #ํ ํฐ-์ ์ฝ--์ฑ๋ฅ-์ต์ ํ | & ์ ๊ฑฐ โ ์ด์ค ํ์ดํ |
`@` ์ฐธ์กฐ ๊ธฐ๋ฅ | #--์ฐธ์กฐ-๊ธฐ๋ฅ | ๋ฐฑํฑยท@ ์ ๊ฑฐ โ ์ ๊ณต๋ฐฑ - |
Plan โ ์์ด์ ํธ | #plan--์์ด์ ํธ | โ ์ ๊ฑฐ โ ์ด์ค ํ์ดํ |
CI/CD ๋น๋ํํ | #cicd-๋น๋ํํ | / ์ ๊ฑฐ, ์์ชฝ ๊ณต๋ฐฑ ์์ผ๋ฉด ๋จ์ ์ ๊ฑฐ |
์ต์ปค ๊ฒ์ฆ ์คํฌ๋ฆฝํธ
import re
def github_anchor(heading):
s = re.sub(r'^#+\s*', '', heading.strip())
s = s.lower()
s = re.sub(r'[^\w\s\-\uAC00-\uD7A3]', '', s)
s = re.sub(r' ', '-', s)
return s
์ฝ๋๋ธ๋ก ๋ด๋ถ ํค๋ฉ ์ฃผ์
``` ์์ ## ํค๋ฉ์ ์ค์ ์น์
์ด ์๋๋๋ค.
๋ชฉ์ฐจ ๋งํฌ ๋์์ ์ฝ๋๋ธ๋ก ๋ฐ์ H2๋ง ํด๋นํฉ๋๋ค.
2. ๋ชฉ์ฐจ ์๊ฒฐ์ฑ ๊ฒ์ฌ
๊ท์น
- ์ฝ๋๋ธ๋ก ๋ฐ์ ๋ชจ๋ H2 ์น์
์ ๋ชฉ์ฐจ์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
- ๋จ, ์๋ ๊ณ ์ ์น์
์ ๋ชฉ์ฐจ์์ ์ ์ธํฉ๋๋ค:
๋ชฉ์ฐจ, ์ฐธ๊ณ ์๋ฃ, ํต๊ณ, ์ฐธ๊ณ URL
- ๋ชฉ์ฐจ์ ์๋ ๋งํฌ๊ฐ ์ค์ H2 ์น์
(์ฝ๋๋ธ๋ก ๋ฐ)์ ๊ฐ๋ฆฌํค๋์ง ํ์ธํฉ๋๋ค.
๊ฒ์ฌ ์ ์ฐจ (๋ฌธ์ ์์ฑ/์์ ํ ํ์)
- ์ฝ๋๋ธ๋ก ๋ฐ H2 ๋ชฉ๋ก ์ถ์ถ
- ๊ฐ H2์ ์ฌ๋ฐ๋ฅธ ์ต์ปค ๊ณ์ฐ (
github_anchor() ํจ์ ์ฌ์ฉ)
- ๋ชฉ์ฐจ์ ๋ชจ๋ ๋งํฌ ์ต์ปค์ ๋์กฐ โ ๋ถ์ผ์น ์ ์์
- ๋ชฉ์ฐจ์ ์๋ H2 โ ๋ชฉ์ฐจ์ ์ถ๊ฐ
3. ๋ด๋ถ ํ์ผ ๋งํฌ ๊ฒ์ฌ
BASE=/path/to/repo
grep -oP '\[.*?\]\(\K[^)#]+\.md' FILE.md | while read link; do
[ -f "$BASE/$link" ] && echo "OK $link" || echo "โ $link"
done
์์ ๊ท์น
- ํ์ผ๋ช
๋ณ๊ฒฝ ๋ฐ์ โ ๋งํฌ ํ
์คํธ์ ๊ฒฝ๋ก ๋ชจ๋ ์์
- ๊ฒฝ๋ก ๋๋ฝ โ ์๋ธ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก ์ถ๊ฐ
- ์๋ ๊ฒฝ๋ก โ ์๋ธ๋๋ ํ ๋ฆฌ์์ ์์ ์ฐธ์กฐ ์
../ ์ฌ์ฉ
4. H2 ๋ฒํธ ์ฒด๊ณ
๋ชฉ์ฐจ๊ฐ ์๋ ๋ฌธ์์ H2 ์น์
์ ๋ฒํธ๋ฅผ ๋ถ์ฌํฉ๋๋ค.
# โ ๋ฒํธ ์์
## ๊ฐ์
## ์ค์น
## ์ฌ์ฉ๋ฒ
# โ
๋ฒํธ ์์
## 1. ๊ฐ์
## 2. ์ค์น
## 3. ์ฌ์ฉ๋ฒ
๋ฒํธ ์ ์ธ ๋์
์๋ ์น์
์ ๋ฒํธ๋ฅผ ๋ถ์ด์ง ์์ต๋๋ค.
| ์น์
| ์ด์ |
|---|
๋ชฉ์ฐจ, ์ฐธ๊ณ ์๋ฃ, ํต๊ณ | ๊ณ ์ ํธํฐ ์น์
|
๋ฌธ์ ๋ชฉ๋ก, ๋ฌธ์ ํธ๋ฆฌ | README ์ธ๋ฑ์ค ๊ตฌ์กฐ |
| OS๋ณ/๋ ์ด์ด๋ณ/์ฐ์ฐจ๋ณ ๋ถ๋ฅ ์น์
| ๋ฒํธ๋ณด๋ค ๋ถ๋ฅ ์ฒด๊ณ๊ฐ ์ฐ์ |
๋จ๊ณ ๋ฒํธ๊ฐ ์ด๋ฏธ ์๋ ์น์
(1๋จ๊ณ:, Phase 1 ๋ฑ) | ์ค๋ณต ๋ฒํธ ๋ฐฉ์ง |
๋ฒํธ ๋ถํ์ ๋ฌธ์ ์ ํ
์๋ ์ ํ์ ๋ฌธ์๋ H2 ์ ์ฒด์ ๋ฒํธ๋ฅผ ๋ถ์ด์ง ์์ต๋๋ค.
| ์ ํ | ์์ |
|---|
| OS/๋ฒ์ ๋ณ ๋ถ๋ฅ ๋ฌธ์ | root_password_recovery.md โ CentOS 7, Rocky Linux 9 ๋ฑ |
| ๋ ์ด์ด/ํ๋กํ ์ฝ๋ณ ๋ถ๋ฅ | ddos_attacks_*.md โ Layer 3, Layer 4, Layer 7 |
| ์น์
๋ช
์ ๋ฒํธ ํฌํจ | 1๋จ๊ณ:, 2๋จ๊ณ:, Phase 1 ๋ฑ์ด ์ด๋ฏธ ์น์
๋ช
์ ์๋ ๊ฒฝ์ฐ |
| ๋น๊ต/๋ถ์ ๋ฌธ์ | *_comparison.md, ansible_vs_jenkins.md |
| README ์ธ๋ฑ์ค | ๋ฌธ์ ๋ชฉ๋ก ๋์ด์ด ์ฃผ๋ชฉ์ ์ธ ํ์ผ |
| ์๋ฌธ ๊ธฐ๋ฅ ๋ชฉ๋ก | vim_airline.md ๋ฑ ์๋ฌธ ์ ์ง ํ์ |
๋ฒํธ ์ฐ์์ฑ
H2 ๋ฒํธ๋ 1.๋ถํฐ ์์ํ์ฌ ๋น ์ง์์ด ์ฐ์๋์ด์ผ ํฉ๋๋ค.
๋ฒํธ ์ ์ธ ๋์ ์น์
์ ์นด์ดํธ์์ ์ ์ธํฉ๋๋ค.
5. Bold ๋ ๋๋ง ๊นจ์ง ๋ฐฉ์ง
**...(์๋ฌธ)**ํ๊ธ ํจํด์ ์ผ๋ถ ๋งํฌ๋ค์ด ํ์์์ ๋ซํ **๋ฅผ ์ธ์ํ์ง ๋ชปํด bold๊ฐ ๊นจ์ง๋๋ค.
# โ ๊นจ์ง
**๊ฐ์ ํ
์ด๋ธ(Virtual Table)**์ด๋ค.
**GC(Garbage Collection)**๋ก ์ธํ
# โ
์ ์ โ ** ๋ค ๊ณต๋ฐฑ 1์นธ ์ถ๊ฐ
**๊ฐ์ ํ
์ด๋ธ(Virtual Table)** ์ด๋ค.
**GC(Garbage Collection)** ๋ก ์ธํ
๊ท์น: ** ๋ซํ ํ๊ทธ ๋ฐ๋ก ๋ค์ ํ๊ธ์ด ์ค๋ฉด ๋ฐ๋์ ๊ณต๋ฐฑ 1์นธ ์ฝ์
.
6. ๋ฌธ์ ์์ฑ ํ ์ฒดํฌ๋ฆฌ์คํธ
๋ฌธ์๋ฅผ ์๋ก ์์ฑํ๊ฑฐ๋ H2 ์น์
์ ์ถ๊ฐ/์์ /์ญ์ ํ ๊ฒฝ์ฐ ๋ฐ๋์ ํ์ธํฉ๋๋ค.