๐ŸŽจ ์Šคํ† ๋ฆฌ๋ถ (StoryBook)์˜ ๊ธฐ๋Šฅ์€ ์–ด๋””๊นŒ์ง€ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ๊ฑฐ์—์š”? โ†—๏ธ

WE SEE WHAT WE WANTยท2023๋…„ 9์›” 4์ผ
12

๋ชฉ์ฐจ

๐Ÿค” ์Šคํ† ๋ฆฌ๋ถ(Storybook)์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ์•Œ๊ณ  ๊ณ„์„ธ์š”?

- ์ฃผ๋กœ ์‚ฌ๋žŒ๋“ค์ด ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌํ•ญ

  • UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์ง์ ‘ ๋ฌธ์„œํ™”, ์‹œ๊ฐํ™”ํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ

  • React, vue, angular ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›

  • ์Šคํ† ๋ฆฌ๋ถ์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ(ํ•„์š”์„ฑ)์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด โ†’ https://velog.io/@cookie004/why-storybook-in-2022

ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค!

์Šคํ† ๋ฆฌ๋ถ์˜ ๊ธฐ๋Šฅ์€ ์ด๊ฒƒ ๋ฟ๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ๋ถ ์‚ฌ์šฉ์„ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๊ณผ ํ™œ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , ๊ธฐ์—…๋ณ„ ๋ฒ ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€์ ์ธ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ๊ณผ ์Šคํ† ๋ฆฌ๋ถ์˜ ์žฅ๋‹จ์ ์„ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.


๐Ÿ’ ์Šคํ† ๋ฆฌ๋ถ์—” ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?

1. ์Šคํ† ๋ฆฌ(Stories) ๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ๋‹ค์–‘ํ•œ (+์ผ๊ด€์„ฑ์žˆ๋Š”) ์œ ์ฆˆ ์ผ€์ด์Šค๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

  • ํ•„์š”ํ•œ ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, ๋ชฉํ‚น๋œ ์ปจํ…์ŠคํŠธ์™€ API ์ฝœ์„ ํ†ตํ•ด ํŠน์ • ์ƒํƒœ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€ํ™”๋ฅผ stories ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ† ๋ฆฌ๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ ์ผ€์ด์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํŠน์ •ํ•œ props๋ฅผ ๋„˜๊ฒผ์„ ๋•Œ, ๊ทธ ์ž์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ์Šคํ† ๋ฆฌ๊ฐ€ ๋˜๊ณ , ๊ทธ๋ ‡๊ฒŒ ๋‹ค์–‘ํ•œ ์Šคํ† ๋ฆฌ๋“ค์„ ์ •์˜ํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์Šคํ† ๋ฆฌ๋ถ์—์„œ ๋ชจ๋“  ์Šคํ† ๋ฆฌ๋“ค์„ ์ง๊ด€์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ† ๋ฆฌ ์œ ํ˜•
    • ์˜ค๋ฒ„๋ทฐ ์Šคํ† ๋ฆฌ : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๊ณ , ์–ธ์ œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํ† ๋ฆฌ
    • ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ์Šคํ† ๋ฆฌ : ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋งŒ์ง€์ง€ ์•Š๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฐ„๋‹จํ•œ ํ”„๋กœํ† ํƒ€์ดํ•‘์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ† ๋ฆฌ
    • ํ”ผ์ฒ˜ ์Šคํ† ๋ฆฌ : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ค ์ƒํƒœ์™€ ๋ณ€ํ˜•์„ ๊ฐ–๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํ† ๋ฆฌ
    • ๋ ˆ์‹œํ”ผ ์Šคํ† ๋ฆฌ : ์‹ค์ œ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค๊ณผ ํ•จ๊ป˜ ์“ฐ์ด๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํ† ๋ฆฌ

2. ๋ฌธ์„œํ™” ํŽ˜์ด์ง€ (Docs):

  • MDX๋กœ ์ด๋ฃจ์–ด์ง„ ์ž์œ  ํ˜•์‹ ํŽ˜์ด์ง€ โ†’ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์นดํƒˆ๋กœ๊ทธ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

