# [[Scalable Frontend Systems|Scalable FrontendSystems]] ## ๐Ÿ“Œ Brief Summary ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์‹œ์Šคํ…œ(Scalable Frontend Systems)์€ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ํŒ€ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€์„ฑ, ์„ฑ๋Šฅ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์•„ํ‚คํ…์ฒ˜์™€ ์Šคํƒ€์ผ๋ง ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ์ด์ฒด์ž…๋‹ˆ๋‹ค [1]. ์ด๋Š” ์•„ํ† ๋ฏน ๋””์ž์ธ๊ณผ ์ปดํŒŒ์šด๋“œ ์ปดํฌ๋„ŒํŠธ ๊ฐ™์€ ์žฌ์‚ฌ์šฉ ๋ฐ ํ™•์žฅ์ด ์šฉ์ดํ•œ UI ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์„ ์ฑ„ํƒํ•˜๊ณ , ๋ชจ๋…ธ๋ ˆํฌ์™€ ๊ธฐ๋Šฅ ๋ถ„ํ•  ์„ค๊ณ„([[Feature-Sliced Design|Feature-Sliced Design]])๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์˜์กด์„ฑ์„ ์—„๊ฒฉํžˆ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [2-5]. ๋˜ํ•œ ๋””์ž์ธ ํ† ํฐ์„ ํ™œ์šฉํ•œ ์ฒด๊ณ„์ ์ธ ํ…Œ๋งˆ ๊ด€๋ฆฌ์™€ [[Tailwind CSS|Tailwind CSS]]์™€ ๊ฐ™์€ ๋นŒ๋“œ ํƒ€์ž„ ๊ธฐ๋ฐ˜์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„  ์Šคํƒ€์ผ๋ง์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋›ฐ์–ด๋‚œ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ๊ณผ ์ ‘๊ทผ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค [6, 7]. ## ๐Ÿ“– Core Content * **์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ ํŒจํ„ด** * **์•„ํ† ๋ฏน ๋””์ž์ธ ([[Atomic Design|Atomic Design]]):** ๋ธŒ๋ž˜๋“œ ํ”„๋กœ์ŠคํŠธ(Brad Frost)๊ฐ€ ์ œ์•ˆํ•œ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ, UI๋ฅผ ์›์ž(Atoms), ๋ถ„์ž(Molecules), ์œ ๊ธฐ์ฒด(Organisms), ํ…œํ”Œ๋ฆฟ(Templates), ํŽ˜์ด์ง€(Pages)์˜ ๊ณ„์ธต์œผ๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ์ผ๊ด€๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค [2, 8, 9]. * **์ปดํŒŒ์šด๋“œ ์ปดํฌ๋„ŒํŠธ ([[Compound Components|Compound Components]]):** ์•„์ฝ”๋””์–ธ์ด๋‚˜ ํƒญ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ UI์—์„œ ๋‹ค์ˆ˜์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋“ค์ด [[React Context|React Context]]๋ฅผ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ๊ณต์œ ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค [3, 10, 11]. ์ด๋Š” ๊ณผ๋„ํ•œ Prop-drilling์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ ˆ์ด์•„์›ƒ ๋ฐ ๊ตฌ์„ฑ์˜ ์œ ์—ฐ์„ฑ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [12, 13]. * **ํ—ค๋“œ๋ฆฌ์Šค ์ปดํฌ๋„ŒํŠธ ([[Headless Components|Headless Components]]):** ์ƒํƒœ ๊ด€๋ฆฌ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ์ ‘๊ทผ์„ฑ(A11y) ๊ธฐ๋Šฅ๋งŒ ์บก์Аํ™”ํ•˜๊ณ  ์‹œ๊ฐ์  ๋งˆํฌ์—…๊ณผ ์Šคํƒ€์ผ๋ง์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์™„์ „ํžˆ ์œ„์ž„ํ•˜์—ฌ ํŠน์ • ๋””์ž์ธ ์‹œ์Šคํ…œ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ๊ณ ๋„์˜ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [14-16]. * **์˜ค๋ฒ„๋ผ์ด๋“œ ํŒจํ„ด ([[Overrides Pattern|Overrides Pattern]]):** Uber์˜ Base Web ๋“ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด์œผ๋กœ, ์ˆ˜๋งŽ์€ Prop์„ ์ „๋‹ฌํ•˜๋Š” ๋Œ€์‹  ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ํŠน์ • ํ•˜์œ„ ์š”์†Œ๋ฅผ ํƒ€๊ฒŸํŒ…ํ•˜์—ฌ ์†์„ฑ์ด๋‚˜ ์Šคํƒ€์ผ์„ ์™„์ „ํžˆ ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค [17-19]. * **์Šคํƒ€์ผ๋ง ์ ‘๊ทผ๋ฒ• (Tailwind CSS vs [[styled-components|styled-components]])** * **Styled-components ([[CSS-in-JS|CSS-in-JS]]):** ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์— ์Šคํƒ€์ผ์„ ์ž‘์„ฑํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์™€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ์‹œํ‚ค๊ณ  Prop ๊ธฐ๋ฐ˜์˜ ๋™์  ์Šคํƒ€์ผ๋ง์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [20, 21]. ๊ทธ๋Ÿฌ๋‚˜ ๋Ÿฐํƒ€์ž„์— ์Šคํƒ€์ผ ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑ ๋ฐ ์ฃผ์ž…ํ•ด์•ผ ํ•˜๋ฏ€๋กœ CPU ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Next.js์˜ App Router ๋ฐ React Server Components (RSC ํ™˜๊ฒฝ์—์„œ๋Š” ์„œ๋ฒ„ ๋‹จ์— Context๊ฐ€ ์—†์–ด ๋ณ„๋„์˜ [[Style Registry|Style Registry]]๋ฅผ ์šฐํšŒ์ ์œผ๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ํ˜ธํ™˜์„ฑ ์ด์Šˆ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [22-24]. * **Tailwind CSS (Utility-first):** ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ €์ˆ˜์ค€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์กฐํ•ฉํ•ด ์Šคํƒ€์ผ๋งํ•˜๋ฉฐ, JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋นŒ๋“œ ํƒ€์ž„์— ์‚ฌ์šฉ๋œ CSS๋งŒ ์ •์ ์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [7, 25, 26]. ๋Ÿฐํƒ€์ž„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋น„์šฉ์ด '0'์— ์ˆ˜๋ ดํ•˜๋ฏ€๋กœ ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ๋Œ€ํญ ์ถ•์†Œ๋˜๋ฉฐ [[Core Web Vitals|Core Web Vitals]](FID, INP ๋“ฑ) ์ง€ํ‘œ๊ฐ€ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค [7, 27, 28]. Tailwind v4๋Š” `@theme` ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•ด CSS ๋ณ€์ˆ˜ ๊ธฐ๋ฐ˜์˜ ์„ค๊ณ„๋กœ ์ „ํ™˜๋˜์–ด ๋นŒ๋“œ ์†๋„์™€ ์„ฑ๋Šฅ์„ ํ•œ์ธต ๋” ๋Œ์–ด์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค [29, 30]. * **๋””์ž์ธ ํ† ํฐ๊ณผ ์Šค์ผ€์ผ๋ง** * ๋””์ž์ธ ํ† ํฐ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ๊ฐ์  DNA(์ƒ‰์ƒ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ๊ฐ„๊ฒฉ ๋“ฑ)๋ฅผ ์ •์˜ํ•˜๋Š” ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›([[Single_Source_of_Truth|Single Source of Truth]])์ž…๋‹ˆ๋‹ค [6, 31]. * ํšจ๊ณผ์ ์ธ ํ™•์žฅ์„ ์œ„ํ•ด ํ† ํฐ์€ ์›์‹œ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” **๊ธฐ๋ณธ ํ† ํฐ(Base/Primitive Tokens)**, ๋งฅ๋ฝ๊ณผ ์˜๋„๋ฅผ ๋‹ด์€ **์‹œ๋งจํ‹ฑ ํ† ํฐ(Semantic Tokens)**, ํŠน์ • UI ๋ณ€ํ˜•์— ๋งคํ•‘๋œ **์ปดํฌ๋„ŒํŠธ ํ† ํฐ(Component Tokens)** ๋“ฑ ์„ธ ๊ฐ€์ง€ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [32-34]. * ํ† ํฐ์€ JSON์ด๋‚˜ YAML๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, [[Style Dictionary|Style Dictionary]] ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์šฉ ์ฝ”๋“œ(CSS ๋ณ€์ˆ˜ ๋“ฑ)๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜์–ด ๋ผ์ดํŠธ/๋‹คํฌ ๋ชจ๋“œ์™€ ๊ฐ™์€ ๋™์  ํ…Œ๋งˆ ๊ต์ฒด๋ฅผ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [35-37]. * **ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ตฌ์กฐ** * **๋ชจ๋…ธ๋ ˆํฌ ([[Monorepo|Monorepo]]):** ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹จ์ผ ์ €์žฅ์†Œ์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ ์›์ž์  ๋ฆฌํŒฉํ† ๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. pnpm workspaces, [[Turborepo|Turborepo]], Nx ๋“ฑ์˜ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€ ๊ฐ„ ์ข…์†์„ฑ๊ณผ ๊ณต์šฉ API ์ฐธ์กฐ ๊ทœ์น™์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 38, 39]. * **๊ธฐ๋Šฅ ๋ถ„ํ•  ์„ค๊ณ„ (Feature-Sliced Design, FSD):** ์ฝ”๋“œ๋ฅผ Shared, Entities, Features, Widgets, Pages, App์˜ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๋„๋ฉ”์ธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋ชจ๋“ˆ ๋‚ด ์‘์ง‘๋„๋ฅผ ๋†’์—ฌ ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋„ ๋ช…ํ™•ํ•œ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [5, 40]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Tailwind CSS|Tailwind CSS]], Styled-components, Design Tokens, [[Atomic Design|Atomic Design]], Compound Components, [[Headless Components|Headless Components]], React Server Components, Monorepo, [[Feature-Sliced Design|Feature-Sliced Design]] - **Projects/Contexts:** [[Shopify Polaris|Shopify Polaris]], Uber Base Web, [[Next.js App Router|Next.js App Router]] - **Contradictions/Notes:** ์†Œ์Šค ๋น„๊ต์— ๋”ฐ๋ฅด๋ฉด, Styled-components๋Š” ์ปดํฌ๋„ŒํŠธ์™€ ์Šคํƒ€์ผ์„ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ DX๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ํ•œ๊ณ„์™€ RSC ํ™˜๊ฒฝ์˜ ์ œ์•ฝ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Tailwind CSS์™€ ๊ฐ™์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„  ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋งˆํฌ์—…์ด ์žฅํ™ฉํ•ด์ง€๋Š”(Class Soup) ๋‹จ์ ์ด ์žˆ์œผ๋‚˜, ์ œ๋กœ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ์šฐ์ˆ˜ํ•œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ๋•๋ถ„์— ๊ทœ๋ชจ๊ฐ€ ํฌ๊ณ  ํผํฌ๋จผ์Šค๊ฐ€ ์ค‘์š”ํ•œ ํ˜„๋Œ€์˜ React ์•„ํ‚คํ…์ฒ˜์—์„œ ๋”์šฑ ์„ ํ˜ธ๋˜๋Š” ์ถ”์„ธ์ž…๋‹ˆ๋‹ค [7, 23, 28, 41]. --- *Last updated: 2026-04-26*