[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] [UX/UI] Design System, Component Library ๊ณผ์ œ

JiEunยท2023๋…„ 5์›” 24์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

๋””์ž์ธ ์‹œ์Šคํ…œ, ์•„ํ† ๋ฏน ๋””์ž์ธ, storybook์„ ํ™œ์šฉํ•œ ๋””์ž์ธ ์‹œ์Šคํ…œ ๋“ฑ์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.


๐Ÿ“ ๋ฐฐ์šด ๊ฒƒ

โœ”๏ธ ๋””์ž์ธ ์‹œ์Šคํ…œ(Design System)

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

์žฅ์ 

1. ํŒ€๊ฐ„์˜ ์›ํ™œํ•œ ํ˜‘์—… ์ด‰์ง„

  • ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๋Š” ๋ฌธ์„œ๋‚˜ ํˆดํ‚ท ํ˜•ํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ณต์œ ํ•ด ์ด๋ฅผ ์ฐธ๊ณ ํ•ด ์„œ๋กœ์˜ ์ž‘์—…์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์†๋„ ์ƒ์Šน
  • ํƒ์› ๊ฐ„์˜ ์†Œํ†ต๊ณผ ํ˜‘์—… ์›ํ™œ
  • ์ฃผ๋‹ˆ์–ด ๋ ˆ๋ฒจ์˜ ๋””์ž์ด๋„ˆ/๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์˜จ๋ณด๋”ฉ ๊ต์œก ๋„๊ตฌ ๋ฐ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ํ™œ์šฉ

2. ์ผ๊ด€์„ฑ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ œ๊ณต

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

3. ํšจ์œจ์ ์ธ ๋””์ž์ธ ๋ฐ ๊ฐœ๋ฐœ ๊ณผ์ •

  • ํŠน์ • ์ปดํฌ๋„ŒํŠธ์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ(๊ธฐ๋ณธ, ํฌ์ปค์Šค, ์—๋Ÿฌ ๋“ฑ)์— ๋Œ€ํ•œ ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ผ์ธ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•œ๋‹ค๋ฉด ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐœ๋ฐœ์ž์˜ ๋””์ž์ธ ๊ด€๋ จ ์—…๋ฌด๋ฅผ ์ค„์—ฌ์ฃผ๊ธฐ์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋˜๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๊ฐ™์€ ๋” ํฌ๊ณ  ๋ณต์žกํ•œ ๋ฌธ์ œ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ๋ธŒ๋žœ๋“œ ์ธ์ง€๋„ ๊ฐ•ํ™”

  • ๋ธŒ๋žœ๋“œ์˜ ๊ฐœ์„ฑ๊ณผ ๊ฐ€์น˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ƒ‰์ƒ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ์•„์ด์ฝ˜, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์š”์†Œ๋ฅผ ํ†ต์ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋“ค์€ ์ œํ’ˆ์ด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ธŒ๋žœ๋“œ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋Š๋‚Œ์„ ๋ฐ›๋Š”๋‹ค.
  • ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ๊ธฐ์–ต์— ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋‚จ๊ณ  ๋ธŒ๋žœ๋“œ ์ถฉ์„ฑ๋„์™€ ์ธ์ง€๋„๊ฐ€ ๋†’์•„์ง„๋‹ค.

โœ”๏ธ ์•„ํ† ๋ฏน ๋””์ž์ธ(tomic Design)

  • ์›น ๋””์ž์ด๋„ˆ Brad Frost๊ฐ€ ์ฑ… "Atomic Design"์„ ํ†ตํ•ด ์ œ์‹œํ•œ ๋””์ž์ธ ๋ฐ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก 
  • UI๋ฅผ ๋ฌผ์งˆ์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ธ ์›์ž(atom)์ฒ˜๋Ÿผ ์ตœ๋Œ€ํ•œ ์ชผ๊ฐœ๊ณ , ๊ทธ๊ฒƒ๋“ค์„ ์กฐํ•ฉํ•˜๊ณ  ์ ์ง„์ ์œผ๋กœ ํ™•์žฅ์‹œ์ผœ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ

์•„ํ† ๋ฏน ๋””์ž์ธ์˜ ๊ตฌ์„ฑ ์š”์†Œ


์›์ž(atom), ๋ถ„์ž(molecule), ์œ ๊ธฐ์ฒด(organism), ํ…œํ”Œ๋ฆฟ(template), ํŽ˜์ด์ง€(page)๊ฐ€ ์žˆ๋‹ค.

์›์ž(Atoms)

  • ๋””์ž์ธ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ , ๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ตฌ์„ฑ ์š”์†Œ
  • input, label, icon, button ๋“ฑ์˜ ์˜ˆ์‹œ๊ฐ€ ์ด์— ํ•ด๋‹น
  • ์›์ž๋“ค์ด ๊ฒฐํ•ฉํ•˜์—ฌ ๋” ๋ณต์žกํ•œ UI ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๋‹ค.

๋ถ„์ž(Molecules)

  • ์›์ž๋“ค์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์ž‘๋™ํ•˜๋Š” UI์˜ ์ง‘ํ•ฉ
  • ์›์ž๋“ค์ด ๊ฒฐํ•ฉํ•˜์—ฌ ๋” ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋Š” ์ค‘๊ฐ„ ๋‹จ๊ณ„