3. ์• ๋“œ์˜จ(Add-on) :

  • ๊ฐœ๋ฐœ์— ๋„์›€์„ ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€ ์กด์žฌ์ž…๋‹ˆ๋‹ค.

  • Storybook์˜ ๊ณต์‹ ์• ๋“œ์˜จ

    • storysource : ํ•ด๋‹น story๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ž…๋ ฅํ–ˆ๋Š”์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค
    • actions : onChange ๊ฐ™์€ handler๋“ค์ด ์–ด๋–ค ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๋Š”์ง€๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Docs : ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ API ๋ฌธ์„œ๋ฅผ ๊ฐ„ํŽธํ•˜๊ณ  ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. React์˜ ๊ฒฝ์šฐ react-docgen ๋“ฑ์˜ ๋„์›€์„ ๋ฐ›์œผ๋ฉด ์ปดํฌ๋„ŒํŠธ์†Œ์Šค๋กœ ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด MDX๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ทธ ์™ธ ์ธ๊ธฐ์žˆ๋Š” ์• ๋“œ์˜จ๋“ค (์•„๋ž˜)

    1. chromatic
      ๊ธฐ๋Šฅ: ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ
      ๊ตฌ์„ฑ: visual testing์„ ํ•œ ๊ฒฐ๊ณผ ํ™•์ธ. ์™ผ์ชฝ์ด Baseline, ์˜ค๋ฅธ์ชฝ์ด ์ƒˆ๋กœ ๋ฐฐํฌํ•œ ๋‚ด์šฉ

    2. addon-a11y
      ๊ธฐ๋Šฅ: ์›น ์ ‘๊ทผ์„ฑ ๊ฒ€์‚ฌ ์ˆ˜ํ–‰ ๋ฐ ์‹œ๊ฐ ์žฅ์•  ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
      ๊ตฌ์„ฑ: ๋‹ค์–‘ํ•œ ๊ทœ์น™ ์„ค์ • ๋˜๋Š” ํ•ด์ œ, ์‹œ๊ฐ ์žฅ์•  ๋ชจ์˜ ํˆด

    3. storybook-dark-mode
      ๊ธฐ๋Šฅ: Storybook UI ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ฐ์€ ๋ชจ๋“œ์™€ ์–ด๋‘์šด ๋ชจ๋“œ๋กœ ์ „ํ™˜
      ๊ตฌ์„ฑ: ์ปค์Šคํ…€ ํ…Œ๋งˆ ์„ค์ •

    4. addon-screen-reader
      ๊ธฐ๋Šฅ: ๊ธฐ๋ณธ ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๋ฅผ Storybook์— ์ถ”๊ฐ€ํ•˜์—ฌ ํ‚ค๋ณด๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ ํŽ˜์ด์ง€ ๊ตฌ์กฐ ํ…Œ์ŠคํŠธ
      ๊ตฌ์„ฑ: ์—†์Œ (์„ค์น˜ ํ›„ ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

    5. aria-live-storybook-addon
      ๊ธฐ๋Šฅ: aria-live ์†์„ฑ์„ ํ™œ์šฉ, ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด ๋‚ญ๋…๊ธฐ๊ฐ€ ์•Œ์•„์ฐจ๋ฆฌ๋„๋ก ๋•๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
      ๊ตฌ์„ฑ: ์—†์Œ (์„ค์น˜ ํ›„ ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

    6. storybook-addon-pseudo-states
      ๊ธฐ๋Šฅ: Storybook ๋ฉ”๋‰ด ๋ฐ”์—์„œ ๋ชจ๋“  ์œ ์‚ฌ ์ƒํƒœ๋ฅผ ํ† ๊ธ€ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
      ๊ตฌ์„ฑ: Storybook ๊ตฌ์„ฑ์— pseudo ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€


๐Ÿ”ฎ ์Šคํ† ๋ฆฌ๋ถ(Storybook) ์˜ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ ํ™œ์šฉ์œผ๋กœ์„œ์˜ ์Šคํ† ๋ฆฌ๋ถ

ํ•œ ์‚ฌ๋žŒ์ด ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋ช…์ด ๋™์‹œ์— ์ž‘์—…์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์–ด๋ ค์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์ธ์ง€ ๋ชฐ๋ผ์„œ ์ค‘๋ณต๋œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  2. ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต์ด๋ผ๊ณ ๋Š” ํ•˜์ง€๋งŒ ๋น„์Šทํ•˜๋ฉด์„œ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๋””์ž์ธ์ด ์ƒ๊ฒจ ํ†ต์ผ์„ฑ์„ ํ•ด์นœ๋‹ค.
  3. ์ด๋ฏธ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ด๋„ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž, ์ž์ฃผ ์“ฐ์ด๋Š” ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ์„ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ด ์“ฐ๋Š” ์—ญํ• 
(๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฒ„ํŠผ, ์ธํ’‹์ฐฝ, ํŽ˜์ด์ง€๋„ค์ด์…˜, ์…€๋ ‰ํŠธ ๋“ฑ)

2๏ธโƒฃ ๋””์ž์ธ ํ† ํฐ์œผ๋กœ์„œ์˜ ์Šคํ† ๋ฆฌ๋ถ

  • ์ƒ‰์ƒ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ์•„์ด์ฝ˜๊ณผ ๊ฐ™์€ ์‹œ๊ฐ์  ์Šคํƒ€์ผ ํ™•์ธ๊ฐ€๋Šฅ!
  • ๋””์ž์ธ ๊ฐ’(์ƒ‰์ƒ, ํฐํŠธ ๋“ฑ)์„ ๊ณตํ†ต ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ, ์ผ๊ด€๋œ ๋””์ž์ธ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ† ๋ฆฌ๋ถ์˜ Doc Blocks๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ƒ‰์ƒํŒ”๋ ˆํŠธ, ํƒ€์ดํฌ, ํ…Œ๋งˆ ๋“ฑ์„ ํ™•์ธํ•˜๊ธฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘๐Ÿป

3๏ธโƒฃ ๋””์ž์ด๋„ˆ, ์„œ๋น„์Šค ๊ธฐํš์ž์™€ ํ˜‘์—… ํˆด ๋กœ์„œ์˜ ์Šคํ† ๋ฆฌ๋ถ

  1. ํ™”๋ฉด ๊ฐฑ์‹  ์ฃผ๊ธฐ๊ฐ€ ๋น ๋ฅด๋‹ค.
    - chromatic์„ ํ†ตํ•ด ๋ฐฐํฌํ•˜์—ฌ ๋ณด๋‹ค ์†์‰ฝ๊ฒŒ ๋””์ž์ด๋„ˆ์—๊ฒŒ ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    - ๋ณต์žกํ•œ ๋‹จ๊ณ„๊ฐ€ ์—†์ด, ๊นƒํ—ˆ๋ธŒ์—์„œ ๋””์ž์ด๋„ˆ ํ˜น์€ ์„œ๋น„์Šค ๊ธฐํš์ž์™€ ํ•จ๊ป˜ ๋ฆฌ๋ทฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. (ํ”ผ๊ทธ๋งˆ๋ฅผ ์‹ค๋ฌด์— ์‚ฌ์šฉํ•œ๋‹ค๋ฉด) ์Šคํ† ๋ฆฌ๋ถ๊ณผ ํ”ผ๊ทธ๋งˆ์˜ ์—ฐ๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํ”ผ๊ทธ๋งˆ๋กœ๋Š” ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ๋™์ ์ธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๋„ ๊ฐ€๋Šฅ


๐Ÿคฉ ์Šคํ† ๋ฆฌ๋ถ(Storybook) ์„ ๋” ์ž˜ ์“ฐ๋Š” ํ™œ์šฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‚ ๋‹ค๋ฅธ ๊ธฐ์—…์˜ ์Šคํ† ๋ฆฌ๋ถ ํด๋”๊ตฌ์กฐ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ์„๊นŒ?

์Šคํ† ๋ฆฌ๋ถ์„ ํŒ€๋‚ด์—์„œ๋งŒ ์“ธ๊ฒƒ์ธ์ง€, ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€์—์„œ๋„ ๊ฐ™์ด ์‚ฌ์šฉํ• ๊ฑด์ง€์— ๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์•„๋ž˜ ์˜ˆ์‹œ๋“ค์„ ๋ณด๋ฉด์„œ ์–ด๋–ค ๊ตฌ์„ฑ์ด ์ข‹์„์ง€ ์ƒ๊ฐํ•ด๋ณด์ž.

BBC

  • ์ปดํฌ๋„ŒํŠธ + ์Šคํƒ€์ผ๊ฐ€์ด๋“œ + ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ (BBC)
  • https://www.bbc.co.uk/iplayer/storybook/index.html?path=/story/styleguide--colours
  • ๋‹ค์–‘ํ•œ ์ปค์Šคํ…€ ์ปดํฌ๋„ŒํŠธ ๊ด€๋ฆฌ์™€ ์‹ค์šฉ์ ์ธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด ํ†ต์ผ์„ฑ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์ง‘์ค‘

the Guardian

  • ์ปดํฌ๋„ŒํŠธ + ๋ ˆ์ด์•„์›ƒ # ์•„ํ† ๋ฏน ๋””์ž์ธ ๋ฐฉ๋ฒ•๋ก 
  • https://5dfcbf3012392c0020e7140b-gmgigeoguh.chromatic.com/?path=/story/layouts-standard--photo-essay-story
  • ํ•˜๋ฃจ์—๋„ ๋งŽ์€ ๊ธฐ์‚ฌ๋“ค์ด ์Ÿ์•„์ง€๋Š” ๋งŒํผ, ์ž‘์„ฑ๋œ ํ…์ŠคํŠธ๋ฅผ ๊ฒŒ์‹œ๋œ ์›น ํŽ˜์ด์ง€๋กœ ๋น ๋ฅด๋ฉด์„œ, ์•ˆ์ •์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ์ง‘์ค‘

IBM

  • ์ปดํฌ๋„ŒํŠธ + ๋ ˆ์ด์•„์›ƒ + ํŒจํ„ด # ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ๋ณ„ ๋ถ„๋ฅ˜
  • https://angular.carbondesignsystem.com/?path=/story/pattern-filtering--multi-selection
  • IBM์ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ( Carbon )์€ ์ฃผ๋กœ ํ”„๋กœ์ ํŠธ์— ํŒŒ์ผ ์ถ”๊ฐ€, ๋ณด๊ณ ์„œ ์ œ์ถœ, ํ™œ๋™ ์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ ๊ณผ ๊ฐ™์€ ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋””์ง€ํ„ธ ์ œํ’ˆ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ง‘์ค‘
  • UI ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ์ •๋„๋กœ ์•ˆ์ •๋๋Š”์ง€ ๋˜๋Š” ์•„์ง ์‹คํ—˜์ ์ธ ๋‹จ๊ณ„์ธ์ง€, ๋”๋Š” ์ง€์›๋˜์ง€ ์•Š๋Š”์ง€์— ๋”ฐ๋ผ ๊ตฌ๋ณ„


โœจ ๋‹ค๋ฅธ ๊ธฐ์—…์ด ์ž˜ ํ™œ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ?

1. ํŽ˜์ด์ง€ ์ž์ฒด๋ฅผ ์Šคํ† ๋ฆฌ๋ถ์— ๊ทธ๋ฆฌ์ž.

BBC ์™€ the Guardian, ๊ตญ๋‚ด์—์„œ๋Š” 29CM ๊ธฐ์—…์€ ์ปดํฌ๋„ŒํŠธ ๋ฟ ์•„๋‹ˆ๋ผ ํŽ˜์ด์ง€๋„ 1:1 ๋งค์นญํ•ด์„œ ์Šคํ† ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€ ์ž์ฒด๋ฅผ ์Šคํ† ๋ฆฌ๋ถ์— ๊ทธ๋ฆฌ๋Š” ํ–‰์œ„ (BBC, the Guardian)

Pure presentational pages
Teams at the BBC, The Guardian, and the Storybook maintainers themselves build pure presentational pages. If you take this approach, you don't need to do anything special to render your pages in Storybook.
It's straightforward to write components to be fully presentational up to the screen level. That makes it easy to show in Storybook. The idea is that you do all the messy โ€œconnectedโ€ logic in a single wrapper component in your app outside of Storybook. You can see an example of this approach in theย Dataย chapter of the Intro to Storybook tutorial.
Building pages with Storybook

  • Pureํ•˜๊ฒŒ UI๋งŒ ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ปดํฌ๋„ŒํŠธ์ฒ˜๋Ÿผ ์Šคํ† ๋ฆฌ๋ถ์— ์˜ฌ๋ฆฌ๋Š” ์ผ์˜ ์žฅ์ 
    โ†’ ๋ฐฑ์—”๋“œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , MockApi๋กœ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ ์ž‘์—…์„ ๋ฏธ๋ฆฌ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. (1๋ฒˆ์— ์ด์–ด์„œ) ๋น„์ฅฌ์–ผ ํ…Œ์ŠคํŒ…์œผ๋กœ ๋””์ž์ธ QA ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•˜์ž!

  • Storybook ์—์„œ MSW ์‚ฌ์šฉํ•˜๊ธฐ
    msw ์• ๋“œ์˜จ์„ ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐ์„ ์ œ์™ธ ํ•œ ๋‚˜๋จธ์ง€ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ๋‘ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    Jest ๋ฐ Mocha์™€ ๊ฐ™์€ ํ…Œ์ŠคํŒ… ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ†ตํ•ฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐœ๋ฐœ ์ค‘์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ†’ ์ปดํฌ๋„ŒํŠธ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฐ€ํ•ด์งˆ ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์— ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Unit Test : ์ด๋ฏธ ์ •์˜๋œ ํŠน์ • ์š”์†Œ๊ฐ€ ์ด๋Ÿฐ ์‹์œผ๋กœ ์›€์ง์—ฌ์•ผํ•œ๋‹ค๋Š” ๊ฐœ๋…. ๋น„๋™๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์‹œ์Šคํ…œ๊ณผ ๋…๋ฆฝ์ 

  • UI Test : UI๊ฐ€ ์–ด๋–ค ์‹์œผ๋กœ ์›€์ง์—ฌ์•ผ ํ•˜๋‚˜?์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋กœ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์ˆœ์„œ์— ๋”ฐ๋ฅธ ์ž‘๋™์„ ํ•˜๋‚˜ํ•˜๋‚˜ ํ…Œ์ŠคํŠธ ์ง„ํ–‰

  • ์‹ค์ œ ์ง„ํ–‰ํ–ˆ๋˜ ํ…Œ์ŠคํŠธ ์‹œํ˜„(๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…)

  • (+) ์‹ค์ œ๋กœ ๋ฐฐ๋ฏผ๊ฐ™์€ ๊ฒฝ์šฐ, ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜์—ฌ [ ๊ธฐํš - ๋””์ž์ธ - ํ”„๋ก ํŠธ๊ฐœ๋ฐœ - ๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ - ๊ธฐ๋ŠฅQA - ๋””์ž์ธQA - ๋ฆด๋ฆฌ์ฆˆ ] ์˜ ๊ณผ์ •์—์„œ ๋””์ž์ธ QA ๊ณผ์ •์—์„œ์˜ ๋ณ‘๋ชฉํ˜„์ƒ์„ ํฌ๊ฒŒ ๊ฐœ์„ ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค (2019๋…„ 12์›” ๋‹น์‹œ)

3. ์ฒด์ธ์ง€ ๋กœ๊ทธ๋ฅผ ํ†ตํ•œ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜์ž.

  • UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ์ง€์†์ ์ธ ์—…๋ฐ์ดํŠธ
    ์ปดํฌ๋„ŒํŠธ์˜ ์ถ”๊ฐ€ , ์ œ๊ฑฐ ๋ฐ API์˜ ๋ณ€๊ฒฝ ๋“ฑ์„ ์ฒด์ธ์ง€๋กœ๊ทธ ํŽ˜์ด์ง€์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    ์ด ํŽ˜์ด์ง€์—์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต๊ณผ ํ”„๋กœ์ ํŠธ ๋กœ๋“œ๋งต์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ๋„ ํ›Œ๋ฅญํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • ํŠนํžˆ ํŽ˜์ด์ง€๋ณ„ ์ปดํฌ๋„ŒํŠธ ์ฐจ์ด โ†’ PV(page view) ๊ฐ€ ๋†’์€ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ Œ๋””ํ•˜๊ณ  ์ตœ์‹ ํ™” ๋œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฉ์ฐจ๋ฅผ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.


(๋ฒˆ์™ธ) ์Šคํ† ๋ฆฌ๋ถ์ด ๊ฐ€์ ธ์˜ค๋Š” ์˜์™ธ์˜ ๊ธ์ •์ ์ธ ํšจ๊ณผ

1. ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ํšจ๊ณผ

  • ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒฝ์šฐ
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ์˜์กด์„ฑ์„ ๊ฐ€์ง„ ๊ฒฝ์šฐ

2. ์‹ ๊ทœ์ž…์‚ฌ์ž ์˜จ๋ณด๋”ฉ์˜ ์šฉ์ด์„ฑ

  • API ๋ช…์„ธ์„œ์ธ Swagger ์ฒ˜๋Ÿผ ์‚ฌ๋‚ด ์ปดํฌ๋„ŒํŠธ์™€ ๊ทธ ๊ตฌ์กฐ์™€ ๊ด€๋ จํ•ด์„œ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•˜๊ณ  ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿซฃ ์Šคํ† ๋ฆฌ๋ถ์˜ ์–ด๋ ค์šด ์  & ์˜๋ฌธ์‚ฌํ•ญ

1. ์ดˆ๊ธฐ ์„ค์ •์— ๊ด€ํ•œ ์‹œ๊ฐ„ ์†Œ๋ชจ๊ฐ€ ํฌ๋‹ค.

  • ๋งŒ์•ฝ ์Šคํ† ๋ฆฌ๋ถ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๊ธฐ์กด์— ์ง„ํ–‰ํ•˜๋Š” ์—…๋ฌด ์ด์™ธ์—๋„ ๋งŽ์€ ๊ณต์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
  • ๋‹ด๋‹น์ž๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.

2. ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์Šคํ† ๋ฆฌ๋ถ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋†“์น˜์ง€ ์•Š๊ณ  ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

  • ๋ฐฐ๋ฏผ๋„ ์‹ค์ œ๋กœ ์ง์›๋“ค ๊ต์œก + ์ ์šฉ๊นŒ์ง€ 2๋…„์ •๋„๊ฐ€ ์†Œ์š”๋˜์—ˆ๋‹ค๊ณ  ํ•จ.
  • ๋”๋”์šฑ ์Šคํ† ๋ฆฌ๋ถ ํด๋”๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์žก์„์ง€ + docs ์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ๋” ๊ณ ๋ฏผํ•ด๋ด์•ผ ํ•จ.

3. ์Šคํ† ๋ฆฌ๋ถ์€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ํšจ๊ณผ์ ์ผ๊นŒ?

  • ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ:
  • ๋‹จ์ˆœํ•œ SPA ํ”„๋กœ์ ํŠธ๋‚˜ ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋น„์šฉ ๋Œ€๋น„ ํšจ๊ณผ๊ฐ€ ๋‚ฎ์„ ์ˆ˜ ์žˆ์Œ
  • ๋งŽ์€ ์ˆ˜์˜ ์Šคํ† ๋ฆฌ์™€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ, ์Šคํ† ๋ฆฌ๋ถ์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ์— ์ฃผ์˜ โ†’ ํ•„์š”ํ•œ ์„œ๋น„์Šค ๋ถ€๋ถ„์—๋งŒ ์ ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์žก์•„์•ผ ํ•  ๋“ฏ

+)
ํ”„๋ก ํŠธ์—”๋“œ ์ธํ„ด ๊ทผ๋ฌด๋ฅผ ํ•˜๋ฉด์„œ ํ…Œํฌํ† ํฌ ๋ฐœํ‘œ์˜ ๊ธฐํšŒ๊ฐ€ ์ฃผ์–ด์กŒ๋Š”๋ฐ,
ํ‰์†Œ์— ๊ด€์‹ฌ์ด ์žˆ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์•˜๋˜ ์Šคํ† ๋ฆฌ ๋ถ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์—ฌ ๋ฐœํ‘œํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์ž˜๋ชป ๊ธฐ์žฌํ•œ ๋‚ด์šฉ์ด ์žˆ๊ฑฐ๋‚˜, ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด
ํŽธํ•˜๊ฒŒ ๋Œ“๊ธ€๋กœ ๋ง์”€์ฃผ์„ธ์š”!
๋ชจ๋“  ๋Œ“๊ธ€์€ ์ €์—๊ฒŒ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค! ๐Ÿฅฐ๐Ÿฅฐ๐Ÿฅฐ


= ์ฐธ๊ณ ํ•œ ์ž๋ฃŒ(๋งํฌ,๊ธ€,์‚ฌ์ง„)๋“ค =

profile
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์„œ๋น„์Šค ๊ธฐํš์„ ๊ณ๋“ค์ธ,,,

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2024๋…„ 9์›” 1์ผ

์ข‹์€ ๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