# [[Storybook|Storybook]] ## ๐Ÿ“Œ Brief Summary Storybook์€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์‹œ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฃผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ฒฉ๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [1-3]. ํŠนํžˆ ๊ฐœ๋ฐœ๋œ ์ปดํฌ๋„ŒํŠธ์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ(์Šคํ† ๋ฆฌ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ํ™”๋œ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual Regression Testing) ๋ฐ ์ƒํ˜ธ์ž‘์šฉ ํ…Œ์ŠคํŠธ(Interaction Testing)๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์˜๋„์น˜ ์•Š์€ UI ๋ณ€๊ฒฝ์ด๋‚˜ ์ ‘๊ทผ์„ฑ ์œ„๋ฐ˜์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [4-6]. Pull Request ๊ณผ์ •์— ๊ฒฐํ•ฉ๋˜์–ด ์•ˆ์ „ํ•œ UI ์—…๋ฐ์ดํŠธ์™€ ๋ฆฌ๋ทฐ๋ฅผ ์ง€์›ํ•˜๋Š” ํ•„์ˆ˜์ ์ธ ํ”Œ๋žซํผ์œผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 7]. ## ๐Ÿ“– Core Content * **์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฉ๋ฆฌ๋œ ๊ฐœ๋ฐœ ๋ฐ ๋ฌธ์„œํ™”** Storybook์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ์ปจํ…์ŠคํŠธ์—์„œ ๋ฒ—์–ด๋‚˜ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค [1]. ์ด๋Š” ๋ชจ๋…ธ๋ ˆํฌ(Monorepo) ํ™˜๊ฒฝ์ด๋‚˜ ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Feature-Sliced Design ๋“ฑ)์—์„œ ๊ฐ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค [3]. ์ด๋ฏธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ์šฉ๋„๋กœ Storybook์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅธ UI ๊ฒ€์ฆ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค [2]. * **์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ (Visual Regression Testing)** Storybook์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ๊ฐ ์Šคํ† ๋ฆฌ์˜ ์Šค๋ƒ…์ƒท์„ ์บก์ฒ˜ํ•˜๊ณ  ์ด๋ฅผ ์ด์ „์— ์Šน์ธ๋œ '๋ฒ ์ด์Šค๋ผ์ธ(Baseline)'๊ณผ ๋น„๊ตํ•˜์—ฌ ์‹œ๊ฐ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [8]. ์ „ํ†ต์ ์ธ ์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ๊ฐ€ HTML ๋งˆํฌ์—… ๋ธ”๋กญ์„ ๋น„๊ตํ•˜์—ฌ ์‹œ๊ฐ์  ๋ณ€ํ™”๊ฐ€ ์—†์Œ์—๋„ ์˜คํƒ(false positive)์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, Storybook์˜ ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ๊ฒฝํ—˜ํ•˜๋Š” '๋ Œ๋”๋ง๋œ ํ”ฝ์…€'์„ ์ง์ ‘ ๋น„๊ตํ•˜๋ฏ€๋กœ ํ›จ์”ฌ ๋” ํ’๋ถ€ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค [9]. * **์ƒํ˜ธ์ž‘์šฉ ๋ฐ ์ ‘๊ทผ์„ฑ ํ…Œ์ŠคํŠธ (Interaction & Accessibility Tests)** Storybook์€ ์ปดํฌ๋„ŒํŠธ์˜ ์™ธํ˜•๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋™์ž‘(Behavior)๊นŒ์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒํ˜ธ์ž‘์šฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋กœ๋”ฉ, ์—๋Ÿฌ, ํ˜ธ๋ฒ„, ๋ฉ”๋‰ด ์—ด๋ฆผ ๋“ฑ ๋‹ค์–‘ํ•œ UI ์ƒํƒœ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ [5], ์ด๋Ÿฌํ•œ ์ƒํƒœ ๋ณ€ํ™”์— ๋งž์ถฐ ์Šคํฌ๋ฆฐ์ƒท์„ ์ฐ์Œ์œผ๋กœ์จ ํ–‰๋™ ํ…Œ์ŠคํŠธ์™€ ์‹œ๊ฐ์  ๊ฒ€์ฆ์„ ๋™์ผํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 6]. ๋ถ€๊ฐ€์ ์œผ๋กœ ์ถ”๊ฐ€์ ์ธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์—†์ด๋„ ์ ‘๊ทผ์„ฑ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 10]. * **CI/CD ๋ฐ ๋„๊ตฌ ํ†ตํ•ฉ (CI/CD Integrations)** Storybook์€ Chromatic์ด๋‚˜ Happo ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๋„๊ตฌ๋“ค๊ณผ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค [1, 4, 8]. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ CI ํŒŒ์ดํ”„๋ผ์ธ์— ์—ฐ๋™ํ•˜๋ฉด, PR(Pull Request)์ด ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค Chrome, Firefox, Safari ๋“ฑ ๋‹ค์–‘ํ•œ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €์™€ ์—ฌ๋Ÿฌ ๋ทฐํฌํŠธ ํฌ๊ธฐ์—์„œ ์ž๋™์œผ๋กœ ์Šคํฌ๋ฆฐ์ƒท์ด ์บก์ฒ˜๋˜๊ณ  ๋ฒ ์ด์Šค๋ผ์ธ๊ณผ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค [1, 4, 11]. ์ด๋ฅผ ํ†ตํ•ด ๋ฆฌ๋ทฐ์–ด๋Š” ๊ฐ ์ƒํƒœ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ™•์ธํ•  ํ•„์š” ์—†์ด ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„(Diff)์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์Šน์ธ(Accept)ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 12, 13]. ## โš–๏ธ Trade-offs & Caveats * **ํ…Œ์ŠคํŠธ์˜ ๋ถˆ์•ˆ์ •์„ฑ(Flakiness) ๋ฐ ๋…ธ์ด์ฆˆ ๋ฌธ์ œ:** ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋น„๋™๊ธฐ ์ž์‚ฐ(Asset), ํฐํŠธ ๋กœ๋”ฉ ๋“ฑ์œผ๋กœ ์ธํ•ด ๊นจ์ง€๊ธฐ ์‰ฝ๊ฑฐ๋‚˜ ๋ถˆ์•ˆ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10, 11]. ๋˜ํ•œ ์ด๋ฏธ์ง€ ์••์ถ• ๋…ธ์ด์ฆˆ๋‚˜ ์•ˆํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ(anti-aliasing)๊ณผ ๊ฐ™์€ ๋ฏธ์„ธํ•œ ์ฐจ์ด๋กœ ์ธํ•ด ์‹คํŒจํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค [10, 14]. ์ด๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Happo ๋“ฑ์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ž๋™์œผ๋กœ ๋ฌดํšจํ™”ํ•˜๊ณ  ๋น„๋™๊ธฐ ์ž์‚ฐ์„ ๋Œ€๊ธฐํ•˜๋ฉฐ, ์‹œ๊ฐ์  ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ƒ‰์ƒ ํ—ˆ์šฉ ์˜ค์ฐจ(color-delta tolerance)๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ์ œ์•ฝ๊ณผ ์„ค์ • ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค [11, 14]. * **์ถ”๊ฐ€์ ์ธ ๋ฆฌ๋ทฐ ๋ณ‘๋ชฉ ๋ฐ CI ์„ค์ • ์˜ค๋ฒ„ํ—ค๋“œ:** ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ๊ฐ€ ์œ ํšจํ•˜๋ ค๋ฉด ๋ณ€๊ฒฝ๋œ ์Šคํฌ๋ฆฐ์ƒท์ด ์˜๋„๋œ ๊ฒƒ์ธ์ง€(์ƒˆ๋กœ์šด ๋ฒ ์ด์Šค๋ผ์ธ์œผ๋กœ ์ˆ˜๋ฝ) ์•„๋‹ˆ๋ฉด ๋ฒ„๊ทธ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ํŒ€์›์˜ ์ˆ˜๋™ ๋ฆฌ๋ทฐ ๊ณผ์ •์ด ๋ฐ˜๋“œ์‹œ ์ˆ˜๋ฐ˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [12, 13]. ๋˜ํ•œ CI/CD์—์„œ ์›ํ™œํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ํ”„๋กœ์ ํŠธ ํ† ํฐ ๋“ฑ ์ธ์ฆ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค์ •ํ•˜๋Š” ์ดˆ๊ธฐ ์ž‘์—…์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [7]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€์ฆ ๊ธฐ๋ฒ• (Testing Methods)] - [[Visual Regression Testing|Visual Regression Testing]] - ์—ฐ๊ฒฐ ์ด์œ : Storybook์ด ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ•ต์‹ฌ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [4, 8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: HTML ๋งˆํฌ์—…์„ ๋น„๊ตํ•˜๋Š” Snapshot Test์˜ ํ•œ๊ณ„์ ๊ณผ ์˜คํƒ(False Positive)์˜ ์›๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ํ”ฝ์…€ ๋ Œ๋”๋ง ๊ธฐ๋ฐ˜ ๋น„๊ต์˜ ์žฅ์ ์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9]. - Interaction Testing - ์—ฐ๊ฒฐ ์ด์œ : ์ปดํฌ๋„ŒํŠธ์˜ ๋‹จ์ˆœํ•œ ๋ Œ๋”๋ง๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ์ €์˜ ํ–‰๋™(์ด๋ฒคํŠธ, ์ƒํƒœ ๋“ฑ)์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜์—ฌ ๋‹ค์–‘ํ•œ UI ์ƒํƒœ(๋กœ๋”ฉ, ํ˜ธ๋ฒ„ ๋“ฑ)๋ฅผ ๊ฒ€์ฆํ•˜๋Š” Storybook์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค [5, 6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ ์ „์ด์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” UI๋ฅผ ์–ด๋–ป๊ฒŒ ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5]. #### [ํ†ตํ•ฉ ๋ฐ ์ž๋™ํ™” ๋„๊ตฌ (Integration Tools)] - Chromatic - ์—ฐ๊ฒฐ ์ด์œ : Storybook ์œ ์ง€๋ณด์ˆ˜ ํŒ€์ด ๋งŒ๋“  ๊ณต์‹ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋กœ, ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ € ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ์™€ CI ํ†ตํ•ฉ์„ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [8, 15]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฒ ์ด์Šค๋ผ์ธ(Baseline) ์ด๋ฏธ์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ์ €์žฅ, ๋น„๊ต, ๋™๊ธฐํ™”๋˜๋Š”์ง€ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๊ณผ์ •์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 13]. - Happo - ์—ฐ๊ฒฐ ์ด์œ : Storybook๊ณผ ํ†ตํ•ฉ๋˜์–ด ๋‹ค์ค‘ ๋ธŒ๋ผ์šฐ์ € ์Šคํฌ๋ฆฐ์ƒท ํ…Œ์ŠคํŠธ ๋ฐ ์ ‘๊ทผ์„ฑ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Flakiness ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ •์ง€ํ•˜๊ฑฐ๋‚˜ ์ƒ‰์ƒ ์˜ค์ฐจ ๋ฒ”์œ„(color-delta tolerance)๋ฅผ ์„ค์ •ํ•˜์—ฌ ์‹œ๊ฐ์  ๋…ธ์ด์ฆˆ๋ฅผ ์ค„์ด๋Š” ๊ตฌ์ฒด์  ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 14]. ### Deeper Research Questions - Storybook์˜ Visual Test์™€ ์ „ํ†ต์ ์ธ HTML Snapshot Test๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์‹ค์ œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์œ ์ง€๋ณด์ˆ˜ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ์˜คํƒ(false positive) ๋น„์œจ์˜ ์ฐจ์ด๋Š” ์–ด๋– ํ•œ๊ฐ€? - ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋น„๋™๊ธฐ ํฐํŠธ ๋กœ๋”ฉ ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” Visual Test์˜ Flakiness๋ฅผ ์™„์ „ํžˆ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด Chromatic์ด๋‚˜ Happo๋Š” ์–ด๋–ค ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ ์ œ์–ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? - Storybook์˜ Interaction Test๋กœ ๋ณต์žกํ•œ ์‚ฌ์šฉ์ž ์—ฌ์ •(User Journey)์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ๋•Œ, ์ƒํƒœ๋ณ„ ์Šคํฌ๋ฆฐ์ƒท ์บก์ฒ˜๊ฐ€ CI ๋นŒ๋“œ ์‹œ๊ฐ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๊ณผ ์ด๋ฅผ ๋ณ‘๋ ฌํ™”ํ•˜์—ฌ ์ตœ์ ํ™”ํ•˜๋Š” ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋ชจ๋…ธ๋ ˆํฌ(Monorepo) ํ™˜๊ฒฝ์ด๋‚˜ Feature-Sliced Design ์•„ํ‚คํ…์ฒ˜์—์„œ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ์ด ๊ฐ๊ฐ ๋ถ„๋ฆฌ๋œ Storybook์„ ๊ฐ€์งˆ ๋•Œ, ์ด๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ์‹œ๊ฐ์  ํšŒ๊ท€๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€? - Storybook์„ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ์  ์ ‘๊ทผ์„ฑ ํ…Œ์ŠคํŠธ(Accessibility regression testing)๊ฐ€ ์‹ค์ œ DOM ๊ธฐ๋ฐ˜์˜ ์ ‘๊ทผ์„ฑ ๊ฐ์‚ฌ ๋„๊ตฌ(aXe ๋“ฑ)์™€ ๋น„๊ตํ•˜์—ฌ ๊ฐ–๋Š” ํ•œ๊ณ„์ ๊ณผ ๋ณด์™„์ ์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** React ๋“ฑ UI ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์•ฑ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ `Button`, `Modal` ๋“ฑ์˜ ์š”์†Œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๊ณ , ํ˜ธ๋ฒ„ ๋ฐ ์—๋Ÿฌ ์ƒํƒœ์˜ Story๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. - **System Design:** Feature-Sliced Design์ฒ˜๋Ÿผ ๋„๋ฉ”์ธ๊ณผ ํ”ผ์ฒ˜๊ฐ€ ๋šœ๋ ทํ•˜๊ฒŒ ๋‚˜๋‰œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•  ๋•Œ, ๊ฐ ํ”ผ์ฒ˜ ํด๋”๋ณ„๋กœ Storybook ํ™˜๊ฒฝ์„ ์„ธํŒ…ํ•˜์—ฌ ๊ฒฉ๋ฆฌ๋œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. - **Operation / Maintenance:** CI/CD ์›Œํฌํ”Œ๋กœ์šฐ์— Chromatic ๋˜๋Š” Happo๋ฅผ ์—ฐ๋™ํ•˜์—ฌ, ํŒ€์›์ด PR์„ ์˜ฌ๋ฆด ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์‹œ๊ฐ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ(Visual Diff)์ด ์บก์ฒ˜๋˜๊ณ  ์ด๋ฅผ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ง์ ‘ ํ™•์ธ ํ›„ ๋ณ‘ํ•ฉ(Merge)ํ•˜๋Š” ์šด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. - **Learning Path:** ๊ธฐ๋ณธ UI ์ปดํฌ๋„ŒํŠธ ๊ฒฉ๋ฆฌ ๊ฐœ๋ฐœ -> Story ์ž‘์„ฑ์„ ํ†ตํ•œ ๋ฌธ์„œํ™” -> Interaction Test ์ž‘์„ฑ -> ์ž๋™ํ™”๋œ Visual Regression Test ๊ตฌ์ถ•์œผ๋กœ ์ด์–ด์ง€๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ’ˆ์งˆ ๋ณด์ฆ ํ•™์Šต ๊ฒฝ๋กœ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. - **My Project Relevance:** ํ˜„์žฌ ์œ ์ง€๋ณด์ˆ˜ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฆฌํŒฉํ† ๋ง์ด๋‚˜ ์ƒˆ๋กœ์šด ๋””์ž์ธ ์‹œ์Šคํ…œ(UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ๊ตฌ์ถ• ์ž‘์—… ์‹œ, ์‹ค์ˆ˜๋กœ ๋ฐœ์ƒํ•˜๋Š” CSS/๋ ˆ์ด์•„์›ƒ ๊นจ์ง์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ์ „์žฅ์น˜๋กœ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### Adjacent Topics - Pull Request Workflow - ํ™•์žฅ ๋ฐฉํ–ฅ: Storybook ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๋ฅผ GitHub, GitLab ๋“ฑ์˜ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค์™€ ๊ฒฐํ•ฉํ•˜์—ฌ, ๋ฒ„๊ทธ ์—†๋Š” UI ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ํ˜‘์—… ๋ฐ ๊ฒ€์ฆ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ์ „๋žต์œผ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. - [[Feature-Sliced Design|Feature-Sliced Design]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋Šฅ(Feature) ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•  ๋•Œ, Storybook์„ ์ด์šฉํ•ด ๊ฐ ๊ธฐ๋Šฅ์˜ UI ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ฉ”์ธ ์•ฑ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์„ค๊ณ„ ์›์น™์œผ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. --- *Last updated: 2026-04-30*