# [[React Frontend Architecture|React Frontend Architecture]] ## ๐Ÿ“Œ Brief Summary React ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋ฉฐ ๊ณ ์„ฑ๋Šฅ์ธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ ๋ฐ ์Šคํƒ€์ผ๋ง ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” [[Tailwind CSS|Tailwind CSS]]์™€ ๊ฐ™์€ ์ •์  ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€ styled-components์™€ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„ CSS-in-JS ์†”๋ฃจ์…˜ ๊ฐ„์˜ ์ „๋žต์  ์„ ํƒ์„ ํฌํ•จํ•˜๋ฉฐ, ํŠนํžˆ [[React Server Components|React Server Components]](RSC) ํ™˜๊ฒฝ์—์„œ์˜ ์„ฑ๋Šฅ๊ณผ ํ˜ธํ™˜์„ฑ์ด ํ•ต์‹ฌ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ๋ฉ๋‹ˆ๋‹ค. ๋”๋ถˆ์–ด Atomic Design, [[Compound Components|Compound Components]] ๋“ฑ์˜ ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ํŒจํ„ด๊ณผ ๋””์ž์ธ ํ† ํฐ, [[Feature-Sliced Design|Feature-Sliced Design]](FSD) ๊ธฐ๋ฐ˜์˜ ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๊ด€์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ“– Core Content * **์Šคํƒ€์ผ๋ง ํŒจ๋Ÿฌ๋‹ค์ž„ (Tailwind CSS vs styled-components):** * **Tailwind CSS:** ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ํƒ€์ž„์— ์ •์  CSS๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค [1-3]. v4์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌ์„ฑ ๋Œ€์‹  `@theme` ๋ฐ `@source` ๋””๋ ‰ํ‹ฐ๋ธŒ์™€ ๋„ค์ดํ‹ฐ๋ธŒ CSS ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” 'CSS-first' ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜์˜€์œผ๋ฉฐ, Rust ๊ธฐ๋ฐ˜ Oxide ์—”์ง„์„ ํ†ตํ•ด ๋นŒ๋“œ ์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค [4-6]. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ RSC(React [[Server Components|Server Components]]) ๋ฐ Next.js App Router์™€ ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ๋ณด์ด๋ฉฐ, styled-components์—์„œ Tailwind๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ์‚ฌ๋ก€์—์„œ๋Š” FID(First Input Delay) ๋ฐ INP(Interaction to Next Paint)์™€ ๊ฐ™์€ [[Core Web Vitals|Core Web Vitals]] ์ง€ํ‘œ๊ฐ€ ํš๊ธฐ์ ์œผ๋กœ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [7-11]. * **styled-components:** Tagged template literals๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ [[JavaScript|JavaScript]] ๋‚ด์—์„œ CSS๋ฅผ ์ •์˜ํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ์บก์Аํ™”ํ•ฉ๋‹ˆ๋‹ค [12-14]. ๋™์  ์Šคํƒ€์ผ๋ง์— ๋งค์šฐ ์œ ๋ฆฌํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์Šคํƒ€์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์ฃผ์ž…ํ•ด์•ผ ํ•˜๋ฏ€๋กœ CPU ๋ฐ JavaScript ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [3, 15, 16]. ๊ธฐ์กด ๋ฐฉ์‹์€ [[Context API|Context API]]์— ์˜์กดํ•˜์—ฌ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ํ™˜๊ฒฝ(RSC)๊ณผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์œผ๋‚˜ [17, 18], v6 ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด `createTheme`์„ ํ™œ์šฉํ•œ CSS ๋ณ€์ˆ˜ ํ…Œ๋งˆ ์‹œ์Šคํ…œ๊ณผ `stylisPluginRSC` ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋„์ž…ํ•˜์—ฌ RSC ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค [19-22]. * **ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜:** * **Atomic Design:** UI๋ฅผ ์›์ž(Atoms), ๋ถ„์ž(Molecules), ์œ ๊ธฐ์ฒด(Organisms), ํ…œํ”Œ๋ฆฟ(Templates), ํŽ˜์ด์ง€(Pages) ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ, ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์ผ๊ด€๋œ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ™•๋ฆฝํ•ฉ๋‹ˆ๋‹ค [23-26]. * **Compound Components (๋ณตํ•ฉ ์ปดํฌ๋„ŒํŠธ):** ๊ณผ๋„ํ•œ Prop ์ „๋‹ฌ๋กœ ์ธํ•œ ๊ตฌ์กฐ์  ์ทจ์•ฝ์ (Prop soup)์„ ๋ฐฉ์ง€ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค [27-29]. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ Context๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ(์˜ˆ: `Accordion.Header`, `Accordion.Body`)๋ฅผ ์กฐ๋ฆฝํ•˜์—ฌ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ ˆ์ด์•„์›ƒ์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค [28, 30, 31]. * **[[Headless Components|Headless Components]] & Overrides Pattern:** [[Headless UI|Headless UI]]๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ ‘๊ทผ์„ฑ ๋กœ์ง๋งŒ ์ œ๊ณตํ•˜๊ณ  ์‹œ๊ฐ์  ๋งˆํฌ์—…์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์™„์ „ํžˆ ์œ„์ž„ํ•˜์—ฌ ๋›ฐ์–ด๋‚œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [32-34]. ๋˜ํ•œ, Uber์˜ Base Web ๋“ฑ์—์„œ๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋‚ด๋ถ€ ํ•˜์œ„ ์š”์†Œ๊นŒ์ง€ ๋ฎ์–ด์“ฐ๊ธฐ(override)ํ•  ์ˆ˜ ์žˆ๋Š” Overrides Pattern์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ API์˜ ๋น„๋Œ€ํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [35-37]. * **๋””์ž์ธ ํ† ํฐ๊ณผ ๋™์  ํ…Œ๋งˆ ([[Design Tokens|Design Tokens]] & Theming):** * ๋””์ž์ธ ํ† ํฐ์€ ์ƒ‰์ƒ, ๊ฐ„๊ฒฉ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ๋“ฑ์˜ ์‹œ๊ฐ์  ๊ฒฐ์ •์„ ์ฝ”๋“œํ™”ํ•œ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›([[Single_Source_of_Truth|Single Source of Truth]])์ž…๋‹ˆ๋‹ค [38, 39]. ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์›์‹œ ํ† ํฐ(Primitive, ์˜ˆ: `#3366FF`), ๋ชฉ์ ์— ๋งž๊ฒŒ ๋งคํ•‘๋œ ์‹œ๋งจํ‹ฑ ํ† ํฐ(Semantic, ์˜ˆ: `color.primary`), ๊ฐœ๋ณ„ ์š”์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ํ† ํฐ(Component, ์˜ˆ: `button.background`)์˜ 3๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค [40-43]. * [[Style Dictionary|Style Dictionary]] ๋„๊ตฌ๋‚˜ Tailwind v4๋ฅผ ํ™œ์šฉํ•˜์—ฌ JSON/YAML ํ˜•ํƒœ์˜ ํ† ํฐ์„ React์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ CSS Custom Properties(CSS ๋ณ€์ˆ˜)๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด, ์ปดํฌ๋„ŒํŠธ ์ˆ˜์ • ์—†์ด ๋‹คํฌ ๋ชจ๋“œ ๋“ฑ ๋™์  ํ…Œ๋งˆ ์ ์šฉ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [44-47]. * **ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์กฐ์งํ™” (๋ชจ๋…ธ๋ ˆํฌ์™€ FSD):** * ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค์ˆ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ข…์†์„ฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋…ธ๋ ˆํฌ([[Monorepo|Monorepo]]) ์•„ํ‚คํ…์ฒ˜(pnpm workspaces, [[Turborepo|Turborepo]], Nx ๋“ฑ ์‚ฌ์šฉ)๋ฅผ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค [48-50]. * **[[Feature-Sliced Design (FSD)|Feature-Sliced Design (FSD]]:** ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ Shared, Entities, Features, Widgets, Pages, App์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ„์–ด ์˜์กด์„ฑ์„ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ํ†ต์ œํ•˜๊ณ , ๋‚ด๋ถ€ ์„ธ๋ถ€ ๊ตฌํ˜„์ด ํƒ€ ๋ชจ๋“ˆ๋กœ ์œ ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [51-53]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** `[[Tailwind CSS|Tailwind CSS]]`, `Styled Components`, `Atomic Design`, `[[Compound Components|Compound Components]]`, `Design Tokens`, `[[React Server Components (RSC)|React Server Components (RSC]]`, `[[Feature-Sliced Design (FSD)|Feature-Sliced Design (FSD]]` - **Projects/Contexts:** `[[Shopify Polaris|Shopify Polaris]]`, `Uber Base Web`, `Next.js App Router`, `[[Radix UI|Radix UI]]` - **Contradictions/Notes:** ์†Œ์Šค [54]์™€ [55]์—์„œ๋Š” [[Styled Components|Styled Components]]๊ฐ€ ํŠน์ • ๋ฒค์น˜๋งˆํฌ๋‚˜ ์†Œ๊ทœ๋ชจ ์•ฑ์—์„œ ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์†Œ์Šค [56], [9], [10]๋Š” ์‹ค์ œ ๋Œ€๊ทœ๋ชจ ๋ Œ๋”๋ง ํ…Œ์ŠคํŠธ์™€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ Tailwind CSS๊ฐ€ Styled Components๋ณด๋‹ค ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†์œผ๋ฉฐ Core Web Vitals(FID, INP) ๋ฐ ์„œ๋ฒ„ CPU ์ง€์—ฐ ์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ ์••๋„์ ์œผ๋กœ ์šฐ์ˆ˜ํ•˜๋‹ค๊ณ  ์ƒ๋ฐ˜๋˜๊ฒŒ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์†Œ์Šค [17]์€ ๊ธฐ์กด CSS-in-JS๊ฐ€ React Server Components์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ง€์ ํ•˜์ง€๋งŒ, ์†Œ์Šค [21], [22]์€ [[Styled Components v6|Styled Components v6]] ์—…๋ฐ์ดํŠธ์—์„œ ์ธ๋ผ์ธ ์Šคํƒ€์ผ ์‚ฝ์ž… ๋ฐฉ์‹๊ณผ `stylisPluginRSC`๋ฅผ ๋„์ž…ํ•˜์—ฌ RSC ํ™˜๊ฒฝ์„ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๊ณ  ๋ง๋ถ™์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. --- *Last updated: 2026-04-26*