Skip to content
Yunsup Sim(์‹ฌ์œค์„ญ) edited this page Mar 21, 2026 · 74 revisions

์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋ฉด์„œ ํŒ€์› ๊ฐ„์— ํ•ฉ์˜ํ•œ ๊ฐœ๋ฐœ ๊ด€์Šต์„ ๋ฌธ์„œํ™”ํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํŒ€์› ๋ชจ๋‘ ๋…ธ๋ ฅํ•ด์ฃผ์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

  • src/components ์•„๋ž˜์— ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ, ์Šคํ† ๋ฆฌ ํŒŒ์ผ, ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ์œ„์น˜์‹œ์ผœ ์ฃผ์„ธ์š”.

  • ํด๋” ์ด๋ฆ„, ํŒŒ์ผ ์ด๋ฆ„, ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์€ ๋ชจ๋‘ PascalCase๋กœ letter case๋ฅผ ํ†ต์ผํ•ด ์ฃผ์„ธ์š”.

  • ๋ณ€์ˆ˜ ์ด๋ฆ„, ํ•จ์ˆ˜ ์ด๋ฆ„, prop ์ด๋ฆ„์€ ๋ชจ๋‘ camelCase๋กœ letter case๋ฅผ ํ†ต์ผํ•ด ์ฃผ์„ธ์š”.

  • index.tsx ํŒŒ์ผ์„ ํ†ตํ•ด re-exportํ•˜์ง€ ๋งˆ์„ธ์š”.

    โ”œโ”€โ”€ src
    โ”‚   โ”œโ”€โ”€ components
    โ”‚   โ”‚   โ”œโ”€โ”€ Checkbox
    โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Checkbox.stories.tsx
    โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Checkbox.test.tsx
    โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ Checkbox.tsx
    
  • Compound pattern์˜ ๊ฒฝ์šฐ Object.assign์„ ํ†ตํ•œ ๋‹ค์Œ dot-notation ํ˜•์‹์˜ export๊ณผ RSC ์ง€์›์„ ์œ„ํ•œ named-export๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์„ธ์š”.

    • ์ตœ์ƒ๋‹จ Root๋Š” ๋ฌด์กฐ๊ฑด dot-notation์—†์ด ์ œ๊ณต
    • named-export๋ฅผ ๋”ฐ๋กœ ์ œ๊ณต
    <Card> {/* ์ตœ์ƒ๋‹จ Root๋Š” ๋ฌด์กฐ๊ฑด dot-notation์—†์ด ์ œ๊ณต */}
      <Card.Header />
      <Card.Body />
      <Card.Footer />
    </Card>

