์ ํํ API ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์์ฑํ์ฌ ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ ๊ฐ๋ฐ ๋ฐ ํ์ ์ ๊ฐ์ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. ๊ธ๋ก๋ฒ ํ์ ์ํ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ ๋ฌธ์ํ: ๊ธ๋ก๋ฒ ํ์ ์ํ API ๋ฌธ์ ์์ฑ ๋ง์คํฐํ๊ธฐ
๋ณต์กํ ํ๋ ์น ๊ฐ๋ฐ์ ์ธ๊ณ์์ ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ ๋๋ค. ๊ฐ๋จํ ๋ฒํผ๊ณผ ์ ๋ ฅ ํ๋๋ถํฐ ๋ณต์กํ ๋ฐ์ดํฐ ํ ์ด๋ธ๊ณผ ์ธํฐ๋ํฐ๋ธ ๋์๋ณด๋์ ์ด๋ฅด๊ธฐ๊น์ง, ์ด๋ฌํ ์ปดํฌ๋ํธ๋ค์ ๊ณ ์ ํ ๊ธฐ๋ฅ๊ณผ ์๊ฐ์ ์คํ์ผ์ ์บก์ํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ฌ์ฌ์ฉ์ฑ, ์ผ๊ด์ฑ, ์ ์ง๋ณด์์ฑ์ ์ฆ์ง์ํต๋๋ค. ๊ทธ๋ฌ๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ์ ์ง์ ํ ํ์ ๊ฐ๋ฐ์, ๋์์ด๋, QA ์์ง๋์ด, ์ ํ ๊ด๋ฆฌ์ ๋ฑ ๋ชจ๋ ์ดํด๊ด๊ณ์๊ฐ ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ์ ์ดํดํ๊ณ , ์ฝ๊ฒ ๋ฐ๊ฒฌํ๋ฉฐ, ์ ํํ๊ฒ ๊ตฌํํ ๋ ๋น๋ก์ ๋ฐํ๋ฉ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ํฌ๊ด์ ์ธ ๋ฌธ์, ํนํ ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ๋ฅผ ์ํ API ๋ฌธ์ํ๊ฐ ํ์๋ถ๊ฐ๊ฒฐํฉ๋๋ค.
ํ์๋ค์ด ๊ฐ๊ธฐ ๋ค๋ฅธ ์๊ฐ๋, ๋ฌธํ, ์ปค๋ฎค๋์ผ์ด์ ์คํ์ผ์ ํฉ์ด์ ธ ์์ ์ ์๋ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์๊ฒ ๋งค์ฐ ๋ช ํํ ๋ฌธ์๋ ๋จ์ํ ํธ์๊ฐ ์๋๋๋ค. ์ด๋ ํจ์จ์ฑ, ์กฐ์จ, ๊ทธ๋ฆฌ๊ณ ์ฑ๊ณต์ ์ธ ํ์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํต์ฌ์ ์ธ ์์์ ๋๋ค. ์ด ๊ด๋ฒ์ํ ๊ฐ์ด๋์์๋ ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ๋ฅผ ์ํ API ๋ฌธ์ํ์ ์ฌ์คํ ์ค์์ฑ์ ํ๊ตฌํ๊ณ , ์ปดํฌ๋ํธ์ "API"๋ฅผ ๊ตฌ์ฑํ๋ ์์๊ฐ ๋ฌด์์ธ์ง ๊น์ด ํ๊ณ ๋ค๋ฉฐ, ์๋ ๋ฌธ์ํ ๋ฐฉ์๊ณผ ์๋ํ๋ ๋ฌธ์ํ ๋ฐฉ์์ ๋น๊ตํ๊ณ , API ๋ฌธ์ ์์ฑ์ ์ํ ์ฃผ์ ๋๊ตฌ์ ๋ฐฉ๋ฒ๋ก ์ ์์ธํ ์ค๋ช ํ๋ฉฐ, ์ง์ ์ผ๋ก ๊ธ๋ก๋ฒ ํ์ ์ญ๋์ ๊ฐํํ๋ ๋ฌธ์๋ฅผ ๋ง๋๋ ์ต์์ ๋ฐฉ๋ฒ์ ๊ฐ๋ตํ ์ค๋ช ํฉ๋๋ค.
ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ API ๋ฌธ์ํ์ ํ์์ ์ธ ๊ฐ์น
์๋ก์ด ๊ฐ๋ฐ์๊ฐ ๊ธ๋ก๋ฒ ๋ถ์ฐํ์ ํฉ๋ฅํ๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ณด์ญ์์ค. ๋ช ํํ ๋ฌธ์๊ฐ ์๋ค๋ฉด, ๊ทธ๋ค์ ์์ค ์ฝ๋๋ฅผ ๋ค์ง๊ณ , ์ง๋ฌธ์ ํ๋ฉฐ, ๊ธฐ์กด ์ปดํฌ๋ํธ ์ฌ์ฉ๋ฒ์ ๋ํด ์๋ชป๋ ๊ฐ์ ์ ํ ๊ฐ๋ฅ์ฑ์ผ๋ก ์๋ง์ ์๊ฐ์ ๋ณด๋ด๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด์ ๊ทธ ์๋๋ฆฌ์ค๋ฅผ ์ปดํฌ๋ํธ์ ํ๋์ ๋์์ค๋ฅผ ์ดํดํ๋ ค๋ ๋์์ด๋๋ ์ฃ์ง ์ผ์ด์ค๋ฅผ ๊ฒ์ฆํ๋ ค๋ QA ์์ง๋์ด์๊ฒ๊น์ง ํ์ฅํด ๋ณด์ญ์์ค. ์ค๋ฒํค๋๋ ์์ฒญ๋๊ฒ ์ปค์ง๋๋ค. API ๋ฌธ์๋ ๋ช ํํ๊ณ ์ ๊ทผ ๊ฐ๋ฅํ ๋จ์ผ ์ ๋ณด ์์ค(source of truth)๋ฅผ ์ ๊ณตํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ค์ ์ํํฉ๋๋ค.
- ํฅ์๋ ๊ฐ๋ฐ์ ๊ฒฝํ(DX) ๋ฐ ์์ฐ์ฑ: ๊ฐ๋ฐ์๋ค์ ์ ์ฒด ์์ค ์ฝ๋๋ฅผ ์ฝ์ ํ์ ์์ด ์ปดํฌ๋ํธ์ ์ ๋ ฅ(props), ์ถ๋ ฅ(events), ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ์๋, ๋ด๋ถ ๋ก์ง์ ์ ์ํ๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ํํ๊ณ , ์ข์ ๊ฐ์ ์ค์ด๋ฉฐ, ๊ฐ๋ฐ์๋ค์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ ํด๋ ํ๋ ๋์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌ์ถํ๋ ๋ฐ ์ง์คํ ์ ์๊ฒ ํฉ๋๋ค. ๊ธ๋ก๋ฒ ํ์ ๊ฒฝ์ฐ, ์ด๋ ์ค์๊ฐ ์ปค๋ฎค๋์ผ์ด์ ์ ๋ํ ์์กด๋๋ฅผ ์ค์ฌ ๋ค์ํ ๊ทผ๋ฌด ์๊ฐ์ ์์ฉํ ์ ์์ต๋๋ค.
- ๊ต์ฐจ ๊ธฐ๋ฅ ํ์ ์ด์ง: ๋ฌธ์๋ ๊ณตํต ์ธ์ด ์ญํ ์ ํฉ๋๋ค. ๋์์ด๋๋ ์ปดํฌ๋ํธ์ ๊ธฐ์ ์ ์ ์ฝ๊ณผ ๊ธฐ๋ฅ์ ์ดํดํ์ฌ ๋์์ธ์ ๊ตฌํ ๊ฐ๋ฅ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. QA ์์ง๋์ด๋ ๋ชจ๋ ๊ฐ๋ฅํ ์ํ์ ์ํธ์์ฉ์ ์ดํดํจ์ผ๋ก์จ ๋ ํจ๊ณผ์ ์ธ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ ํ ๊ด๋ฆฌ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ๋ํด ๋ ๋ช ํํ ๊ทธ๋ฆผ์ ์ป์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ณต์ ๋ ์ดํด๋ ์ฌ๋ฌ ๋ถ์ผ์ ์ง๋ฆฌ์ ์์น์ ๊ฑธ์ณ ์ผ๊ด๋ ํ๋ก์ ํธ ์ ๋ฌ์ ํ์์ ์ ๋๋ค.
- ์ผ๊ด์ฑ ๋ฐ ์ฌ์ฌ์ฉ์ฑ ๋ณด์ฅ: ์ปดํฌ๋ํธ API๊ฐ ์ ๋ฌธ์ํ๋๋ฉด, ๊ฐ๋ฐ์๋ค์ ์ค๋ณต๋๊ฑฐ๋ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฒ์ ์ ๋ง๋๋ ๋์ ๊ธฐ์กด ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ํต์ผ์ฑ์ ์ฆ์งํ๊ณ , ๋์์ธ ์์คํ ๊ฐ์ด๋๋ผ์ธ์ ์ค์ํ๋ฉฐ, ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ค์ ๋๋ค. ๋ง์ ํ์ด ์ฌ์ฉํ๋ ๋๊ท๋ชจ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ์กฐ์ง์๊ฒ ์ผ๊ด์ฑ์ ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
- ๊ฐ์ํ๋ ์จ๋ณด๋ฉ: ์๋ก์ด ํ์์ ์์น๋ ํน์ ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์ด์ ๊ฒฝํ๊ณผ ๊ด๊ณ์์ด ํจ์ฌ ๋น ๋ฅด๊ฒ ์์ฐ์ฑ์ ๋ฐํํ ์ ์์ต๋๋ค. ๋ฌธ์๋ ํฌ๊ด์ ์ธ ๊ต์ก ๋งค๋ด์ผ ์ญํ ์ ํ์ฌ, ๊ทธ๋ค์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌ์กฐ์ ์ฌ์ฉ ํจํด์ ํ์ ํ ์ ์๊ฒ ํฉ๋๋ค.
- ๋จ์ํ๋ ์ ์ง๋ณด์ ๋ฐ ๋๋ฒ๊น : ๋ช ํํ API ๋ฌธ์๋ ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ, ์ฝ๋ ๋ฆฌํฉํ ๋ง, ์ด์ ๋๋ฒ๊น ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค. ์ปดํฌ๋ํธ์ ์๋๋ ๋์๊ณผ ์ธํฐํ์ด์ค๊ฐ ๋ช ํํ๊ฒ ์ ์๋๋ฉด, ์ค๋ฅ์ ์์ธ์ ์๋ณํ๊ฑฐ๋ ๋ณ๊ฒฝ์ ์ํฅ์ ์ดํดํ๋ ๊ฒ์ด ํจ์ฌ ์ฌ์์ง๋๋ค.
- ๋์์ธ-๊ฐ๋ฐ ๊ฒฉ์ฐจ ํด์: ๊ฒฌ๊ณ ํ ์ปดํฌ๋ํธ API ๋ฌธ์๋ ๋์์ธ ์ฐ์ถ๋ฌผ๊ณผ ๊ตฌํ๋ ์ฝ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ด์์๋ ๋ช ์ธ์ ์ญํ ์ ํจ๊ณผ์ ์ผ๋ก ์ํํฉ๋๋ค. ์ด๋ ๋์์ธ ๋น์ ์ด ๊ธฐ๋ฅ์ ์ปดํฌ๋ํธ๋ก ์ ํํ๊ฒ ๋ณํ๋๋๋ก ๋ณด์ฅํ์ฌ ๋ถ์ผ์น์ ์ฌ์์ ์ ์ต์ํํฉ๋๋ค.
ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ์ "API" ์ ์ํ๊ธฐ
์๋ํฌ์ธํธ์ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ ํต์ ์ธ ๋ฐฑ์๋ REST API์ ๋ฌ๋ฆฌ, ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ์ "API"๋ ์ธ๋ถ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ด๋ป๊ฒ ์ํธ์์ฉํ๊ณ , ๊ตฌ์ฑํ๋ฉฐ, ํ์ฅํ ์ ์๋์ง๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ฌํ ์ธก๋ฉด๋ค์ ์ดํดํ๋ ๊ฒ์ ํจ๊ณผ์ ์ธ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- Props (์์ฑ): ์ด๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ์ ๊ตฌ์ฑ์ ์ ๋ฌํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค. props์ ๋ํ ๋ฌธ์์๋ ๋ค์์ด ์์ธํ ๊ธฐ์ ๋์ด์ผ ํฉ๋๋ค:
- ์ด๋ฆ: prop์ ์๋ณ์์ ๋๋ค.
- ํ์ : ์์๋๋ ๋ฐ์ดํฐ ํ์ (์: string, number, boolean, array, object, function, ํน์ TypeScript ์ธํฐํ์ด์ค).
- ํ์/์ ํ: prop์ด ๋ฐ๋์ ์ ๊ณต๋์ด์ผ ํ๋์ง ์ฌ๋ถ์ ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ: ์ ํ ์ฌํญ์ธ ๊ฒฝ์ฐ, ์ ๊ณต๋์ง ์์์ ๋ ๊ฐ์ ํ๋ ๊ฐ์ ๋๋ค.
- ์ค๋ช : ๊ทธ ๋ชฉ์ ๊ณผ ์ปดํฌ๋ํธ์ ๋์์ด๋ ์ธ๊ด์ ๋ฏธ์น๋ ์ํฅ์ ๋ํ ๋ช ํํ ์ค๋ช ์ ๋๋ค.
- ํ์ฉ๋๋ ๊ฐ (ํด๋นํ๋ ๊ฒฝ์ฐ): ์ด๊ฑฐํ ํ์ ์ ๊ฒฝ์ฐ (์: "primary", "secondary", "ghost"๋ฅผ ํ์ฉํ๋ 'variant' prop).
- Events (์ปค์คํ
์ด๋ฒคํธ/์ฝ๋ฐฑ): ์ปดํฌ๋ํธ๋ ์ข
์ข
์ด๋ค ์ผ์ด ๋ฐ์ํ์ ๋(์: ๋ฒํผ ํด๋ฆญ, ์
๋ ฅ ๋ณ๊ฒฝ, ๋ฐ์ดํฐ ๋ก๋) ๋ถ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ๋ค์ ํต์ ํด์ผ ํฉ๋๋ค. ์ด๋ฒคํธ์ ๋ํ ๋ฌธ์์๋ ๋ค์์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค:
- ์ด๋ฆ: ์ด๋ฒคํธ์ ์๋ณ์ (์: `onClick`, `onSelect`, `@input`).
- ํ์ด๋ก๋/์ธ์: ์ด๋ฒคํธ์ ํจ๊ป ์ ๋ฌ๋๋ ๋ชจ๋ ๋ฐ์ดํฐ (์: `(event: MouseEvent)`, `(value: string)`).
- ์ค๋ช : ์ด๋ค ํ๋์ด๋ ์ํ ๋ณํ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋์ง์ ๋ํ ์ค๋ช ์ ๋๋ค.
- Slots / Children: ๋ง์ ์ปดํฌ๋ํธ ํ๋ ์์ํฌ๋ ์ปดํฌ๋ํธ์ ํน์ ์์ญ์ ์ฝํ
์ธ ๋ฅผ ์ฃผ์
ํ๋ ๊ฒ์ ํ์ฉํฉ๋๋ค (์: `Card` ์ปดํฌ๋ํธ๋ `header` ์ฌ๋กฏ๊ณผ `footer` ์ฌ๋กฏ์ ๊ฐ์ง ์ ์์). ๋ฌธ์์๋ ๋ค์์ ์ค๋ช
ํด์ผ ํฉ๋๋ค:
- ์ด๋ฆ: ์ฌ๋กฏ์ ์๋ณ์ (์ด๋ฆ์ด ์๋ ๊ฒฝ์ฐ).
- ๋ชฉ์ : ์ด ์ฌ๋กฏ์ ์ด๋ค ์ข ๋ฅ์ ์ฝํ ์ธ ๊ฐ ์์๋๋์ง์ ๋ํ ์ค๋ช ์ ๋๋ค.
- ์ค์ฝํ/Props (ํด๋นํ๋ ๊ฒฝ์ฐ): ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ ธ์ถํ๋ ์ค์ฝํ ์ฌ๋กฏ์ ๊ฒฝ์ฐ.
- Public Methods: ์ผ๋ถ ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ๋๋ ref๋ฅผ ํตํด ๋ช
๋ น์ ์ผ๋ก ํธ์ถํ ์ ์๋ ๋ฉ์๋๋ฅผ ๋
ธ์ถํฉ๋๋ค (์: `form.submit()`, `modal.open()`). ๋ฌธ์์๋ ๋ค์์ ์์ธํ ๊ธฐ์ ํด์ผ ํฉ๋๋ค:
- ์ด๋ฆ: ๋ฉ์๋์ ์๋ณ์์ ๋๋ค.
- ๋งค๊ฐ๋ณ์: ์๋ฝํ๋ ๋ชจ๋ ์ธ์ (ํ์ ๊ณผ ์ค๋ช ํฌํจ).
- ๋ฐํ ๊ฐ: ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ฒ (ํ์ ๊ณผ ์ค๋ช ํฌํจ).
- ์ค๋ช : ๋ฉ์๋๊ฐ ์ํํ๋ ์์ ์ ๋ํ ์ค๋ช ์ ๋๋ค.
- CSS Custom Properties / ํ
๋ง ๋ณ์: CSS๋ฅผ ํตํด ๊ณ ๋๋ก ์ฌ์ฉ์ ์ ์ํ ์ ์๋๋ก ์ค๊ณ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ, ์ปค์คํ
์์ฑ ๋ชฉ๋ก(์: `--button-background-color`)์ ๋
ธ์ถํ๋ฉด ์๋น์๊ฐ ๊น์ CSS ์ง์ ์์ด๋ ๊ธฐ๋ณธ ์คํ์ผ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. ๋ฌธ์์๋ ๋ค์์ ๋์ดํด์ผ ํฉ๋๋ค:
- ๋ณ์ ์ด๋ฆ: CSS ์ปค์คํ ์์ฑ์ ๋๋ค.
- ๋ชฉ์ : ์ปดํฌ๋ํธ์ ์ด๋ค ์ธก๋ฉด์ ์ ์ดํ๋์ง์ ๋ํ ์ค๋ช ์ ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ: ๊ธฐ๋ณธ ์ค์ ์ ๋๋ค.
- ์ ๊ทผ์ฑ (A11y) ๊ณ ๋ ค์ฌํญ: ๋ฌธ์๋ ์ปดํฌ๋ํธ๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ์ค์ํ ์ ๊ทผ์ฑ ์์ฑ(์: ARIA ์ญํ , ์ํ, ์์ฑ)์ ๊ฐ์กฐํ๊ฑฐ๋, ์ปดํฌ๋ํธ ์ฌ์ฉ ์ ์ ๊ทผ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์๋น์๊ฐ ์ทจํด์ผ ํ ์กฐ์น๋ฅผ ๋ช ์ํ ์ ์์ต๋๋ค.
- ํ๋์ ์ธก๋ฉด ๋ฐ ์ฌ์ฉ ํจํด: ์ง์ ์ ์ธ API ์ธ์๋ ๋ฌธ์๋ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ์กฐ๊ฑด์์ ์ด๋ป๊ฒ ๋์ํ๋์ง, ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ํจํด, ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ ์ธ ํจ์ ์ ์ค๋ช ํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ํ ๊ด๋ฆฌ ์ํธ์์ฉ, ๋ฐ์ดํฐ ๋ก๋ฉ ํจํด ๋๋ ๋ณต์กํ ์ํธ์์ฉ์ด ํฌํจ๋ฉ๋๋ค.
์๋ ๋ฌธ์ํ vs. ์๋ ์์ฑ: ์ค์ํ ์ ํ
์ญ์ฌ์ ์ผ๋ก ๋ฌธ์ํ๋ ๋๋ถ๋ถ ์๋ ์์ ์ด์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ ๋ณ๋์ README ํ์ผ, ์ํค ํ์ด์ง ๋๋ ์ ์ฉ ๋ฌธ์ ์ฌ์ดํธ๋ฅผ ์์ฑํ์ต๋๋ค. ์ด๋ ์์ฒญ๋ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ง๋ง, ์๋นํ ๋จ์ ์ด ๋ฐ๋ฆ ๋๋ค. ๋ฐ๋ฉด, ์๋ ์์ฑ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์์ค ์ฝ๋์์ ์ง์ ๋ฌธ์๋ฅผ ์ถ์ถํ๋ฉฐ, ์ข ์ข JSDoc/TSDoc ์ฃผ์์ด๋ TypeScript ํ์ ์ ์์์ ์ถ์ถํฉ๋๋ค.
์๋ ๋ฌธ์ํ
์ฅ์ :
- ์์ ํ ์์ ์ ์ ์ด: ๊ด๋ฒ์ํ ์ฐ๋ฌธ์ ์์ฑํ๊ณ , ์์ธํ ๊ฐ๋ ์ ์ค๋ช ์ ์ ๊ณตํ๋ฉฐ, ์ปดํฌ๋ํธ์ ๋ชฉ์ ๊ณผ ์ฌ์ฉ๋ฒ์ ๋ํ ํฌ๊ด์ ์ธ ์ด์ผ๊ธฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
- ๋ฌธ๋งฅ์ ์ ์ฐ์ฑ: ์ฝ๋์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋์ง ์์ ์ ์๋ ์ธ๋ถ ๋งํฌ, ์ด๋ฏธ์ง ๋๋ ๋ค์ด์ด๊ทธ๋จ์ ์ฝ๊ฒ ํฌํจํ ์ ์์ต๋๋ค.
- ์๊ท๋ชจ ํ๋ก์ ํธ์ ๋จ์์ฑ: ๋งค์ฐ ์๊ณ ๋จ๊ธฐ์ ์ธ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, ์๋ ๋ฌธ์ํ๊ฐ ๋ ๋น ๋ฅด๊ฒ ์ค์ ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค.
๋จ์ :
- ๋์ ์ ์ง๋ณด์ ์ค๋ฒํค๋: prop์ด ๋ณ๊ฒฝ๋๊ฑฐ๋, ์ด๋ฒคํธ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋, ๋ฉ์๋๊ฐ ์์ ๋ ๋๋ง๋ค ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์ด๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
- ๊ดด๋ฆฌ ๋ฐ ๋ถ์ผ์น: ์๋ ๋ฌธ์๋ ์ฝ๋๋ฒ ์ด์ค๊ฐ ์งํํจ์ ๋ฐ๋ผ ๋น ๋ฅด๊ฒ ๊ตฌ์์ด ๋์ด, ๋ฌธ์์ ์ค์ ์ปดํฌ๋ํธ ๋์ ๊ฐ์ ๋ถ์ผ์น๋ฅผ ์ด๋ํฉ๋๋ค. ์ด๋ ํนํ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
- ๋จ์ผ ์ ๋ณด ์์ค์ ๋ถ์ฌ: ๋ฌธ์๋ ์ฝ๋์ ๋ณ๊ฐ๋ก ์กด์ฌํ์ฌ ์ ํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ํ์ฅ์ฑ ๋ฌธ์ : ์ปดํฌ๋ํธ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ ๋ฌธ์ํ๋ ์ง์ ๋ถ๊ฐ๋ฅํ ๋ถ๋ด์ด ๋ฉ๋๋ค.
์๋ํ๋ API ๋ฌธ์ ์์ฑ
์ฅ์ :
- ์ ํ์ฑ ๋ฐ ์ต์ ์ฑ: ์์ค ์ฝ๋(์ฃผ์, ํ์ ์ ์)์์ ์ง์ ์ ๋ณด๋ฅผ ์ถ์ถํจ์ผ๋ก์จ, ๋ฌธ์๋ ํญ์ ์ต์ ์ปดํฌ๋ํธ API์ ์ผ์นํฉ๋๋ค. ์ฝ๋๊ฐ ๋จ์ผ ์ ๋ณด ์์ค๊ฐ ๋ฉ๋๋ค.
- ํจ์จ์ฑ: ์ผ๋จ ์ค์ ๋๋ฉด, ๋ฌธ์๋ ์ต์ํ์ ์ธ๊ฐ ๊ฐ์ ์ผ๋ก ์์ฑ ๋ฐ ์ ๋ฐ์ดํธ๋ ์ ์์ด ์๋นํ ๊ฐ๋ฐ ์๊ฐ์ ์ ์ฝํฉ๋๋ค.
- ์ผ๊ด์ฑ: ์๋ํ๋ ๋๊ตฌ๋ ๋ชจ๋ ์ปดํฌ๋ํธ API์ ๋ํด ํ์คํ๋ ๊ตฌ์กฐ์ ํ์์ ๊ฐ์ ํ์ฌ ๋ฌธ์ ์ฌ์ดํธ ์ ๋ฐ์ ๊ฐ๋ ์ฑ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ ํฅ์์ํต๋๋ค.
- ๊ฐ๋ฐ์ ์ค์ฌ ์ํฌํ๋ก์ฐ: ๊ฐ๋ฐ์๋ค์ ๋ฌธ์ ์ฃผ์์ ์ฝ๋ ๋ด์ ์ง์ ์์ฑํ์ฌ, ๋ฌธ์ํ๋ฅผ ๋์ค์ ์์ ์ผ๋ก ์ทจ๊ธํ๋ ๋์ ์ฝ๋ฉ ํ๋ก์ธ์ค์ ํตํฉํฉ๋๋ค.
- ํ์ฅ์ฑ: ์ ์ง๋ณด์ ๋ ธ๋ ฅ์ ๋น๋ก์ ์ธ ์ฆ๊ฐ ์์ด ๋๊ท๋ชจ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ง์ ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
- ์จ๋ณด๋ฉ ์๊ฐ ๋จ์ถ: ์๋ก์ด ๊ฐ๋ฐ์๋ค์ ๋ณต์กํ ์์ค ์ฝ๋๋ฅผ ๋ถ์ํ๊ฑฐ๋ ์ ์ ๋๋ฃ์ ์ค๋ช ์ ๊ธฐ๋ค๋ฆด ํ์ ์์ด ์ ํํ API ์ ์์ ์ฆ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๋จ์ :
- ์ด๊ธฐ ์ค์ ์ ๋ณต์ก์ฑ: ๋ฌธ์ ์์ฑ ๋๊ตฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ, ํนํ ์ฌ์ฉ์ ์ ์ ์๊ตฌ์ฌํญ์ด๋ ๋ ์ผ๋ฐ์ ์ธ ์ค์ ์ ๊ฒฝ์ฐ, ์ด๊ธฐ ์๊ฐ๊ณผ ์ ๋ฌธ ์ง์ ํฌ์๊ฐ ํ์ํ ์ ์์ต๋๋ค.
- ํ์ต ๊ณก์ : ๊ฐ๋ฐ์๋ค์ ํน์ ์ฃผ์ ๊ท์น(์: JSDoc, TSDoc)๊ณผ ๋๊ตฌ ๊ตฌ์ฑ์ ๋ฐฐ์์ผ ํฉ๋๋ค.
- ์์ ์ ์ ์ฐ์ฑ ๊ฐ์: ์๋ํ๋ ๋๊ตฌ๋ API ์ธ๋ถ ์ ๋ณด์ ๋ฐ์ด๋์ง๋ง, ๊ธธ๊ณ ์ฐ๋ฌธ ๊ธฐ๋ฐ์ ๊ฐ๋ ์ ์ค๋ช ์๋ ๋ ์ ํฉํฉ๋๋ค. ์ด๋ ์ข ์ข ์๋ํ๋ API ํ ์ด๋ธ๊ณผ ์๋์ผ๋ก ์์ฑ๋ ๋งํฌ๋ค์ด์ ๊ฒฐํฉํ์ฌ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ๋ง๋ค์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
ํนํ ํ์ ์ด ๋ง๊ณ ๊ธ๋ก๋ฒํ ํ์ ๊ฒฝ์ฐ, ๊ทธ ์ด์ ์ ๊ณ ๋ คํ ๋ ์๋ํ๋ API ๋ฌธ์ ์์ฑ์ ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ์ ๋ํ ์ฐ์ํ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ด๋ "์ฝ๋๋ก์์ ๋ฌธ์(documentation-as-code)" ์ฒ ํ์ ์ฅ๋ คํ์ฌ ์ ํ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋ณด์ฅํฉ๋๋ค.
API ๋ฌธ์ ์์ฑ์ ์ํ ๋ฐฉ๋ฒ ๋ฐ ๋๊ตฌ
ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ API ๋ฌธ์ ์์ฑ์ ์ํ ๋๊ตฌ ํ๊ฒฝ์ ํ๋ถํ๊ณ ๋ค์ํ๋ฉฐ, ์ข ์ข ํน์ JavaScript ํ๋ ์์ํฌ, ๋น๋ ๋๊ตฌ, ์ ํธํ๋ ์ฃผ์ ์คํ์ผ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ฃผ์ ๋๊ตฌ์ ๋ํ ๋ถ์์ ๋๋ค.
1. JSDoc/TSDoc ๋ฐ ํ์ ๊ธฐ๋ฐ ์ถ์ถ
์ด๊ฒ์ ๋ง์ ๋ฌธ์ ์์ฑ ํ์ดํ๋ผ์ธ์ ์ด์์ ๋๋ค. JSDoc(JavaScript์ฉ)๊ณผ TSDoc(TypeScript์ฉ)์ ์ฝ๋์ ๊ตฌ์กฐํ๋ ์ฃผ์์ ์ถ๊ฐํ๊ธฐ ์ํ ๋๋ฆฌ ์ฑํ๋ ํ์ค์ ๋๋ค. ์ด ์ฃผ์์๋ ํจ์, ํด๋์ค, ์์ฑ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด๋ฅผ ์ ๋ฌธ ๋๊ตฌ๋ก ํ์ฑํ ์ ์์ต๋๋ค.
JSDoc / TSDoc ์์น:
์ฃผ์์ ์ค๋ช ํ๋ ์ฝ๋ ๊ตฌ์กฐ ๋ฐ๋ก ์์ ์์นํฉ๋๋ค. ํน์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋งค๊ฐ๋ณ์, ๋ฐํ ๊ฐ, ์์ ๋ฑ์ ๋ํ๋ ๋๋ค.
@param {type} name - ๋งค๊ฐ๋ณ์์ ๋ํ ์ค๋ช ์ ๋๋ค.@returns {type} - ๋ฐํ ๊ฐ์ ๋ํ ์ค๋ช ์ ๋๋ค.@example - ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์ฝ๋ ์ค๋ํซ์ ๋๋ค.@typedef {object} MyType - ์ฌ์ฉ์ ์ ์ ํ์ ์ ์ ์์ ๋๋ค.@fires {event-name} - ์ปดํฌ๋ํธ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ์ค๋ช ํฉ๋๋ค.@see {another-component} - ๊ด๋ จ๋ ๋ฌธ์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.@deprecated - ์ปดํฌ๋ํธ๋ prop์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์์์ ํ์ํฉ๋๋ค.
JSDoc/TSDoc์ ํ์ฉํ๋ ๋๊ตฌ:
- TypeDoc: ํนํ TypeScript๋ฅผ ์ํ ๋๊ตฌ๋ก, TypeDoc์ TSDoc ์ฃผ์์ ํฌํจํ TypeScript ์์ค ์ฝ๋๋ก๋ถํฐ API ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค. TypeScript ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ฅผ ํ์ฑํ์ฌ ํ์ , ์ธํฐํ์ด์ค, ํด๋์ค, ํจ์๋ฅผ ์ดํดํ ๋ค์, ์ด๋ฅผ ํ์ ๊ฐ๋ฅํ HTML ์ฌ์ดํธ๋ก ํ์ํํฉ๋๋ค. ๋๊ท๋ชจ TypeScript ํ๋ก์ ํธ์ ํ์ํ๋ฉฐ ๊ด๋ฒ์ํ ๊ตฌ์ฑ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
- JSDoc (๊ณต์ ๋๊ตฌ): ์ ํต์ ์ธ JSDoc ํ์๋ JSDoc ์ฃผ์์ด ๋ฌ๋ฆฐ JavaScript ์ฝ๋๋ก๋ถํฐ HTML ๋ฌธ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ธฐ๋ฅ์ ์ด๊ธฐ๋ ํ์ง๋ง, ์ฌ์ฉ์ ์ ์ ํ ํ๋ฆฟ ์์ด๋ ์ถ๋ ฅ์ด ๋ค์ ๊ธฐ๋ณธ์ ์ผ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ ํ์ (์: Babel/TypeScript Compiler API ๊ธฐ๋ฐ AST): ๊ณ ๋๋ก ๋ง์ถคํ๋ ์๊ตฌ์ฌํญ์ ์ํด, ๊ฐ๋ฐ์๋ค์ Babel์ AST ์ํ๋ TypeScript์ Compiler API๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์ฃผ์์์ ์ ๋ณด๋ฅผ ์ถ์ถํ ๋ค์, ์ด๋ฅผ ์ํ๋ ๋ฌธ์ ํ์(์: JSON, Markdown)์ผ๋ก ๋ณํํ๋ ์์ฒด ํ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
2. ํ๋ ์์ํฌ๋ณ ๋ฌธ์ ์์ฑ๊ธฐ
์ผ๋ถ ํ๋ ์์ํฌ์๋ ์์ฒด ์ ์ฉ ๋๊ตฌ๋ ์ปดํฌ๋ํธ ๋ฌธ์ํ๋ฅผ ์ํ ์ ํ๋ฆฝ๋ ํจํด์ด ์์ต๋๋ค.
- React:
react-docgen: React ์ปดํฌ๋ํธ ํ์ผ์ ํ์ฑํ์ฌ props, default props, JSDoc ์ฃผ์์ ๋ํ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Storybook๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋๊ตฌ์์ ๋ด๋ถ์ ์ผ๋ก ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ์ปดํฌ๋ํธ์ ์์ค ์ฝ๋๋ฅผ ์ง์ ๋ถ์ํ์ฌ ์๋ํฉ๋๋ค.react-styleguidist: ์ด์์๋ ์คํ์ผ ๊ฐ์ด๋๋ฅผ ๊ฐ์ถ ์ปดํฌ๋ํธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋๋ค. React ์ปดํฌ๋ํธ(์ข ์ขreact-docgen์ฌ์ฉ)๋ฅผ ํ์ฑํ๊ณ ์ฝ๋ ๋ฐ Markdown ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ ์์ ์ prop ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ๋ฌธ์์ ํจ๊ป ์ปดํฌ๋ํธ ์์ ๋ฅผ ์์ฑํ๋๋ก ์ฅ๋ คํฉ๋๋ค.docz: React ์ปดํฌ๋ํธ์ ์ํํ๊ฒ ํตํฉ๋๋ MDX ๊ธฐ๋ฐ ๋ฌธ์ ์ฌ์ดํธ ์์ฑ๊ธฐ์ ๋๋ค. MDX(Markdown + JSX)๋ก ๋ฌธ์๋ฅผ ์์ฑํ๋ฉด ์ปดํฌ๋ํธ ํ์ผ์์ prop ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ๋ฌธ์์ ๋ํ ๋ผ์ด๋ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
- Vue:
vue-docgen-api:react-docgen๊ณผ ์ ์ฌํ๊ฒ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ props, events, slots, methods๋ฅผ ํฌํจํ์ฌ Vue ๋จ์ผ ํ์ผ ์ปดํฌ๋ํธ(SFC)์์ API ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค. SFC ๋ด์์ JavaScript์ TypeScript๋ฅผ ๋ชจ๋ ์ง์ํ๋ฉฐ Storybook์ Vue ํตํฉ์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.- VuePress / VitePress (ํ๋ฌ๊ทธ์ธ ํฌํจ): ์ฃผ๋ก ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ์ด์ง๋ง, VuePress์ VitePress๋
vue-docgen-api๋ฅผ ํ์ฉํ์ฌ Markdown ํ์ผ ๋ด์ ์ปดํฌ๋ํธ API ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ๋ ํ๋ฌ๊ทธ์ธ(์:vuepress-plugin-docgen)์ผ๋ก ํ์ฅ๋ ์ ์์ต๋๋ค.
- Angular:
Compodoc: Angular ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํฌ๊ด์ ์ธ ๋ฌธ์ํ ๋๊ตฌ์ ๋๋ค. TypeScript ์ฝ๋(์ปดํฌ๋ํธ, ๋ชจ๋, ์๋น์ค ๋ฑ)์ JSDoc ์ฃผ์์ ๋ถ์ํ์ฌ ์๋ฆ๋ต๊ณ ๊ฒ์ ๊ฐ๋ฅํ HTML ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค. ๋ชจ๋๊ณผ ์ปดํฌ๋ํธ์ ๋ํ ๋ค์ด์ด๊ทธ๋จ์ ์๋์ผ๋ก ์์ฑํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ์ ์ฒด์ ์ธ ๋ทฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
3. Storybook๊ณผ Docs ์ ๋์จ
Storybook์ UI ์ปดํฌ๋ํธ๋ฅผ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ๊ฐ๋ฐ, ๋ฌธ์ํ, ํ ์คํธํ๋ ์ ๋์ ์ธ ๋๊ตฌ๋ก ๋๋ฆฌ ์๋ ค์ ธ ์์ต๋๋ค. ๊ฐ๋ ฅํ "Docs" ์ ๋์จ์ ์ด๋ฅผ ์์ ํ ๋ฌธ์ํ ํ๋ซํผ์ผ๋ก ๋ณํ์์ผฐ์ต๋๋ค.
- ์๋ ๋ฐฉ์: Storybook์ Docs ์ ๋์จ์ ํ๋ ์์ํฌ๋ณ docgen ๋ผ์ด๋ธ๋ฌ๋ฆฌ(
react-docgen,vue-docgen-api๋ฑ)์ ํตํฉํ์ฌ ์ปดํฌ๋ํธ์ API ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ์ปดํฌ๋ํธ์ ์ ์์ ๊ด๋ จ๋ JSDoc/TSDoc ์ฃผ์์ ํ์ฑํ์ฌ props, events, slots๋ฅผ ๋ํํ ํ ์ด๋ธ ํ์์ผ๋ก ํ์ํฉ๋๋ค. - ์ฃผ์ ๊ธฐ๋ฅ:
- ArgsTable: ์ปดํฌ๋ํธ props, ํ์ , ๊ธฐ๋ณธ๊ฐ, ์ค๋ช ์ ํ์ํ๋ ์๋ ์์ฑ ํ ์ด๋ธ์ ๋๋ค.
- ๋ผ์ด๋ธ ์ฝ๋ ์์ : ์คํ ๋ฆฌ ์์ฒด๊ฐ ์ปดํฌ๋ํธ ์ฌ์ฉ๋ฒ์ ์ด์์๋ ๋ํํ ์์ ์ญํ ์ ํฉ๋๋ค.
- MDX ์ง์: Markdown ํ์ผ ๋ด์ ์ปดํฌ๋ํธ์ ์คํ ๋ฆฌ๋ฅผ ์ง์ ํฌํจํ ์ ์๊ฒ ํ์ฌ, ํ๋ถํ ์์ ๊ณผ ๋ผ์ด๋ธ ์์ , ์๋ ์์ฑ๋ API ํ ์ด๋ธ์ ๊ฒฐํฉํฉ๋๋ค. ์ด๋ ๊ฐ๋ ์ ๋ฌธ์์ ๊ธฐ์ ์ ์ธ๋ถ์ฌํญ์ ๊ฒฐํฉํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- ์ ๊ทผ์ฑ ๊ฒ์ฌ: Axe์ ๊ฐ์ ๋๊ตฌ์ ํตํฉํ์ฌ ๋ฌธ์ ๋ด์์ ์ง์ ์ ๊ทผ์ฑ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
- ์ฅ์ : Storybook์ ์ปดํฌ๋ํธ ๊ฐ๋ฐ, ํ ์คํธ, ๋ฌธ์ํ๋ฅผ ์ํ ๋จ์ผ ํ๊ฒฝ์ ์ ๊ณตํ์ฌ, ๋ฌธ์๊ฐ ํญ์ ์ด์์๊ณ ์๋ํ๋ ์์ ์ ์ฐ๊ฒฐ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ ์ธ๊ณ์ ์ผ๋ก ์ฑํ๋์ด ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฐพ๋ ๊ตญ์ ํ์๊ฒ ๊ฐ๋ ฅํ ๊ฒฝ์์๊ฐ ๋ฉ๋๋ค.
4. ๋ฒ์ฉ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ (MDX ํฌํจ)
Docusaurus, Gatsby(MDX ํ๋ฌ๊ทธ์ธ ํฌํจ), Next.js์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ ฅํ ๋ฌธ์ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ด๋ค์ ๋ณธ์ง์ ์ผ๋ก API ๋ฌธ์๋ฅผ ์์ฑํ์ง๋ ์์ง๋ง, ์๋ ์์ฑ๋ ์ฝํ ์ธ ๋ฅผ ํฌํจํ ์ ์๋ ์ธํ๋ผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- MDX (Markdown + JSX): ์ด ํ์์ JSX ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ ์ ์๋ Markdown ํ์ผ์ ์์ฑํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ๊ฐ๋
์ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์์ฑํ ๋ค์, ๋์ผํ ํ์ผ ๋ด์์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ค๊ณ docgen ๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก API ํ
์ด๋ธ์ ์์ฑํ๋ ์ฌ์ฉ์ ์ ์ JSX ์ปดํฌ๋ํธ(์:
<PropTable component={MyComponent} />)๋ฅผ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค. - ์ํฌํ๋ก์ฐ: ์ข
์ข
docgen ๋๊ตฌ(
react-docgen๋๋TypeDoc๋ฑ)๊ฐ API ๋ฐ์ดํฐ๋ฅผ JSON ํ์ผ๋ก ์ถ์ถํ ๋ค์, MDX ์ปดํฌ๋ํธ๊ฐ ์ด JSON ํ์ผ์ ์ฝ์ด API ํ ์ด๋ธ์ ๋ ๋๋งํ๋ ์ฌ์ฉ์ ์ ์ ๋น๋ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค. - ์ฅ์ : ์ฌ์ดํธ ๊ตฌ์กฐ์ ์คํ์ผ์ ๋ํ ๊ถ๊ทน์ ์ธ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ฌ, ๊ณ ๋๋ก ๋ง์ถคํ๋ ๋ฌธ์ ํฌํธ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ปดํฌ๋ํธ API ๋ฌธ์์ ํฌํจํด์ผ ํ ์ฃผ์ ์ ๋ณด
์ฌ์ฉ๋ ๋๊ตฌ์ ๊ด๊ณ์์ด, ๋ชฉํ๋ ํฌ๊ด์ ์ด๊ณ ์ฝ๊ฒ ์ํํ ์ ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ๋ค์์ ๋ชจ๋ ์ปดํฌ๋ํธ์ API ๋ฌธ์์ ํฌํจ๋์ด์ผ ํ ๊ตฌ์กฐํ๋ ๋ชฉ๋ก์ ๋๋ค.
- ์ปดํฌ๋ํธ ์ด๋ฆ ๋ฐ ์ค๋ช
:
- ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ ๋ชฉ.
- ์ปดํฌ๋ํธ์ ๋ชฉ์ , ์ฃผ์ ๊ธฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ ํด๊ฒฐํ๋ ๋ฌธ์ ์ ๋ํ ๊ฐ๋ตํ ๊ฐ์.
- ๋์์ธ ์์คํ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ ๋ด์์์ ๋งฅ๋ฝ.
- ์ฌ์ฉ ์์ (์ฝ๋ ์ค๋ํซ):
- ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ: ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ณ ์ฌ์ฉํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ.
- ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค: ๋ค๋ฅธ props ๋ฐ ๊ตฌ์ฑ์ผ๋ก ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ .
- ๊ณ ๊ธ ์๋๋ฆฌ์ค/์ฃ์ง ์ผ์ด์ค: ์ค๋ฅ ์ํ, ๋ก๋ฉ ์ํ ๋๋ ํน์ ์ํธ์์ฉ ํจํด๊ณผ ๊ฐ์ด ๋ ์ผ๋ฐ์ ์ด์ง๋ง ์ค์ํ ์ํฉ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ.
- ๋ํํ ์์ : ๊ฐ๋ฅํ๋ค๋ฉด, ์ฌ์ฉ์๊ฐ props๋ฅผ ์กฐ์ํ๊ณ ์ฆ๊ฐ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ ๋ผ์ด๋ธ, ํธ์ง ๊ฐ๋ฅํ ์ฝ๋ ํ๋ ์ด๊ทธ๋ผ์ด๋ (์: Storybook).
- Props ํ
์ด๋ธ:
- ๋ชจ๋ prop์ ๋์ดํ๋ ํ ํ์.
- ์ด๋ฆ: prop์ ์๋ณ์.
- ํ์
: ๋ฐ์ดํฐ ํ์
(์:
string,number,boolean,'small' | 'medium' | 'large',UserType,(event: MouseEvent) => void). - ํ์: ๋ช ํํ ํ์ (์: `true`/`false`, ์ฒดํฌ๋งํฌ).
- ๊ธฐ๋ณธ๊ฐ: prop์ด ์ ๊ณต๋์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ ๊ฐ.
- ์ค๋ช : prop์ด ํ๋ ์ผ, ์ปดํฌ๋ํธ์ ๋ฏธ์น๋ ์ํฅ, ๊ทธ๋ฆฌ๊ณ ์ ์ฝ ์กฐ๊ฑด์ด๋ ์ข ์์ฑ์ ๋ํ ์์ธํ ์ค๋ช .
- ๋ชจ๋ prop์ ๋์ดํ๋ ํ ํ์.
- Events ํ
์ด๋ธ:
- ์ปดํฌ๋ํธ๊ฐ ๋ด๋ณด๋ด๋ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ๋์ดํ๋ ํ ํ์.
- ์ด๋ฆ: ์ด๋ฒคํธ์ ์ด๋ฆ (์:
onClick,onInput,change). - ํ์ด๋ก๋ ํ์
: ์ด๋ฒคํธ์ ํจ๊ป ์ ๋ฌ๋๋ ๋ฐ์ดํฐ์ ํ์
(์:
string,number,MouseEvent,{ id: string, value: string }). - ์ค๋ช : ์ด๋ค ํ๋์ด๋ ์ํ ๋ณํ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋์ง์ ๋ํ ์ค๋ช .
- ์ด๋ฆ: ์ด๋ฒคํธ์ ์ด๋ฆ (์:
- ์ปดํฌ๋ํธ๊ฐ ๋ด๋ณด๋ด๋ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ๋์ดํ๋ ํ ํ์.
- Slots / Children ์ค๋ช
:
- ์ฌ๋กฏ์ด๋ children prop์ ํตํด ๋์ ์ฝํ
์ธ ๋ฅผ ๋ฐ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ:
- ์ฌ๋กฏ ์ด๋ฆ (์ด๋ฆ์ด ์๋ ๊ฒฝ์ฐ): ํน์ ์ฌ๋กฏ์ ์๋ณํฉ๋๋ค.
- ์์ ์ฝํ
์ธ : ๋ด๋ถ์ ์ด๋ค ์ข
๋ฅ์ ์ฝํ
์ธ ๋ฅผ ๋ฐฐ์นํ ์ ์๋์ง ์ค๋ช
ํฉ๋๋ค (์: "
<Button>์ปดํฌ๋ํธ๋ฅผ ์์ํฉ๋๋ค", "์ ํจํ React ๋ ธ๋/Vue ํ ํ๋ฆฟ์ ์์ํฉ๋๋ค"). - ์ค์ฝํ ์ฌ๋กฏ Props (ํด๋นํ๋ ๊ฒฝ์ฐ): ์ฌ๋กฏ์์ ์๋น์์๊ฒ ๋ค์ ์ ๋ฌ๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ดํฉ๋๋ค.
- ์ฌ๋กฏ์ด๋ children prop์ ํตํด ๋์ ์ฝํ
์ธ ๋ฅผ ๋ฐ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ:
- Public Methods ํ
์ด๋ธ:
- ๋ช
๋ น์ ์ผ๋ก ํธ์ถํ ์ ์๋ ๋ฉ์๋๋ฅผ ๋
ธ์ถํ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ:
- ์ด๋ฆ: ๋ฉ์๋์ ์๋ณ์.
- ๋งค๊ฐ๋ณ์: ํ์ ๊ณผ ์ค๋ช ์ด ํฌํจ๋ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก.
- ๋ฐํ ํ์ : ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ฐ์ ํ์ .
- ์ค๋ช : ๋ฉ์๋๊ฐ ํ๋ ์ผ.
- ๋ช
๋ น์ ์ผ๋ก ํธ์ถํ ์ ์๋ ๋ฉ์๋๋ฅผ ๋
ธ์ถํ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ:
- CSS Custom Properties / ํ
๋ง ๋ณ์:
- ์ธ๋ถ ์คํ์ผ๋ง ์ฌ์ฉ์ ์ ์๋ฅผ ์ํด ์ปดํฌ๋ํธ๊ฐ ๋
ธ์ถํ๋ CSS ๋ณ์ ๋ชฉ๋ก.
- ๋ณ์ ์ด๋ฆ: ์:
--button-bg-color. - ๋ชฉ์ : ์ด๋ค ์๊ฐ์ ์ธก๋ฉด์ ์ ์ดํ๋์ง.
- ๊ธฐ๋ณธ๊ฐ: ๊ธฐ๋ณธ ์ค์ .
- ๋ณ์ ์ด๋ฆ: ์:
- ์ธ๋ถ ์คํ์ผ๋ง ์ฌ์ฉ์ ์ ์๋ฅผ ์ํด ์ปดํฌ๋ํธ๊ฐ ๋
ธ์ถํ๋ CSS ๋ณ์ ๋ชฉ๋ก.
- ์ ๊ทผ์ฑ (A11y) ์ฐธ๊ณ :
- ์ปดํฌ๋ํธ๊ฐ ์ ๊ทผ์ฑ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด.
- ์ ๊ทผ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์๋น์๊ฐ ์ค์ํด์ผ ํ ์๊ตฌ์ฌํญ (์: "์ด ์์ด์ฝ ๋ฒํผ์
aria-label์ ์ ๊ณตํด์ผ ํฉ๋๋ค").
- ์์กด์ฑ:
- ์ด ์ปดํฌ๋ํธ๊ฐ ํฌ๊ฒ ์์กดํ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค๋ฅธ ์ฃผ์ ์ปดํฌ๋ํธ๋ฅผ ๋์ดํฉ๋๋ค.
- ๋ฒ์ ๊ธฐ๋ก / ๋ณ๊ฒฝ ๋ก๊ทธ:
- ์ค์ํ ๋ณ๊ฒฝ ์ฌํญ, ํนํ ๋ธ๋ ์ดํน ์ฒด์ธ์ง๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ๊ฐ๋ตํ ๊ธฐ๋ก์ ๋ฒ์ ๋ฒํธ์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. ์ด๋ ํฌ๊ณ ์งํํ๋ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ํ๋ ์ค๋ช
:
- ๋จ์ํ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋์ด, ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ์๋๋ฆฌ์ค์์ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ค๋ช ํฉ๋๋ค (์: "์ปดํฌ๋ํธ๋ ๋ง์ดํธ ์ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ก๋ฉ ์คํผ๋๋ฅผ ํ์ํฉ๋๋ค", "ํดํ์ ํธ๋ฒ ์ ๋ํ๋๊ณ ๋ง์ฐ์ค ์ดํ ๋๋ ๋ธ๋ฌ ์ ์ฌ๋ผ์ง๋๋ค").
ํจ๊ณผ์ ์ธ ์ปดํฌ๋ํธ API ๋ฌธ์ํ๋ฅผ ์ํ ์ต์์ ๋ฐฉ๋ฒ
๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ํฌ์ ์ ๋ฐ์ ๋ถ๊ณผํฉ๋๋ค. ๊ทธ๊ฒ์ด ํจ๊ณผ์ ์ด๊ณ , ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ๋๋ฆฌ ์ฑํ๋๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ด ๋๋จธ์ง ์ ๋ฐ์ ๋๋ค. ์ด๋ฌํ ์ต์์ ๋ฐฉ๋ฒ์ ํนํ ๊ธ๋ก๋ฒ ํ์๊ฒ ์ค์ํฉ๋๋ค.
- "์ฝ๋๋ก์์ ๋ฌธ์"(๋จ์ผ ์ ๋ณด ์์ค)๋ฅผ ์์ฉํ์ธ์:
- JSDoc/TSDoc ์ฃผ์์ ์ปดํฌ๋ํธ์ ์์ค ์ฝ๋ ๋ด์ ์ง์ ์์ฑํ์ธ์. ์ด๋ ์ฝ๋ ์์ฒด๋ฅผ ๋ฌธ์์ ์ฃผ์ ์์ค๋ก ๋ง๋ญ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ํ๋ ๋๊ตฌ๊ฐ ์ด ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค.
- ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ถ์ผ์น๋ฅผ ์ต์ํํ๊ณ ๋ฌธ์๊ฐ ์ฝ๋์ ํจ๊ป ์ ๋ฐ์ดํธ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ข ์ข ๋ฐฉ์น๋๋ ๋ณ๋์ ๋ฌธ์ํ ๋ ธ๋ ฅ์ด ํ์ ์๊ฒ ๋ฉ๋๋ค.
- ๋ช
ํ์ฑ๊ณผ ๊ฐ๊ฒฐํจ์ ์ฐ์ ์ํ์ธ์:
- ๊ฐ๋จํ๊ณ ๋ชจํธํ์ง ์์ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ธ์. ๊ฐ๋ฅํ ํ ์ ๋ฌธ ์ฉ์ด๋ ๊ณ ๋๋ก ์ ๋ฌธํ๋ ์ฉ์ด๋ฅผ ํผํ์ธ์. ๊ธฐ์ ์ฉ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ, ์ ์ํ์ธ์.
- ๊ฐ๊ฒฐํ์ง๋ง ํฌ๊ด์ ์ผ๋ก ์์ฑํ์ธ์. ์์ ์ ๋ฐ๋ก ์ ๋ฌํ๋ ๋ชจ๋ ํ์ํ ์ ๋ณด๊ฐ ํฌํจ๋๋๋ก ํ์ธ์.
- ๊ธ๋ก๋ฒ ๋ ์๋ฅผ ์ํด ๊ด์ฉ์ ํํ์ด๋ ์์ด๋ณด๋ค๋ ํ์ดํ ์์ด๋ฅผ ์ ํธํ์ธ์.
- ํ์๊ณผ ์คํ์ผ์ ์ผ๊ด์ฑ์ ์ ์งํ์ธ์:
- ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์ ๊ฑธ์ณ JSDoc/TSDoc ๊ท์น์ ํ์คํํ์ธ์. ์ด๋ฌํ ํ์ค์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ฆฐํ ๊ท์น(์: JSDoc์ฉ ESLint ํ๋ฌ๊ทธ์ธ)์ ์ฌ์ฉํ์ธ์.
- ์์ฑ๋ ๋ฌธ์๊ฐ ์ผ๊ด๋ ๋ ์ด์์๊ณผ ์๊ฐ์ ์คํ์ผ์ ๊ฐ๋๋ก ๋ณด์ฅํ์ธ์. ์ด๋ ๊ฐ๋ ์ฑ๊ณผ ๋ฐ๊ฒฌ ๊ฐ๋ฅ์ฑ์ ํฅ์์ํต๋๋ค.
- ํ๋ถํ๊ณ ๋ํํ์ธ ์์ ๋ฅผ ํฌํจํ์ธ์:
- ์ ์ ์ฝ๋ ์ค๋ํซ๋ ์ ์ฉํ์ง๋ง, ๋ํํ ๋ผ์ด๋ธ ๋ฐ๋ชจ๋ ๋งค์ฐ ๊ท์คํฉ๋๋ค. Storybook๊ณผ ๊ฐ์ ๋๊ตฌ๋ ์ด ์ ์์ ๋ฐ์ด๋๋ฉฐ, ์ฌ์ฉ์๊ฐ props๋ฅผ ์กฐ์ํ๊ณ ์ปดํฌ๋ํธ๊ฐ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ๊ฒ์ ๋ณผ ์ ์๊ฒ ํฉ๋๋ค.
- ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋ณต์กํ ๊ตฌ์ฑ์ ๋ํ ์์ ๋ฅผ ์ ๊ณตํ์ธ์. ์ปดํฌ๋ํธ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด๋ ๋์์ธ ์์คํ ๊ณผ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ์ธ์.
- ๋ฌธ์๋ฅผ ๋ฐ๊ฒฌ ๊ฐ๋ฅํ๊ณ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋์ธ์:
- ๋ฌธ์ ์ฌ์ดํธ์ ๊ฐ๋ ฅํ ๊ฒ์ ๊ธฐ๋ฅ์ด ์๋์ง ํ์ธํ์ธ์. ๊ฐ๋ฐ์๋ค์ ์ด๋ฆ์ผ๋ก ๋๋ ํน์ ๊ธฐ๋ฅ์ด๋ props๋ฅผ ๊ฒ์ํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ด์ผ ํฉ๋๋ค.
- ๋ฌธ์๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ์ฑํ์ธ์. ๊ด๋ จ ์ปดํฌ๋ํธ๋ฅผ ๊ทธ๋ฃนํํ๊ณ , ๋ช ํํ ํ์ ๊ตฌ์กฐ(์: ์ฌ์ด๋๋ฐ ๋ฉ๋ด, ๋ธ๋ ๋ํฌ๋ผ)๋ฅผ ์ฌ์ฉํ์ธ์.
- ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ํ๊ณ ์
๋ฐ์ดํธํ์ธ์:
- ๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ์ปดํฌ๋ํธ ๋ณ๊ฒฝ์ ๋ํ "์๋ฃ"์ ์ ์์ ํตํฉํ์ธ์. ์ปดํฌ๋ํธ์ API๋ฅผ ์์ ํ๋ ํ ๋ฆฌํ์คํธ๋ ํด๋น ๋ฌธ์ ์ ๋ฐ์ดํธ ์์ด๋(๋๋ ์๋ ์์ฑ์ด ์ด๋ฅผ ์ฒ๋ฆฌํ ๊ฒ์ด๋ผ๋ ํ์ธ ์์ด๋) ๋ณํฉ๋์ด์๋ ์ ๋ฉ๋๋ค.
- ๊ธฐ์กด ๋ฌธ์์ ์ง์์ ์ธ ์ ํ์ฑ๊ณผ ๊ด๋ จ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ธ ๊ฒํ ๋ฅผ ์์ฝํ์ธ์.
- ๋ฒ์ ๊ด๋ฆฌ ํตํฉ:
- ๋ฌธ์ ์์ค(์: Markdown ํ์ผ, JSDoc ์ฃผ์)๋ฅผ ์ปดํฌ๋ํธ ์ฝ๋์ ๋์ผํ ์ ์ฅ์์ ์ ์ฅํ์ธ์. ์ด๋ ๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ํจ๊ป ๋ฒ์ ๊ด๋ฆฌ๋๊ณ ํ์ค ์ฝ๋ ๊ฒํ ํ๋ก์ธ์ค๋ฅผ ํตํด ๊ฒํ ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ํด๋นํ๋ ๋ฌธ์ ๋ฒ์ ์ ๊ฒ์ํ์ธ์. ์ด๋ ์ฌ๋ฌ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ ์ ์์ ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๋ฌธ์ ์์ฒด์ ์ ๊ทผ์ฑ:
- ๋ฌธ์ ์น์ฌ์ดํธ๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํ์ธ์. ์ ์ ํ ์๋งจํฑ HTML์ ์ฌ์ฉํ๊ณ , ํค๋ณด๋ ํ์์ ์ ๊ณตํ๋ฉฐ, ์ถฉ๋ถํ ์์ ๋๋น๋ฅผ ๋ณด์ฅํ์ธ์. ์ด๋ ํฌ๊ด์ ์ธ ๊ฐ๋ฐ์ด๋ผ๋ ๋ ๋์ ๋ชฉํ์ ์ผ์นํฉ๋๋ค.
- ํ์งํ ๊ณ ๋ ค (๊ณ ๋๋ก ์ธ๊ณํ๋ ์ ํ์ ๊ฒฝ์ฐ):
- ์ง์ ์ผ๋ก ๊ธ๋ก๋ฒํ ํ์ด๋ ์ฌ๋ฌ ์ธ์ด ์ง์ญ์ ๋์์ผ๋ก ํ๋ ์ ํ์ ๊ฒฝ์ฐ, ๋ฌธ์ ํ์งํ ํ๋ก์ธ์ค๋ฅผ ๊ณ ๋ คํ์ธ์. ์ด๋ ต๊ธฐ๋ ํ์ง๋ง, ์ฌ๋ฌ ์ธ์ด๋ก ๋ฌธ์๋ฅผ ์ ๊ณตํ๋ฉด ๋ค์ํ ํ์ ์ฌ์ฉ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๋์์ธ ์์คํ
ํตํฉ ํ์ฉ:
- ๋์์ธ ์์คํ ์ด ์๋ค๋ฉด, ์ปดํฌ๋ํธ API ๋ฌธ์๋ฅผ ๊ทธ ์์ ์ง์ ํฌํจ์ํค์ธ์. ์ด๋ ๋์์ด๋์ ๊ฐ๋ฐ์๋ฅผ ์ํ ํตํฉ๋ ์์ค๋ฅผ ๋ง๋ค์ด ๋์์ธ ํ ํฐ, ์๊ฐ์ ๊ฐ์ด๋๋ผ์ธ, ์ปดํฌ๋ํธ ๊ตฌํ ๊ฐ์ ๋ ๊ฐ๋ ฅํ ์ฐ๊ฒฐ์ ์ด์งํฉ๋๋ค.
๋์ ๊ณผ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
์ด์ ์ ๋ถ๋ช ํ์ง๋ง, ๊ฒฌ๊ณ ํ ์ปดํฌ๋ํธ API ๋ฌธ์ ์์ฑ์ ๊ตฌํํ๊ณ ์ ์งํ๋ ๊ฒ์ ํน์ ๋์ ๊ณผ์ ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
- ์ด๊ธฐ ๋์ ๋ฐ ๋ฌธํ์ ๋ณํ: ์ต์ํ์ ๋ฌธ์ํ์ ์ต์ํ ๊ฐ๋ฐ์๋ค์ JSDoc/TSDoc ๊ท์น์ ์ฑํํ๊ฑฐ๋ ์๋ก์ด ๋๊ตฌ๋ฅผ ์ค์ ํ๋ ์ด๊ธฐ ๋ ธ๋ ฅ์ ์ ํญํ ์ ์์ต๋๋ค. ๋ฆฌ๋์ญ๊ณผ ์ฅ๊ธฐ์ ์ธ ์ด์ ์ ๋ํ ๋ช ํํ ์์ฌ์ํต์ด ์ค์ํฉ๋๋ค.
- ํ์ ๊ณผ ์ ๋ค๋ฆญ์ ๋ณต์ก์ฑ: ๋ณต์กํ TypeScript ํ์ , ์ ๋ค๋ฆญ ๋๋ ๋ณต์กํ ๊ฐ์ฒด ํํ๋ฅผ ๋ฌธ์ํํ๋ ๊ฒ์ ์๋ํ๋ ๋๊ตฌ๊ฐ ์ฌ์ฉ์ ์นํ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ ๋๋งํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋๋ก๋ ๋ณด์ถฉ์ ์ธ ์๋ ์ค๋ช ์ด ์ฌ์ ํ ํ์ํฉ๋๋ค.
- ๋์ Props ๋ฐ ์กฐ๊ฑด๋ถ ๋์: ๊ณ ๋๋ก ๋์ ์ธ props๋ ์ฌ๋ฌ prop ์กฐํฉ์ ๊ธฐ๋ฐํ ๋ณต์กํ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ๊ฐ์ง ์ปดํฌ๋ํธ๋ ๊ฐ๋จํ API ํ ์ด๋ธ์ ์์ ํ ๋ด๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์์ธํ ํ๋ ์ค๋ช ๊ณผ ์๋ง์ ์์ ๊ฐ ์ฌ๊ธฐ์ ์ค์ํด์ง๋๋ค.
- ๋ฌธ์ ์ฌ์ดํธ์ ์ฑ๋ฅ: ๋๊ท๋ชจ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งค์ฐ ๊ด๋ฒ์ํ ๋ฌธ์ ์ฌ์ดํธ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ฌ์ดํธ๊ฐ ๋น ๋ฅด๊ณ , ๋ฐ์์ฑ์ด ์ข์ผ๋ฉฐ, ํ์ํ๊ธฐ ์ฝ๊ฒ ์ ์ง๋๋๋ก ํ๋ ค๋ฉด ์ต์ ํ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค.
- CI/CD ํ์ดํ๋ผ์ธ๊ณผ์ ํตํฉ: ์ง์์ ํตํฉ/์ง์์ ๋ฐฐํฌ(CI/CD) ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ์๋ ๋ฌธ์ ์์ฑ์ ์ค์ ํ๋ฉด, ๋ฌธ์๊ฐ ํญ์ ์ต์ ์ํ๋ก ์ ์ง๋๊ณ ๋ชจ๋ ์ฑ๊ณต์ ์ธ ๋น๋์ ํจ๊ป ๊ฒ์๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ ์คํ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
- ์์ ์ ๊ด๋ จ์ฑ ์ ์ง: ์ปดํฌ๋ํธ๊ฐ ์งํํจ์ ๋ฐ๋ผ ์์ ๋ ๊ตฌ์์ด ๋ ์ ์์ต๋๋ค. ์์ ์ ์๋ํ๋ ํ ์คํธ(๊ฐ๋ฅํ๋ค๋ฉด ์ค๋ ์ท ํ ์คํธ๋ Storybook์์์ ์ํธ์์ฉ ํ ์คํธ๋ฅผ ํตํด)๋ ์ง์์ ์ธ ์ ํ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์๋ํ์ ์์ ์ ๊ท ํ: ์๋ํ๋ ์์ฑ์ API ์ธ๋ถ ์ ๋ณด์ ๋ฐ์ด๋์ง๋ง, ๊ฐ๋ ์ ๊ฐ์, ์์ ๊ฐ์ด๋, ์ํคํ ์ฒ ๊ฒฐ์ ๋ฑ์ ์ข ์ข ์ฌ๋์ด ์์ฑํ ์ฐ๋ฌธ์ ํ์๋ก ํฉ๋๋ค. ์๋ํ๋ ํ ์ด๋ธ๊ณผ ํ๋ถํ Markdown ์ฝํ ์ธ ์ฌ์ด์ ์ฌ๋ฐ๋ฅธ ๊ท ํ์ ์ฐพ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ ๋ฌธ์ํ์ ๋ฏธ๋
ํ๋ก ํธ์๋ ๋ฌธ์ํ ๋ถ์ผ๋ ๋๊ตฌ์ ๋ฐ์ ๊ณผ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ ์ฆ๊ฐ์ ํ์ ์ด ์ง์์ ์ผ๋ก ์งํํ๊ณ ์์ต๋๋ค. ์์ผ๋ก ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๋ฐ์ ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- AI ์ง์ ๋ฌธ์ํ: ์์ฑํ AI ๋ชจ๋ธ์ JSDoc/TSDoc ์ฃผ์ ์ ์, ์ปดํฌ๋ํธ ๊ธฐ๋ฅ ์์ฝ, ๋๋ ์ฝ๋ ๋ถ์์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๊ธฐ ๋ฌธ์ ์์ ์ด์ ์์ฑ์ ์ ์ ๋ ํฐ ์ญํ ์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ด๋ จ๋ ์๋ ๋ ธ๋ ฅ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ ํ๋ถํ ์๋ฏธ๋ก ์ ์ดํด: ๋๊ตฌ๋ ์ปดํฌ๋ํธ์ ์๋์ ๋์์ ์ดํดํ๋ ๋ฐ ๋์ฑ ์ง๋ฅ์ ์ผ๋ก ๋ณํ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฉฐ, ๋จ์ํ prop ํ์ ์ ๋์ด์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ํจํด๊ณผ ์ ์ฌ์ ์ธ ์ํฐ ํจํด์ ์ถ๋ก ํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
- ๋์์ธ ๋๊ตฌ์์ ๊ธด๋ฐํ ํตํฉ: ๋์์ธ ๋๊ตฌ(Figma, Sketch ๋ฑ)์ ์ปดํฌ๋ํธ ๋ฌธ์ ๊ฐ์ ๋ค๋ฆฌ๊ฐ ๊ฐํ๋์ด, ๋์์ด๋๊ฐ ๋ผ์ด๋ธ ์ปดํฌ๋ํธ ์์ ์ API ์ ์๋ฅผ ๋์์ธ ํ๊ฒฝ์ผ๋ก ์ง์ ๊ฐ์ ธ์ค๊ฑฐ๋ ๋์์ธ ์์คํ ์ ๋ฐ์ดํธ๊ฐ ์๋ฐฉํฅ์ผ๋ก ๋ฐ์๋๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ํ๋ ์์ํฌ ๊ฐ ํ์คํ: ํ๋ ์์ํฌ๋ณ ๋๊ตฌ๋ ๊ณ์ ์กด์ฌํ๊ฒ ์ง๋ง, ๊ธฐ๋ณธ ๊ธฐ์ ์ ๊ด๊ณ์์ด ์ปดํฌ๋ํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ณด๋ค ๋ถ๊ฐ์ง๋ก ์ ์ธ ๋ฌธ์ ์์ฑ ํ์ค์ด๋ ๋ฉํ ํ๋ ์์ํฌ์ ๋ํ ์ถ์ง์ด ๋ ์ปค์ง ์ ์์ต๋๋ค.
- ๋์ฑ ์ ๊ตํด์ง ๋ผ์ด๋ธ ์์ : ์ฌ์ฉ์๊ฐ ๋ฌธ์ ๋ด์์ ์ง์ ์ ๊ทผ์ฑ, ์ฑ๋ฅ, ๋ฐ์์ฑ์ ํ ์คํธํ ์ ์๋ ๊ณ ๊ธ ๋ํํ ํ๋ ์ด๊ทธ๋ผ์ด๋๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- ๋ฌธ์์ ์๊ฐ์ ํ๊ท ํ ์คํธ: ์๋ํ๋ ๋๊ตฌ๋ ์ปดํฌ๋ํธ ๋ณ๊ฒฝ์ด ๋ฌธ์ ์์ฒด์ ํํ์ด๋ ๋ ์ด์์์ ์๋์น ์๊ฒ ๊นจ๋จ๋ฆฌ์ง ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ธ๊ณํ๋ ํ๊ฒฝ์์ ํจ๊ณผ์ ์ธ ์ปค๋ฎค๋์ผ์ด์ ์ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ API ๋ฌธ์๋ ๋จ์ํ ํ์์ด ์๋๋๋ค. ๊ทธ๊ฒ์ ๊ฐ๋ฐ์์๊ฒ ํ์ ์ค์ด์ฃผ๊ณ , ๊ต์ฐจ ๊ธฐ๋ฅ ํ์ ์ ์ด์งํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋ณด์ฅํ๋ ์ ๋ต์ ์์ฐ์ ๋๋ค. ์๋ํ๋ API ๋ฌธ์ ์์ฑ์ ์์ฉํ๊ณ , Storybook, TypeDoc, ํ๋ ์์ํฌ๋ณ ์๋ฃจ์ ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ํ์ฉํ๋ฉฐ, ์ต์์ ๋ฐฉ๋ฒ์ ์ค์ํจ์ผ๋ก์จ ์กฐ์ง์ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๋ ๋ชจ์์์ ์ง์ ์ผ๋ก ๋ฐ๊ฒฌ ๊ฐ๋ฅํ๊ณ , ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ์น ์๋ ์์ฐ์ผ๋ก ๋ณํ์ํฌ ์ ์์ต๋๋ค.
๊ฒฌ๊ณ ํ ๋ฌธ์ํ ํ๋ก์ธ์ค์ ๋ํ ํฌ์๋ ๊ฐ๋ฐ ๊ฐ์ํ, ๊ธฐ์ ๋ถ์ฑ ๊ฐ์, ์ํํ ์จ๋ณด๋ฉ, ๊ทธ๋ฆฌ๊ณ ๊ถ๊ทน์ ์ผ๋ก ๋ ์์ง๋ ฅ ์๊ณ ์์ฐ์ ์ธ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ํตํด ๋ฐฐ๋น๊ธ์ ์ง๋ถํฉ๋๋ค. ์ค๋ ์ปดํฌ๋ํธ API ๋ฌธ์ํ๋ฅผ ์ฐ์ ์์์ ๋๊ณ , ๋ ํจ์จ์ ์ด๊ณ ํ๋ ฅ์ ์ธ ๋ฏธ๋๋ฅผ ์ํ ๊ธฐ๋ฐ์ ๊ตฌ์ถํ์ญ์์ค.