# [[Next.js 15|Next.js 15]] ## πŸ“Œ Brief Summary [[Next.js|Next.js]] 15λŠ” React Server Components(RSC)λ₯Ό ν•΅μ‹¬μœΌλ‘œ ν•˜λŠ” App Routerλ₯Ό λ„μž…ν•˜μ—¬ ν”„λ‘ νŠΈμ—”λ“œ μ•„ν‚€ν…μ²˜μ™€ λ Œλ”λ§ 방식에 νŒ¨λŸ¬λ‹€μž„ μ „ν™˜μ„ κ°€μ Έμ˜¨ ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€ [1]. μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ™€ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ˜ λͺ…ν™•ν•œ 뢄리λ₯Ό 톡해 μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ 크기λ₯Ό 쀄이고 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 데 쀑점을 λ‘‘λ‹ˆλ‹€ [2-4]. μ΄λŸ¬ν•œ λ³΅μž‘ν•œ μ‹€ν–‰ λͺ¨λΈμ˜ λ„μž…μœΌλ‘œ 인해, ν”„λ‘œμ νŠΈμ˜ μ„±λŠ₯을 κ²°μ •μ§“λŠ” Styled Componentsλ‚˜ [[Tailwind CSS|Tailwind CSS]] 같은 μŠ€νƒ€μΌλ§ 접근법과 μ»΄ν¬λ„ŒνŠΈ ꡬ쑰 섀계에 λŒ€ν•œ μž¬ν‰κ°€κ°€ ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λ©λ‹ˆλ‹€ [5, 6]. ## πŸ“– Core Content * **App Router와 μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ 기반 μ•„ν‚€ν…μ²˜:** Next.js 15의 App RouterλŠ” μ»΄ν¬λ„ŒνŠΈκ°€ λΈŒλΌμš°μ €λ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ „μ†‘ν•˜μ§€ μ•Šκ³  μ„œλ²„μ—μ„œ λ…μ μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” React [[Server Components|Server Components]](RSC) λͺ¨λΈμ„ μ‚¬μš©ν•©λ‹ˆλ‹€ [2]. μƒνƒœ κ΄€λ¦¬λ‚˜ 이벀트 ν•Έλ“€λŸ¬ λ“± μƒν˜Έμž‘μš©μ΄ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ»΄ν¬λ„ŒνŠΈ μ΅œμƒλ‹¨μ— `'use client'` μ§€μ‹œμ–΄λ₯Ό μ„ μ–Έν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈ 경계λ₯Ό μ„€μ •ν•˜κ³ , 이 λΆ€λΆ„μ—μ„œλ§Œ ν•˜μ΄λ“œλ ˆμ΄μ…˜([[Hydration|Hydration]])이 λ°œμƒν•©λ‹ˆλ‹€ [3, 7]. 이λ₯Ό 톡해 데이터 νŽ˜μΉ­μ„ μ„œλ²„μ— μ•ˆμ „ν•˜κ²Œ κ²©λ¦¬ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈ λ²ˆλ“€μ„ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 4]. * **μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„μ˜ 변화와 RSC λΉ„ν˜Έν™˜μ„± 문제:** 기쑴에 [[React Context|React Context]]에 μ˜μ‘΄ν•˜μ—¬ λŸ°νƒ€μž„μ— μŠ€νƒ€μΌμ„ μ£Όμž…ν•˜λ˜ CSS-in-JS 라이브러리(예: Styled Components, Emotion)λŠ” Contextκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC) ν™˜κ²½κ³Ό 근본적으둜 ν˜Έν™˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [8, 9]. 이 λ•Œλ¬Έμ— Next.js App Routerλ₯Ό μ‚¬μš©ν•˜λŠ” μ‹ κ·œ ν”„λ‘œμ νŠΈμ—μ„œλŠ” λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†λŠ” Tailwind CSSλ‚˜ [[CSS Modules|CSS Modules]], λ˜λŠ” λΉŒλ“œ νƒ€μž„μ— 정적 CSSλ₯Ό μƒμ„±ν•˜λŠ” [[vanilla-extract|vanilla-extract]] 같은 제둜 λŸ°νƒ€μž„ 도ꡬλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 κ°•ν•˜κ²Œ ꢌμž₯λ©λ‹ˆλ‹€ [9-11]. * **CSS-in-JSλ₯Ό μœ„ν•œ [[Style Registry|Style Registry]] 톡합 νŒ¨ν„΄:** Next.js 15의 App Routerμ—μ„œ Styled Componentsλ₯Ό λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•  경우, 3단계 옡트인(opt-in) ν”„λ‘œμ„ΈμŠ€κ°€ ν•„μš”ν•©λ‹ˆλ‹€ [6]. λ Œλ”λ§ 쀑 CSS κ·œμΉ™μ„ μˆ˜μ§‘ν•˜λŠ” 'Style Registry'λ₯Ό λ§Œλ“€κ³ , `useServerInsertedHTML` 훅을 μ‚¬μš©ν•΄ HTML ν—€λ“œμ— ν•΄λ‹Ή κ·œμΉ™μ„ μ£Όμž…ν•œ λ’€, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 이 λ ˆμ§€μŠ€νŠΈλ¦¬λ₯Ό μ œκ³΅ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ 감싸야 ν•©λ‹ˆλ‹€ [6]. λ˜ν•œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ 클래슀 이름이 μƒμ„±λ˜μ–΄ λ°œμƒν•˜λŠ” ν•˜μ΄λ“œλ ˆμ΄μ…˜ 뢈일치(Hydration Mismatch)λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ `next.config.js` νŒŒμΌμ—μ„œ `styledComponents` 컴파일러 μ˜΅μ…˜μ„ ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€ [12]. * **Pages Router ν™˜κ²½μ—μ„œμ˜ μŠ€νƒ€μΌλ§ μ œμ•½ μ—…λ°μ΄νŠΈ:** Next.js 15([[React 18|React 18]] 기반)의 κ΅¬ν˜• Pages Routerλ₯Ό μ‚¬μš©ν•  λ•Œλ„ λ³€ν™”κ°€ μžˆμŠ΅λ‹ˆλ‹€. `_document.tsx`의 `Document.getInitialProps` λ‚΄ `styles` ν•„λ“œμ—μ„œ μŠ€νƒ€μΌμ΄ ν¬ν•¨λœ JSX μ½”λ“œ 쑰각(Fragment)을 λ°˜ν™˜ν•˜λŠ” 것이 더 이상 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [13, 14]. 이λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ `React.Children.toArray`λ₯Ό μ‚¬μš©ν•˜μ—¬ `styles` ν•„λ“œκ°€ μœ νš¨ν•œ React λ…Έλ“œμ˜ 평면 λ°°μ—΄(flat array)을 λ°˜ν™˜ν•˜λ„λ‘ ꡬ성해야 ν•©λ‹ˆλ‹€ [15]. * **λ‹€μ–‘ν•œ 데이터 페칭 및 λ Œλ”λ§ μ „λž΅ 지원:** 기본적으둜 정적 λ Œλ”λ§(Static Rendering)을 톡해 λΉŒλ“œ νƒ€μž„μ— HTML을 μƒμ„±ν•˜λ©°, `cookies()`λ‚˜ `headers()` 같은 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  경우 동적 λ Œλ”λ§(Dynamic Rendering)으둜 μ „ν™˜λ©λ‹ˆλ‹€ [16]. κ·Έ 외에도 일정 μ‹œκ°„ ν›„ νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ μƒμ„±ν•˜λŠ” 점진적 정적 μž¬μƒμ„±(ISR), νŠΉμ • νƒœκ·Έ 기반의 μ£Όλ¬Έν˜• μž¬κ²€μ¦(On-Demand Revalidation) κΈ°λŠ₯을 톡해 μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œλ₯Ό ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€ [4, 16]. ## πŸ”— Knowledge Connections - **Related Topics:** [[React Server Components (RSC)|React Server Components (RSC]], Styled Components, [[Tailwind CSS|Tailwind CSS]], App Router - **Projects/Contexts:** Next.js App Router ν™˜κ²½μ—μ„œμ˜ ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œ μŠ€νƒ€μΌλ§ 및 UI μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜ 섀계 - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ Next.js App Routerλ₯Ό λ„μž…ν•˜λŠ” μ‹ κ·œ ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ„±λŠ₯ μ΄μŠˆμ™€ RSC ν˜Έν™˜μ„± 문제둜 λŸ°νƒ€μž„ CSS-in-JS μ‚¬μš©μ„ ν”Όν•˜λŠ” 것이 μ΅œμš°μ„ μœΌλ‘œ ꢌμž₯λ˜μ§€λ§Œ [11], λ™μ‹œμ— ν•˜μœ„ ν˜Έν™˜μ„±μ΄λ‚˜ κΈ°μ‘΄ 섀정을 μœ μ§€ν•΄μ•Ό ν•˜λŠ” νŒ€μ„ μœ„ν•΄ Style Registry νŒ¨ν„΄μ„ 톡해 Styled Componentsλ₯Ό 톡합할 수 μžˆλŠ” 곡식적인 우회 방법둠도 ν•¨κ»˜ μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [6]. --- *Last updated: 2026-04-26*