# [[React Applications|React Applications]] ## πŸ“Œ Brief Summary ν˜„λŒ€ ν”„λ‘ νŠΈμ—”λ“œ μ—”μ§€λ‹ˆμ–΄λ§μ—μ„œ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 개발자 인체곡학(developer ergonomics)κ³Ό λΈŒλΌμš°μ € λŸ°νƒ€μž„ μ„±λŠ₯ κ°„μ˜ κ· ν˜•μ„ λ§žμΆ”κΈ° μœ„ν•΄ μ •κ΅ν•œ μ•„ν‚€ν…μ²˜λ₯Ό μš”κ΅¬ν•©λ‹ˆλ‹€ [1]. ν™•μž₯ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄μ„œλŠ” [[Tailwind CSS|Tailwind CSS]]와 Styled Components 같은 μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„μ˜ μž₯단점을 μ΄ν•΄ν•˜κ³ , λ””μžμΈ 토큰을 ν™œμš©ν•œ μΌκ΄€λœ ν…Œλ§ˆ ꡬ성과 μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈ 섀계가 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [2-4]. λ˜ν•œ, λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œλŠ” λͺ¨λ…Έλ ˆν¬(Monorepo) μ•„ν‚€ν…μ²˜μ™€ [[Feature-Sliced Design|Feature-Sliced Design]](FSD) 방법둠을 λ„μž…ν•˜κ³ , Next.js의 [[React Server Components|React Server Components]](RSC) λ Œλ”λ§ μ „λž΅μ— 맞좘 μ΅œμ ν™”κ°€ μ€‘μš”ν•˜κ²Œ 닀뀄지고 μžˆμŠ΅λ‹ˆλ‹€ [5-7]. ## πŸ“– Core Content - **μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„ (Tailwind CSS vs [[styled-components|styled-components]]):** Tailwind CSSλŠ” μœ ν‹Έλ¦¬ν‹° 퍼슀트(utility-first) μ ‘κ·Ό 방식을 μ·¨ν•˜λ©°, λΉŒλ“œ νƒ€μž„μ— 정적 CSSλ₯Ό μƒμ„±ν•˜μ—¬ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†κ³  λ²ˆλ“€ 크기가 μž‘μŠ΅λ‹ˆλ‹€(5~20kb) [2, 8-10]. 반면 Styled ComponentsλŠ” [[CSS-in-JS|CSS-in-JS]] 라이브러리둜, ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•΄ μ»΄ν¬λ„ŒνŠΈμ— μŠ€νƒ€μΌμ„ μΊ‘μŠν™”ν•˜μ§€λ§Œ λŸ°νƒ€μž„μ— JavaScriptλ₯Ό μ‹€ν–‰ν•˜μ—¬ CSSλ₯Ό μ£Όμž…ν•˜λ―€λ‘œ CPU 및 μ„±λŠ₯ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [10-13]. 특히 Styled ComponentsλŠ” React Context에 μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC) ν™˜κ²½κ³Ό 근본적으둜 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ μ œκΈ°λ˜μ–΄, RSCλ₯Ό μ§€μ›ν•˜λŠ” [[Next.js 15 App Router|Next.js 15 App Router]] ν™˜κ²½μ—μ„œλŠ” Tailwind CSSλ‚˜ 정적 CSS λͺ¨λ“ˆμ΄ 더 ꢌμž₯λ©λ‹ˆλ‹€ [14-18]. μ‹€μ œ κΈ°μ—… 사둀(예: Kiwi.com)μ—μ„œλŠ” Styled Componentsμ—μ„œ Tailwind CSS둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•œ κ²°κ³Ό, λͺ¨λ°”일 ν™˜κ²½μ—μ„œ First Input Delay(FID)κ°€ μ•½ 75.9% κ°μ†Œν•˜λŠ” λ“± [[Core Web Vitals|Core Web Vitals]] μ„±λŠ₯이 크게 ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€ [19, 20]. - **λ””μžμΈ 토큰([[Design Tokens|Design Tokens]])κ³Ό ν…Œλ§ˆ(Theming):** λ””μžμΈ 토큰은 색상, νƒ€μ΄ν¬κ·Έλž˜ν”Ό, 간격 λ“± UI의 κΈ°λ³Έ μ‹œκ°μ  DNAλ₯Ό 쀑앙 μ§‘μ€‘ν™”ν•˜μ—¬ 일관성을 μœ μ§€ν•˜κ³  ν™•μž₯을 μš©μ΄ν•˜κ²Œ ν•©λ‹ˆλ‹€ [3, 21, 22]. 효과적인 관리λ₯Ό μœ„ν•΄ 토큰은 μ›μ‹œ κ°’(Primitive tokens), λͺ©μ  기반의 μ‹œλ§¨ν‹± 토큰(Semantic tokens, 예: `color.primary`), νŠΉμ • μ»΄ν¬λ„ŒνŠΈμš© 토큰(Component tokens)의 μ„Έ κ°€μ§€ κ³„μΈ΅μœΌλ‘œ ꡬ쑰화해야 ν•©λ‹ˆλ‹€ [23-25]. μ΅œμ‹  [[Tailwind CSS v4|Tailwind CSS v4]]λŠ” JavaScript μ„€μ • λŒ€μ‹  CSS μš°μ„ (CSS-first) μ•„ν‚€ν…μ²˜μΈ `@theme` λ””λ ‰ν‹°λΈŒλ₯Ό μ±„νƒν•˜μ—¬, λ””μžμΈ 토큰을 λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜λ‘œ λ…ΈμΆœν•˜κ³  동적 ν…Œλ§ˆ μ „ν™˜(닀크 λͺ¨λ“œ λ“±)을 μ†μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€ [26-28]. - **μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈ 섀계 νŒ¨ν„΄:** React μ»΄ν¬λ„ŒνŠΈμ˜ μž¬μ‚¬μš©μ„±μ„ 높이렀면 단일 μ±…μž„ 원칙(Single Responsibility)을 μ€€μˆ˜ν•˜κ³ , 속성(prop)을 μ΅œμ†Œν™”ν•˜λ©° λͺ…ν™•ν•œ API 계약을 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€ [29, 30]. λ³΅μž‘ν•œ UIλ₯Ό λ‹€λ£° λ•ŒλŠ” μ—¬λŸ¬ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈ(`Accordion.Header`, `Accordion.Body` λ“±)κ°€ Contextλ₯Ό 톡해 μƒνƒœλ₯Ό μ•”μ‹œμ μœΌλ‘œ κ³΅μœ ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ ν•©μ„±([[Compound Components|Compound Components]]) νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ κΉŠμ€ 속성 전달("Prop Drilling")을 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [31-34]. 이 밖에도 λ§ˆν¬μ—… 없이 둜직만 μΊ‘μŠν™”ν•˜λŠ” ν—€λ“œλ¦¬μŠ€(Headless) μ»΄ν¬λ„ŒνŠΈλ‚˜ Uber의 Base Webμ—μ„œ μ‚¬μš©ν•˜λŠ” μ˜€λ²„λΌμ΄λ“œ(Overrides) νŒ¨ν„΄μ€ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€ μš”μ†Œμ˜ μŠ€νƒ€μΌκ³Ό κΈ°λŠ₯을 κ°œλ°œμžκ°€ 자유둭게 ꡐ체할 수 μžˆλ„λ‘ ν•˜μ—¬ 높은 ν™•μž₯성을 μ œκ³΅ν•©λ‹ˆλ‹€ [35-38]. λ˜ν•œ λ·° λ ˆμ΄μ–΄λ₯Ό μ›μž(Atoms), λΆ„μž(Molecules), 유기체(Organisms), ν…œν”Œλ¦Ώ(Templates), νŽ˜μ΄μ§€(Pages)둜 λ‚˜λˆ„λŠ” μ•„ν† λ―Ή λ””μžμΈ([[Atomic Design|Atomic Design]]) 방법둠은 μΌκ΄€λœ λ””μžμΈ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 데 맀우 νš¨κ³Όμ μž…λ‹ˆλ‹€ [39-41]. - **ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œ μ•„ν‚€ν…μ²˜ (Scalable [[Frontend|Frontend]] [[Architecture|Architecture]]):** λŒ€κ·œλͺ¨ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ˜μ‘΄μ„± 관리와 λΉŒλ“œ μ‹œκ°„ μ΅œμ ν™”λ₯Ό μœ„ν•΄ [[Turborepo|Turborepo]], Nx, pnpm workspaces 등을 ν™œμš©ν•˜λŠ” λͺ¨λ…Έλ ˆν¬(Monorepo) μ•„ν‚€ν…μ²˜λ₯Ό 자주 μ±„νƒν•©λ‹ˆλ‹€ [42-44]. λͺ¨λ…Έλ ˆν¬ λ‚΄λΆ€μ˜ μ½”λ“œλ₯Ό ꡬ성할 λ•ŒλŠ” Feature-Sliced Design(FSD) 방법둠을 μ μš©ν•˜μ—¬ μ½”λ“œλ₯Ό Shared, Entities, Features, Widgets, Pages, App λ“± λͺ…ν™•ν•œ κ³„μΈ΅μœΌλ‘œ λ‚˜λˆ„κ³ , μƒμœ„ κ³„μΈ΅μ—μ„œ ν•˜μœ„ κ³„μΈ΅μœΌλ‘œλ§Œ μ˜μ‘΄μ„±μ΄ 흐λ₯΄λ„둝 μ—„κ²©ν•œ 곡개 API(Public API) κ·œμΉ™μ„ κ°•μ œν•˜λŠ” 것이 μœ μ§€λ³΄μˆ˜μ„±μ— μœ λ¦¬ν•©λ‹ˆλ‹€ [6, 45, 46]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Tailwind CSS|Tailwind CSS]], Styled Components, Design Tokens, [[Compound Components|Compound Components]], Atomic Design, [[React Server Components|React Server Components]], Monorepo Architecture, [[Feature-Sliced Design|Feature-Sliced Design]] - **Projects/Contexts:** [[Next.js 15 App Router|Next.js 15 App Router]], Uber Base Web, [[Shopify Polaris|Shopify Polaris]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ Styled ComponentsλŠ” μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„μ˜ μΊ‘μŠν™”μ™€ 동적인 ν…Œλ§ˆ μ μš©μ— 맀우 κ°•λ ₯ν•˜μ§€λ§Œ, λ Œλ”λ§ μ‹œ JavaScript μ‹€ν–‰ λΉ„μš©(λŸ°νƒ€μž„ νƒμŠ€)이 λ°œμƒν•˜κ³  React [[Server Components|Server Components]](RSC) ν™˜κ²½μ—μ„œλŠ” μ›ν™œνžˆ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€ [12, 14, 47]. 반면 Tailwind CSSλŠ” μ„±λŠ₯κ³Ό λ²ˆλ“€ 크기 λ©΄μ—μ„œ 맀우 μš°μˆ˜ν•˜μ§€λ§Œ, μ—¬λŸ¬ μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€κ°€ 직접 μ‚½μž…λ¨μ— 따라 HTML λ§ˆν¬μ—…μ΄ μ§€μ €λΆ„ν•΄μ§€λŠ” "class soup" λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, μ μ ˆν•œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ 좔상화가 ν•„μˆ˜μ μ΄λΌκ³  κΆŒκ³ ν•©λ‹ˆλ‹€ [48-50]. --- *Last updated: 2026-04-26*