| name | mdx-render |
| description | Use when converting a finalized 3-Zone chapter YAML (plus optional dashboard.yml) into Docusaurus MDX files โ generating frontmatter with authors/ai_assisted/source metadata, importing custom components, placing components in the editor-specified render_order, writing the /appendix dashboard page, and preserving backups of previously written MDX. Also use when deciding which part-XX/ folder a chapter belongs to. |
mdx-render
Overview
ํ์ดํ๋ผ์ธ ์ต์ข
๋จ๊ณ. ํธ์งยท๋ณด๊ฐ ์๋ฃ๋ YAML์ ๋
์๊ฐ ๋ณผ Docusaurus MDX ํ์ผ๋ก ์ถ๋ ฅํ๋ค. Human-only ํ๋๋ ์ปค์คํ
์ปดํฌ๋ํธ props๋ก๋ง ์ ๋ฌํด "์ฌ๋ ์์ญ"์์ด ์๊ฐ์ ์ผ๋ก๋ ๋๋ฌ๋๊ฒ ํ๋ค.
์ดํฌ์ ์น์
์ด๋ชจ์ง: ๋ ๋๋ง ์ ์ถ๊ฐํ๋ H2/H3 ํค๋ฉ(์: "๐ ์ฝ๋ ๋์ ๋งก์๋ณด๊ธฐ", "โ๏ธ ๊ฐ์ ํด๋ณด๊ธฐ")๊ณผ ์ฐ๋ฌธ ๋ธ๋ฆฟ์ง๋ writing-voice-ff ์คํฌ์ ์ญํ ํ ์ด๋ชจ์ง ํ์ ํด์์ฒด ์์น์ ๋ฐ๋ฅธ๋ค. ์ปค์คํ
์ปดํฌ๋ํธ ๋ด๋ถ ํ
์คํธ๋ YAML literal ๊ทธ๋๋ก (์ดํฌ ๊ฐ์ด๋ ์ ์ฉ ์ ํจ).
When to Use
- chapter-editor + fe-content-enhancer ์ฐ์ถ๋ฌผ์ด ์ค๋น๋๊ณ ์ต์ข
MDX ์์ฑ์ด ํ์ํ ๋
- aggregator ๋์๋ณด๋ YAML๋ก /appendix ํ์ด์ง๋ฅผ ๋ง๋ค ๋
- ๊ธฐ์กด MDX๋ฅผ ๋ฎ์ด์ธ ๋ (๋ฐฑ์
ํฌํจ)
์ถ๋ ฅ ํ์ผ ์์น
| ๋์ | ๊ฒฝ๋ก | ๋งคํ ๊ท์น |
|---|
| ์ฑํฐ MDX | docs/part-{NN}/ch{XX}.mdx | ์ฅ์ โ Part ๋งคํ ํ ์ฐธ์กฐ |
| ๋ถ๋ก ๋์๋ณด๋ | docs/appendix/dashboard.mdx | ๊ณ ์ ๊ฒฝ๋ก |
| ๋ฐฑ์
| _workspace/_prev/{timestamp}/{์๊ฒฝ๋ก} | ํ์์คํฌํ ํด๋ |
์ฅ์ โ Part ๋งคํ
| ์ฅ์ | Part |
|---|
| 1~4 | part-01 |
| 5~9 | part-02 |
| 10~13 | part-03 |
| 14~19 | part-04 |
| 20~24 | part-05 |
| 25~31 | part-06 |
| 32~35 | part-07 |
Frontmatter ํ์ ํ๋
---
sidebar_position: 5
title: "Chapter 5. ๊ณ ๊ธ ๋ณ์ ์ข
๋ฅ"
description: "..."
authors:
- Alice
- diego
ai_assisted:
- summary
- code_examples
- checklist
- verdict.rationale
source: notion-pull
source_page_id: xxx
extracted_at: 2026-04-18T22:30:00+09:00
edited_at: 2026-04-18T22:45:00+09:00
---
์ปดํฌ๋ํธ import (๋ชจ๋ ์ฑํฐ ๊ณตํต)
import Verdict from '@site/src/components/Verdict';
import MemberOpinion from '@site/src/components/MemberOpinion';
import VotingBar from '@site/src/components/VotingBar';
import DevilsAdvocate from '@site/src/components/DevilsAdvocate';
import BestPickCallout from '@site/src/components/BestPickCallout';
๋ถ๋ก ์ ์ฉ:
import VerdictDistribution from '@site/src/components/VerdictDistribution';
import BestDiscussions from '@site/src/components/BestDiscussions';
์ฑํฐ MDX ํ
ํ๋ฆฟ (render_order ์ค์)
YAML render_order๊ฐ ์ง์ ํ ์์๋๋ก ์น์
์ถ๋ ฅ. ๊ธฐ๋ณธ๊ฐ ์์:
---
<frontmatter>
---
<imports>
<Verdict rating="๐ข ์์กด" rationale="..." />
## ๐ ํต์ฌ ์์ฝ
{lead}
- {bullets[0]}
- {bullets[1]}
- {bullets[2]}
{bridges.after_summary ?? ''}
<VotingBar average={4.2} votes={{ Alice: 4, Amber: 5, Crong: 3, diego: 4, Jay: 5, Leo: 4, zinii: 3 }} />
## ๐ป React/TS ์ฝ๋ ์์
### {code_examples[0].title}
**Before โ**
```typescript
{code_examples[0].before}
After โ
{code_examples[0].after}
๐ฅ ํ ๋ก ํฌ์ธํธ & ์๊ฐํด๋ณผ ์ง๋ฌธ
- {discussion_questions[0]}
- {discussion_questions[1]}
- {discussion_questions[2]}
{bridges.before_opinions ?? ''}
๐ฌ ๋ฉค๋ฒ ์๊ฒฌ
โ
FE ์ค์ ์ฒดํฌ๋ฆฌ์คํธ
```
๋ถ๋ก MDX ํ
ํ๋ฆฟ
---
sidebar_position: 99
title: "๐ ์คํฐ๋ ๋์๋ณด๋"
description: "Code Complete ์คํฐ๋ ์ ์ฒด ์ง๊ณ โ ํ์ ๋ถํฌ, ํฌํ ํ๊ท , ๋ฒ ์คํธ ํ ๋ก "
---
import VerdictDistribution from '@site/src/components/VerdictDistribution';
import BestDiscussions from '@site/src/components/BestDiscussions';
## ์คํฐ๋ ์งํ ํํฉ
- ์งํ๋ ์ฑํฐ: {chapters_included}
- ์ฐธ์ฌ ๋ฉค๋ฒ: {members_count}๋ช
## โ๏ธ ํ์ ๋ถํฌ
<VerdictDistribution alive={5} evolved={2} dead={1} />
## ๐ ํฌํ ์์ฝ
- ์ ์ฒด ํ๊ท : **{overall_average}** / 5
### ์ฑํฐ๋ณ ํ๊ท
| ์ฑํฐ | ํ๊ท | ํ์ |
|---|---|---|
| ch01 | 4.2 | ๐ข ์์กด |
| ch02 | 3.5 | ๐ก ๋ณํ |
### ์ต๊ณ ํ๊ฐ TOP 3
1. Chapter 5 โ ๊ณ ๊ธ ๋ณ์ ์ข
๋ฅ (4.7)
### ์ต์ ํ๊ฐ TOP 3
1. Chapter 6 โ ... (2.1)
## ๐ ๋ฒ ์คํธ ํ ๋ก
<BestDiscussions items={[...]} />
## ๐ Devil's Advocate ๋ชจ์
> **ch05 (diego):** ...
## ๋ฉค๋ฒ ํ๋
| ๋ฉค๋ฒ | ์๊ฒฌ ์์ฑ | ๋ฐ๋ฐ ๋ด๋น | ํฌํ ์ ์ถ |
|---|---|---|---|
| Alice ๐ฆ | 8 | 1 | 8 |
๋ ๋ ๊ท์น
- ๋น ํ๋ ์ฒ๋ฆฌ:
member_opinions์์ opinion ์๋ ๋ฉค๋ฒ โ ํด๋น <MemberOpinion> ํ๊ทธ ์์ฒด๋ฅผ ์๋ต (๋น ๋งํ์ ๊ธ์ง)
devils_advocate null โ <DevilsAdvocate> ์น์
์ ์ฒด ์๋ต
best_pick.content null โ <BestPickCallout> ์๋ต
code_examples 0๊ฐ โ "๐ป React/TS ์ฝ๋ ์์ " H2๋ ์๋ต
- MDX ํน์๋ฌธ์ ์ด์ค์ผ์ดํ:
{, } โ {, } (์ฝ๋ ๋ธ๋ก ์ธ)
- ์ฌ์ด๋๋ฐ ์์:
sidebar_position์ ์ฅ์ ๊ทธ๋๋ก. ํ
๋ง ์ฌ๋ฐฐ์น ์ ๋ณ๋ sidebars.ts ์์ (์ด ์คํฌ ๋ฒ์ ๋ฐ)
- ๊ฒ์ฆ: ์ถ๋ ฅ ์งํ
npm run docusaurus build --dry-run์ด ๊ฐ๋ฅํ ์ํ์ฌ์ผ ํจ (์ค์ ์คํ์ ํธ์ถ์ ์ฑ
์)
๋ฐฑ์
๊ท์น
๊ธฐ์กด docs/part-NN/chXX.mdx ์กด์ฌ ์:
_workspace/_prev/{YYYYMMDD-HHMMSS}/docs/part-NN/chXX.mdx๋ก ๋ณต์ฌ
- ์๋ณธ ์์น ๋ฎ์ด์ฐ๊ธฐ
- git ์ ์ฅ์๋ฉด diff๋ก๋ ์ถ์ ๊ฐ๋ฅํ์ง๋ง ์์ ์ฅ์น ์ ์ง
Common Mistakes
| ์ค์ | ๊ฒฐ๊ณผ | ์์ |
|---|
opinion props ํ
์คํธ์ ์ค๋ฐ๊ฟ | JSX ๋ ๋ ๊นจ์ง | \n์ {"\n"} ๋๋ <br />๋ก |
| authors์ zinii ๋๋ฝ (opinion ์์) | ๊ธฐ์ฌ ์๋ ์ฌ๋์ด author๋ก ๊ธฐ๋ก | opinions/advocate ์์ฑ์๋ง authors |
| frontmatter์ ai_assisted ๋น ๋ฐฐ์ด | false ์ธ์ (AI ๋ฌด๊ฐ์
์ฒ๋ผ ๋ณด์) | ์ต์ [] ๋ช
์, null/์๋ต ๊ธ์ง |
| sidebar_position์ render_order๋ก ํผ๋ | ์ฌ์ด๋๋ฐ ์์ ๋ค์ฃฝ๋ฐ์ฃฝ | sidebar_position์ ํญ์ ์ฅ์ |