์ปดํฌ๋„ŒํŠธ

  • ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” function ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•ด์ฃผ์„ธ์š”.
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด์ฃผ์„ธ์š”.
  • Boolean props๋Š” is, has ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ˜•์šฉ์‚ฌ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. (์˜ˆ: reversed)
  • API ์„ค๋ช…์„ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๋ช…์‚ฌ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š” (์˜ˆ: /*_ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ _/)
  • ์‹ ๊ทœ ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ์‹œ index.ts์— re-exportํ•˜์—ฌ root importimport { Button } from "daleui"๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ์„ธ์š”

์Šคํ† ๋ฆฌ

  • ์Šคํ† ๋ฆฌ ์ œ๋ชฉ์ด ์ปดํฌ๋„ŒํŠธ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ž๋™ ์œ ์ถ”๋˜๋„๋ก title ์†์„ฑ ๊ฐ’์€ ์ƒ๋žตํ•ด์ฃผ์„ธ์š”. ๋ฌธ์ž์—ด๋กœ ์ง์ ‘ ๋ช…์‹œํ•˜๋ฉด ํƒ€์ž… ์•ˆ์ „(type-safe)ํ•˜์ง€ ์•Š๊ณ , ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ๋•Œ ์‹ฑํฌ๊ฐ€ ๊นจ์ง€๊ธฐ ์‰ฌ์šฐ๋‹ˆ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.
  • ์—ฌ๋Ÿฌ ์Šคํ† ๋ฆฌ์— ๊ฑธ์ณ ํ•„์š”ํ•œ args๋Š” ์Šคํ† ๋ฆฌ ์ˆ˜์ค€์—์„œ ์ค‘๋ณตํ•˜์ง€ ๋งˆ์‹œ๊ณ  ์ปดํฌ๋„ŒํŠธ ์ˆ˜์ค€์—์„œ ์ง€์ •ํ•ด์ฃผ์„ธ์š”.
  • ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋ณธ๊ฐ’์€ args์—์„œ ์„ ์–ธํ•˜์—ฌ, ์Šคํ† ๋ฆฌ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ ํƒ๋˜๋„๋ก ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ† ๋ฆฌ๋ถ์ด ๊ธฐ๋ณธ ์„ค์ •ํ•ด ์ค€ arg type์„ ๋ฎ์–ด์“ฐ๋ฉด, ์ปดํฌ๋„ŒํŠธ ํƒ€์ž…์ด ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ ๊ฒฝ ์จ์„œ arg type์„ ์กฐ์ •ํ•ด์•ผ ํ•˜๋‹ˆ ์ฃผ์˜ํ•ด ์ฃผ์„ธ์š”. ์•„์ฃผ ํƒ€๋‹นํ•œ ์ด์œ ๊ฐ€ ์—†๋Š” ํ•œ arg type์„ ์ง์ ‘ ์ง€์ •ํ•˜์ง€ ๋งˆ์„ธ์š”.
    • ํƒ€๋‹นํ•œ ์ด์œ  ์˜ˆ์‹œ)
      1. ReactNode Type์„ ์‚ฌ์šฉํ•ด์„œ story์—์„œ ๋”ฐ์˜ดํ‘œ(")๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ -> control: 'text' ์‚ฌ์šฉ
      2. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ exportํ•˜๋Š” compound pattern์˜ ๊ฒฝ์šฐ -> argType ์‚ฌ์šฉ
  • ํ•ญ์ƒ ๊ณ ์ •๋˜์–ด์•ผ ํ•˜๋Š” prop์€ Story์˜ argTypes์—์„œ control: false๋กœ ์„ ์–ธํ•ด ์ฃผ์„ธ์š”.
    • ex) Orientation Story์—์„œ orientation props
  • Docs ์„ค๋ช…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ์ฃผ์„์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, Compound Pattern์˜ ๊ฒฝ์šฐ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ง์ ‘ export๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ Docs ์„ค๋ช…์€ ์Šคํ† ๋ฆฌ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ

  • ํ…Œ์ŠคํŠธ ํŒŒ์ผ์€ ๋ณ„๋„ ๋””๋ ‰ํ† ๋ฆฌ์— ์ค‘์•™ํ™”ํ•˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ ๋ฐ”๋กœ ์˜†์— ๋‘์„ธ์š”.
  • ๋‹จ์ˆœํ•œ ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ๋ชจ๋“ˆ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜์ง€ ์•Š๋‹ค๋ฉด describe()-it() ๋Œ€์‹ ์— test()๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š”.
  • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๋•Œ๋Š” fireEvent ๋Œ€์‹  @testing-library/user-event ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š”. ๋ธŒ๋ผ์šฐ์ € ์ž…์žฅ์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ œ๋ชฉ์€ ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์„ธ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ† ๋ฆฌ(Storybook)์™€ ํ…Œ์ŠคํŠธ(Unit Test)๋Š” ๋ชฉ์ ์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋ถ„๋ฆฌ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.
    • ์Šคํ† ๋ฆฌ: ๋ฌธ์„œํ™” ๋ฐ ๋ฐ๋ชจ ๋ชฉ์  / ํ…Œ์ŠคํŠธ: ๋™์ž‘ ๊ฒ€์ฆ ๋ฐ ๋ช…์„ธ ๋ชฉ์ 
    • ๋”ฐ๋ผ์„œ, ์Šคํ† ๋ฆฌ์— ์˜์กดํ•˜๋Š” ํ…Œ์ŠคํŠธ(composeStories ๋“ฑ)๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.
    • ํ…Œ์ŠคํŠธ๋Š” ์Šคํ† ๋ฆฌ ๋ณ€๊ฒฝ์— ์˜ํ–ฅ๋ฐ›์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.
    • ๊ด€๋ จ ๋…ผ์˜: Github ์ด์Šˆ, ๊ด€๋ จ ๋…ผ์˜: ๋””์Šค์ฝ”๋“œ ์ •๋ฆฌ

Clone this wiki locally