์œ ๊ธฐ์ฒด(Organisms)

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

ํ…œํ”Œ๋ฆฟ(Templates)

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

ํŽ˜์ด์ง€(Pages)

  • ๊ฐ€์žฅ ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„ (์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์„ ํ™•์ธ)
  • ๋ฐ์ดํ„ฐ ์—†์ด ๋‹จ์ˆœํ•œ UI ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ…œํ”Œ๋ฆฟ, ๋ฐ์ดํ„ฐ์™€ ๋””์ž์ธ์ด ํ•ฉ์ณ์ง„ ์š”์†Œ๋ฅผ ํŽ˜์ด์ง€๋กœ ๊ตฌ๋ถ„
  • ํŽ˜์ด์ง€๋Š” ๋ณต์ œํ•œ ํ…œํ”Œ๋ฆฟ์— ์‹ค์ œ ์ฝ˜ํ…์ธ ๋“ค์„ ์ฑ„์›Œ ๋„ฃ์€ ์š”์†Œ๋กœ ์™„์„ฑ๋œ UI์˜ ๋ชจ์Šต์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

์žฅ์ 

๋ชจ๋“ˆํ™”์™€ ์žฌ์‚ฌ์šฉ์„ฑ

์ž‘์€ ๋‹จ์œ„์˜ ๊ตฌ์„ฑ ์š”์†Œ(์›์ž)๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์กฐํ•ฉํ•ด ๋” ํฐ ๋‹จ์œ„์˜ ๊ตฌ์„ฑ ์š”์†Œ(๋ถ„์ž, ์œ ๊ธฐ์ฒด ๋“ฑ)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

๋ชจ๋“ˆํ™”๋œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๊ณ  ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ธ๋‹ค.

์œ ์ง€ ๋ณด์ˆ˜์˜ ํŽธ๋ฆฌํ•จ

์›น์‚ฌ์ดํŠธ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ, ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ๊ณ  ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์ด ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

ํ™•์žฅ์„ฑ

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์œ ์—ฐํ•œ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (๊ธฐ์กด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ)

ํ”„๋กœ์ ํŠธ์˜ ํ™•์žฅ์„ฑ์ด ๋†’์•„์ง€๊ณ , ์ƒˆ๋กœ์šด ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ ๊ณผ์ œ(Component Library)

  • ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ Storybook์„ ํ†ตํ•ด ๋ฌธ์„œํ™”ํ•˜๊ธฐ

Tokens Studio for Figma

ํ•ด๋‹น ํ”ผ๊ทธ๋งˆ ํ”„๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ํ”ผ๊ทธ๋งˆ ํ† ํฐ์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.


ํŒŒ์ผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•ด๋‹น ํŒŒ์ผ์—๋Š” ๊ฐ ์Šคํƒ€์ผ์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.

ํ…œํ”„๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


Button.storise.js์—์„œ primary, label์„ ์„ค์ •ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.


npm run storybookํ•ด์ฃผ๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‚˜๋จธ์ง€๋„ ๋น„์Šทํ•˜๊ฒŒ ์ž‘์—…ํ•ด ์ฃผ์—ˆ๋‹ค.

๊ทธ์ค‘ itemBox.js/itemBox.stories.js์—์„œ
items๊ฐ€ ์žˆ๋Š”๋ฐ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋˜์–ด ์žˆ์—ˆ๋‹ค.

๊ทธ๋ƒฅ ๋„ฃ์–ด ์ค„ ๊ฒฝ์šฐ ํ•œ์ค„์— ํ•ด๋‹น ๋ฉ˜ํŠธ๊ฐ€ ์ „๋ถ€ ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
map() ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•ด ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


โœ๏ธ ๋งˆ์น˜๋ฉฐ

๋””์ž์ธ ์‹œ์Šคํ…œ์„ ์ด์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ๊ฐ™์ด ํ˜‘์—…์„ ํ•  ๋•Œ ๋””์ž์ธ ์ž‘์—…์ด ํ†ต์ผ ๋˜๊ณ 
์žฌ์‚ฌ์šฉ์„ฑ์— ์œ ์šฉํ•˜๋‹ค ์ƒ๊ฐํ–ˆ๋‹ค.

์ด๋ฒˆ ๊ณผ์ œ๋Š” story book์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ํ–ˆ๋Š”์ง€ ๊ธฐ์–ต์ด ์ž˜ ์•ˆ๋‚˜ ์ดˆ๋ฐ˜์—๋Š” ์–ด๋–ค์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•œ ๊ฑฐ ๊ฐ™๋‹ค.

์ดํ›„์—” ๊ธˆ๋ฐฉ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  items์—์„œ 2์ฐจ ๋ฉ˜๋ถ•์ด ์™”๋˜ ๊ฑฐ ๊ฐ™๋‹ค.

list๊ฐ€ ๋ฐฐ์—ด๋กœ ๋˜์–ด ์žˆ์–ด map()๋ฉ”์„œ๋“œ๋ฅผ ์ƒ๊ฐํ–ˆ๋‹ค.
๋„ˆ๋ฌด ๊นŠ์— ๋“ค์–ด๊ฐ€์ง€ ์•Š์•„์„œ ๋‹คํ–‰์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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