# [[Modern Scalable Frontend Architecture|Modern Scalable Frontend Architecture]] ## ๐Ÿ“Œ Brief Summary ํ˜„๋Œ€์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ณ ์„ฑ๋Šฅ ๋Ÿฐํƒ€์ž„ ์ตœ์ ํ™”, ๋ชจ๋“ˆ์‹ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ, ์ค‘์•™ ์ง‘์ค‘ํ™”๋œ ๋””์ž์ธ ํ† ํฐ ์‹œ์Šคํ…œ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [1, 2]. React ์ƒํƒœ๊ณ„๊ฐ€ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(RSC) ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜๋จ์— ๋”ฐ๋ผ [[CSS-in-JS|CSS-in-JS]]์—์„œ Tailwind CSS์™€ ๊ฐ™์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ๋นŒ๋“œ ํƒ€์ž„ ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง์œผ๋กœ์˜ ์ด๋™์ด ๋‘๋“œ๋Ÿฌ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [1, 3, 4]. ๋˜ํ•œ Atomic Design, ๋ณตํ•ฉ ์ปดํฌ๋„ŒํŠธ([[Compound Components|Compound Components]]) ํŒจํ„ด๊ณผ ๋ชจ๋…ธ๋ ˆํฌ(Monorepo) ๋ฐ [[Feature-Sliced Design|Feature-Sliced Design]](FSD) ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ํ™•์žฅ์„ฑ๊ณผ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [5-7]. ## ๐Ÿ“– Core Content **1. ์Šคํƒ€์ผ๋ง ํŒจ๋Ÿฌ๋‹ค์ž„: [[styled-components|styled-components]] vs Tailwind CSS** * **Styled-components์˜ ํ•œ๊ณ„:** Styled-components์™€ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„ CSS-in-JS๋Š” ๋™์ ์ธ ์Šคํƒ€์ผ๋ง๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ์šฐ์ˆ˜ํ•œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €์—์„œ [[JavaScript|JavaScript]]๋ฅผ ์‹คํ–‰ํ•ด ์Šคํƒ€์ผ์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [4, 8, 9]. ํŠนํžˆ React Context์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ์ •์  HTML์„ ๋ Œ๋”๋งํ•˜๋Š” [[React Server Components|React Server Components]](RSC)์™€ ๋ณธ์งˆ์ ์œผ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [3, 10]. * **Tailwind CSS์˜ ์„ฑ๋Šฅ ์šฐ์œ„:** Tailwind CSS๋Š” ๋นŒ๋“œ ํƒ€์ž„์— ์ •์  CSS๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„ (Utility-first) ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†๊ณ  RSC์™€ ๋›ฐ์–ด๋‚œ ํ˜ธํ™˜์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค [4, 11]. JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋œ ํด๋ž˜์Šค๋งŒ ๋ฒˆ๋“ค์— ํฌํ•จํ•˜๋ฏ€๋กœ [[Core Web Vitals|Core Web Vitals]] ์ตœ์ ํ™”์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [4, 12]. ์˜ˆ๋ฅผ ๋“ค์–ด, Kiwi.com์˜ ๊ฒฝ์šฐ Styled-components์—์„œ Tailwind๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ํ›„ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ FID(First Input Delay)๋ฅผ 75.9%, INP(Interaction to Next Paint)๋ฅผ 58.4% ์ค„์ด๋Š” ๊ทน์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค [13, 14]. * **Tailwind v4์˜ ์ง„ํ™”:** ์ƒˆ๋กœ์šด Tailwind v4๋Š” JavaScript ๊ธฐ๋ฐ˜์˜ ์„ค์ •์—์„œ ๋ฒ—์–ด๋‚˜ ๋„ค์ดํ‹ฐ๋ธŒ CSS ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” "CSS-first" ์•„ํ‚คํ…์ฒ˜(@theme ์ง€์‹œ์–ด ์‚ฌ์šฉ)๋ฅผ ๋„์ž…ํ•˜์˜€์œผ๋ฉฐ, Rust ๊ธฐ๋ฐ˜์˜ Oxide ์—”์ง„์„ ํ†ตํ•ด ๋นŒ๋“œ ์†๋„๋ฅผ 10๋ฐฐ ์ด์ƒ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค [15-17]. **2. ํ™•์žฅ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ํŒจํ„ด** * **๋ณตํ•ฉ ์ปดํฌ๋„ŒํŠธ (Compound Components):** ๋‹จ์ผ ์ปดํฌ๋„ŒํŠธ์— ์ˆ˜๋งŽ์€ Prop์„ ์ „๋‹ฌํ•˜๋Š” ๋Œ€์‹ , `Accordion.Item`, `Accordion.Header`์ฒ˜๋Ÿผ ๊ด€๋ จ๋œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์ด React Context๋ฅผ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ์•”์‹œ์ ์œผ๋กœ ๊ณต์œ ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค [5, 18, 19]. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ ˆ์ด์•„์›ƒ์„ ์ž์œ ๋กญ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉด์„œ๋„ ๋กœ์ง์˜ ์€๋‹‰์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [20, 21]. * **[[Headless Components|Headless Components]]:** ๋กœ์ง(์ƒํƒœ ๊ด€๋ฆฌ, ์ ‘๊ทผ์„ฑ ๋“ฑ)๋งŒ์„ ์ œ๊ณตํ•˜๊ณ  ์‹œ๊ฐ์  ๋งˆํฌ์—…์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•˜๋„๋ก ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค [22, 23]. Tailwind CSS์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ์— ์ข…์†๋˜์ง€ ์•Š๋Š” ๊ณ ๋„๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•๋œ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [22]. * **Atomic Design:** UI๋ฅผ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ธ ์›์ž(Atoms)๋ถ€ํ„ฐ ๋ถ„์ž(Molecules), ์œ ๊ธฐ์ฒด(Organisms), ํ…œํ”Œ๋ฆฟ(Templates), ํŽ˜์ด์ง€(Pages)๋กœ ๊ณ„์ธตํ™”ํ•˜์—ฌ ์กฐ๋ฆฝํ•˜๋Š” ๋ชจ๋ธ๋กœ, ์ผ๊ด€์„ฑ ์žˆ๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ผˆ๋Œ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค [24-26]. * **[[Overrides Pattern|Overrides Pattern]]:** Uber์˜ Base Web ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ, ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•œ ์‹๋ณ„์ž๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํ•„์š” ์‹œ ๊ธฐ๋ณธ ์Šคํƒ€์ผ๊ณผ ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๋ฎ์–ด์”Œ์šธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํŒจํ„ด์ž…๋‹ˆ๋‹ค [27-29]. **3. ๋””์ž์ธ ํ† ํฐ([[Design Tokens|Design Tokens]])๊ณผ ๋™์  ํ…Œ๋งˆ** * ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ์œ„ํ•ด ์ƒ‰์ƒ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ์—ฌ๋ฐฑ ๋“ฑ์˜ ์‹œ๊ฐ์  ์†์„ฑ์„ **์›์‹œ ํ† ํฐ(Primitive Tokens)**(์˜ˆ: `color.blue.500`), **์‹œ๋งจํ‹ฑ ํ† ํฐ(Semantic Tokens)**(์˜ˆ: `color.primary`), **์ปดํฌ๋„ŒํŠธ ํ† ํฐ**์œผ๋กœ ๋‚˜๋ˆ„์–ด 3๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [30-33]. * ์ด๋Ÿฌํ•œ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„ ์‹œ๋งจํ‹ฑ ํ† ํฐ์˜ ์ฐธ์กฐ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•˜์—ฌ ๋‹คํฌ ๋ชจ๋“œ, ๊ณ ๋Œ€๋น„ ๋ชจ๋“œ, ๋‹ค์–‘ํ•œ ๋ธŒ๋žœ๋“œ ํ…Œ๋งˆ๋ฅผ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [34-36]. ํ† ํฐ์€ [[Style Dictionary|Style Dictionary]] ๋“ฑ์„ ์ด์šฉํ•ด JSON ํ˜•์‹์—์„œ CSS ๋ณ€์ˆ˜ ๋“ฑ์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜์—ฌ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›([[Single_Source_of_Truth|Single Source of Truth]])์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [37, 38]. **4. ๋ชจ๋…ธ๋ ˆํฌ์™€ ๊ตฌ์กฐ์  ์•„ํ‚คํ…์ฒ˜** * **Monorepo ๋„๊ตฌ:** ๋Œ€๊ทœ๋ชจ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” [[Turborepo|Turborepo]], Nx, pnpm workspaces๋ฅผ ํ™œ์šฉํ•œ ๋ชจ๋…ธ๋ ˆํฌ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ฑ„ํƒ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ณตํ†ต ๋„๊ตฌ(Lint, TS Config)๋ฅผ ๋‹จ์ผํ™”ํ•˜๊ณ  ์˜์กด์„ฑ ์บ์‹ฑ์„ ํ™œ์šฉํ•ด CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋นŒ๋“œ ์†๋„๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค [6, 39, 40]. * **[[Feature-Sliced Design (FSD)|Feature-Sliced Design (FSD]]:** ์ฝ”๋“œ๋ฅผ Shared, Entities, Features, Widgets, Pages, App์˜ 6๊ฐ€์ง€ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์ƒ์œ„ ๊ณ„์ธต์—์„œ ํ•˜์œ„ ๊ณ„์ธต์œผ๋กœ๋งŒ ์˜์กด์„ฑ์ด ํ๋ฅด๋„๋ก ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์ด ์—„๊ฒฉํ•œ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๊ทœ์น™์€ ๋Œ€๊ทœ๋ชจ ํŒ€ ํ˜‘์—… ์‹œ ์•„ํ‚คํ…์ฒ˜์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ž…๋‹ˆ๋‹ค [7, 41, 42]. * **๊ฑฐ๋ฒ„๋„Œ์Šค์™€ ์ž๋™ํ™”:** Uber๋Š” UI ์ปดํฌ๋„ŒํŠธ์˜ ์‹ค์ œ ์‚ฌ์šฉ ๋น„์œจ์„ ๊ฐ์ง€ํ•˜๋Š” ์˜ต์ €๋ฒ„๋นŒ๋ฆฌํ‹ฐ ๋„๊ตฌ(Base Counter)์™€, [[Figma|Figma]] ์ฝ˜์†” MCP๋ฅผ ์ด์šฉํ•ด AI ์—์ด์ „ํŠธ๊ฐ€ ๋””์ž์ธ ์ŠคํŽ™ ๋ฌธ์„œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด ๋Œ€๊ทœ๋ชจ ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค์™€ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค [43-46]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Tailwind CSS|Tailwind CSS]], Styled-components, React Server Components (RSC, [[Compound Components|Compound Components]], Atomic Design, Design Tokens, [[Monorepo|Monorepo]], [[Feature-Sliced Design (FSD)|Feature-Sliced Design (FSD]] - **Projects/Contexts:** [[Next.js 15 App Router|Next.js 15 App Router]], Kiwi.com Migration, Uber Base Web, [[Shopify Polaris|Shopify Polaris]] - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด Styled-components๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๋™์  ์Šคํƒ€์ผ๋ง์— ํ›Œ๋ฅญํ•œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜์ง€๋งŒ [8, 47], [[React Server Components (RSC)|React Server Components (RSC]]์—์„œ Context ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„์™€ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ๋กœ ์ธํ•ด 2025๋…„ ์ดํ›„์˜ ์ƒˆ๋กœ์šด Next.js ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋นŒ๋“œ ํƒ€์ž„์— ์ž‘๋™ํ•˜๋Š” Tailwind CSS, CSS Modules, ๋˜๋Š” [[Zero-Runtime CSS-in-JS|Zero-Runtime CSS-in-JS]]([[vanilla-extract|vanilla-extract]])์˜ ์‚ฌ์šฉ์ด ๊ฐ•ํ•˜๊ฒŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [4, 9, 10, 48]. --- *Last updated: 2026-04-26*