# [[Next.js App Router Styling Strategies|Next.js App Router Styling Strategies]] ## πŸ“Œ Brief Summary [[Next.js App Router|Next.js App Router]]의 λ„μž…κ³Ό React Server Components(RSC)의 μ‚¬μš©μ€ ν”„λ‘ νŠΈμ—”λ“œ μŠ€νƒ€μΌλ§ μ „λž΅μ— 큰 λ³€ν™”λ₯Ό κ°€μ Έμ™”μŠ΅λ‹ˆλ‹€ [1, 2]. 기쑴의 λŸ°νƒ€μž„ 기반 CSS-in-JS λΌμ΄λΈŒλŸ¬λ¦¬λŠ” RSCμ™€μ˜ λΉ„ν˜Έν™˜μ„± 문제둜 인해 μƒˆλ‘œμš΄ ν‘œμ€€μ—μ„œ μ‚¬μš©μ΄ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [1, 3]. κ·Έ λŒ€μ‹  [[Tailwind CSS|Tailwind CSS]], CSS Modules, 그리고 `[[vanilla-extract|vanilla-extract]]`와 같은 제둜 λŸ°νƒ€μž„(Zero-runtime) μ†”λ£¨μ…˜λ“€μ΄ μœ μ§€λ³΄μˆ˜μ„±κ³Ό μ„±λŠ₯을 확보할 수 μžˆλŠ” 핡심 μ „λž΅μœΌλ‘œ 자리 μž‘μ•˜μŠ΅λ‹ˆλ‹€ [3, 4]. ## πŸ“– Core Content - **React [[Server Components|Server Components]](RSC)μ™€μ˜ ν˜Έν™˜μ„± 문제** [[Next.js|Next.js]] App Router의 μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλŠ” λΈŒλΌμš°μ €κ°€ μ•„λ‹Œ μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜λ©° HTML을 μŠ€νŠΈλ¦¬λ°ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€ [2]. λ”°λΌμ„œ React Context에 μ˜μ‘΄ν•˜μ—¬ λŸ°νƒ€μž„μ— CSSλ₯Ό μƒμ„±ν•˜κ³  μ£Όμž…ν•˜λŠ” `[[styled-components|styled-components]]`λ‚˜ `Emotion` 같은 CSS-in-JS λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ ν™˜κ²½μ—μ„œ 근본적으둜 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [1, 2]. 이둜 인해 λŸ°νƒ€μž„ CSS-in-JSλŠ” App Router ν”„λ‘œμ νŠΈμ—μ„œ μ„±λŠ₯ 병λͺ© ν˜„μƒμ„ μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1]. - **App Router에 ꢌμž₯λ˜λŠ” μŠ€νƒ€μΌλ§ μ†”λ£¨μ…˜** 2025λ…„ κΈ°μ€€ Next.js App Routerλ₯Ό μ‚¬μš©ν•˜λŠ” μ‹ κ·œ ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ‹€μŒκ³Ό 같은 제둜 λŸ°νƒ€μž„ 방식듀이 κ°•λ ₯ν•˜κ²Œ ꢌμž₯λ©λ‹ˆλ‹€ [3]. - **Tailwind CSS & CSS Modules**: μ€‘μ†Œκ·œλͺ¨ μ•± λ˜λŠ” λ³΅μž‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜/μŠ€νƒ€μΌ μ œμ–΄κ°€ ν•„μš”ν•œ 경우 각각 κ°€μž₯ μ ν•©ν•œ 선택지이며, λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œ 없이 RSC와 100% ν˜Έν™˜λ©λ‹ˆλ‹€ [3, 4]. - **[[Zero-Runtime CSS-in-JS|Zero-Runtime CSS-in-JS]]**: λ‹€μˆ˜μ˜ ν…Œλ§ˆλ₯Ό μ μš©ν•΄μ•Ό ν•˜λŠ” λŒ€κ·œλͺ¨ λ””μžμΈ μ‹œμŠ€ν…œμ—μ„œλŠ” `vanilla-extract`κ°€ 쒋은 λŒ€μ•ˆμž…λ‹ˆλ‹€ [3]. μ΄λŠ” TypeScript 기반의 νƒ€μž… μ•ˆμ „μ„±μ„ μ œκ³΅ν•˜λ©΄μ„œλ„ λΉŒλ“œ νƒ€μž„μ— 정적 CSSλ₯Ό μƒμ„±ν•˜μ—¬ RSC ν™˜κ²½κ³Ό μ™„λ²½νžˆ ν˜Έν™˜λ©λ‹ˆλ‹€ [3, 4]. - **μœ μ§€λ³΄μˆ˜ κ°€λŠ₯ν•œ ν™•μž₯적(Scalable) ν”„λ‘œμ νŠΈ ꡬ쑰 섀계** App Routerλ₯Ό μ‚¬μš©ν•  λ•Œ 규λͺ¨κ°€ 컀짐에 따라 μŠ€νƒ€μΌκ³Ό μ»΄ν¬λ„ŒνŠΈ 관리가 μ–΄λ €μ›Œμ§€λŠ” 것을 막기 μœ„ν•΄μ„œλŠ” κΈ°λŠ₯ μ£Όλ„ν˜•(Feature-Driven) μ•„ν‚€ν…μ²˜λ₯Ό 채택해야 ν•©λ‹ˆλ‹€ [5]. - `app/` λ””λ ‰ν„°λ¦¬λŠ” λΌμš°νŒ…κ³Ό λ ˆμ΄μ•„μ›ƒ 처리 λͺ©μ μœΌλ‘œλ§Œ μ΅œμ†Œν™”ν•˜μ—¬ μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€ [6, 7]. - λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 μ‹€μ œ UI μ»΄ν¬λ„ŒνŠΈ λ””μžμΈμ€ λ„λ©”μΈλ³„λ‘œ λΆ„λ₯˜ν•˜μ—¬ `src/features/` ν•˜μœ„ ν΄λ”λ‘œ μ΄λ™μ‹œμΌœ 관심사λ₯Ό 뢄리해야 ν™•μž₯성을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€ [5, 7, 8]. - μƒλŒ€ κ²½λ‘œκ°€ μ§€μ €λΆ„ν•΄μ§€λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ `tsconfig.json`의 경둜 별칭(Path aliases)을 ν™œμš©ν•΄ `@/components/ui/Button` 같은 μ ˆλŒ€ 경둜(Absolute Imports)λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 클린 μ½”λ“œλ₯Ό μœ μ§€ν•˜λŠ” 데 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [9, 10]. ## πŸ”— Knowledge Connections - **Related Topics:** [[React Server Components|React Server Components]], Tailwind CSS, CSS Modules, [[Zero-Runtime CSS-in-JS|Zero-runtime CSS-in-JS]], [[Feature-Driven Architecture|Feature-Driven Architecture]] - **Projects/Contexts:** Next.js Scalable [[Architecture|Architecture]], App Router Migration - **Contradictions/Notes:** κΈ°μ‘΄ Next.js Pages Router ν™˜κ²½μ—μ„œλŠ” `styled-components`λ‚˜ `Emotion` 기반의 CSS-in-JSκ°€ λ¬Έμ œμ—†μ΄ μž‘λ™ν•˜κ³  λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•  ν•„μš”κ°€ μ—†μ§€λ§Œ, App Router ν™˜κ²½μœΌλ‘œ μ „ν™˜ν•  λ•Œμ—λŠ” ꡬ쑰적 ν•œκ³„λ‘œ 인해 Tailwind CSS, CSS Modules λ˜λŠ” `vanilla-extract` 쀑 ν•˜λ‚˜λ‘œ μŠ€νƒ€μΌλ§ 방식을 μ „ν™˜ν•  것을 λ°˜λ“œμ‹œ κ³„νšν•΄μ•Ό ν•©λ‹ˆλ‹€ [3]. --- *Last updated: 2026-04-26*