# [[Next.js App Router|Next.js App Router]] ## ๐ Brief Summary [[Next.js|Next.js]] App Router๋ [[React Server Components|React Server Components]](RSC)๋ฅผ ํต์ฌ ์ํคํ ์ฒ๋ก ๋์ ํ์ฌ ๊ธฐ์กด์ ํด๋ผ์ด์ธํธ ์ธก ๋ ๋๋ง ์ค์ฌ์ ๊ฐ๋ฐ ๋ฐฉ์์์ ๋ฒ์ด๋ ์๋ก์ด ํจ๋ฌ๋ค์์ ์ ๊ณตํ๋ ๋ผ์ฐํ ์์คํ ์ ๋๋ค [1]. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์๋ฒ ์ปดํฌ๋ํธ๋ก ๋์ํ์ฌ ์๋ฒ์์ HTML์ ์์ ํ ๋ ๋๋งํ๋ฉฐ, ์ํ ๊ด๋ฆฌ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ ์ํธ์์ฉ์ด ํ์ํ ๊ฒฝ์ฐ์๋ง 'use client' ์ง์์ด๋ฅผ ์ฌ์ฉํด ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค [2, 3]. ์ด๋ฌํ ์ํคํ ์ฒ ๋ณํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ๋ณด์์ ํฅ์์ํค์ง๋ง, ๊ธฐ์กด์ ์ํ ๋ฐ ์ปจํ ์คํธ ๊ธฐ๋ฐ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์์ ์ค๋ํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค [4, 5]. ## ๐ Core Content * **React [[Server Components|Server Components]](RSC) ๋ชจ๋ธ์ ์๋ ๋ฐฉ์** [[Next.js 15 App Router|Next.js 15 App Router]] ํ๊ฒฝ์์ ์๋ฒ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ๋ก JavaScript ์ฝ๋๋ฅผ ์ ์กํ์ง ์์ผ๋ฉฐ, ์๋ฒ์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ํจ์นญํ์ฌ ๋ ๋๋ง๋ HTML๋ง์ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ ๋๋ค [2]. ๋ฐ๋ฉด ๋์ ์ํ ๋ณ๊ฒฝ, ๋ธ๋ผ์ฐ์ API ์ ๊ทผ, ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ํ์ํ ์ธํฐ๋ํฐ๋ธ UI๋ ํ์ผ ์ต์๋จ์ `'use client'`๋ฅผ ๋ช ์ํ์ฌ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ๊ฒฝ๊ณ(Client Component Boundary)๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค [3]. ํ์ด๋๋ ์ด์ ([[Hydration|Hydration]]) ํ๋ก์ธ์ค๋ ์ด๋ฌํ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ๋ํด์๋ง ์ํ๋์ด ์ธํฐ๋ํฐ๋นํฐ๋ฅผ ํ์ฑํํฉ๋๋ค [6]. * **์คํ์ผ๋ง ํจ๋ฌ๋ค์์ ์ถฉ๋ ๋ฐ ๊ถ์ฅ ์ฌํญ** RSC๋ ์๋ฒ ์ ์ฉ ์คํ ํ๊ฒฝ์ผ๋ก, [[React Context|React Context]]๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค [7, 8]. ์ด๋ ํ ๋ง๋ ์ํ๋ฅผ ์ํด Context API์ ์์กดํ๋ ๋ฐํ์ CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ([[styled-components|styled-components]], Emotion ๋ฑ)๊ฐ App Router์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํ์ง ์๋ ๋ฌธ์ ๋ฅผ ๋ฐ์์์ผฐ์ต๋๋ค [4, 7, 8]. ๋ฐ๋ผ์ Next.js App Router๋ฅผ ์ฌ์ฉํ๋ ์ต์ ํ๋ก์ ํธ์์๋ ๋ฐํ์ ์ค๋ฒํค๋ ์์ด ๋น๋ ํ์์ ์ ์ CSS๋ฅผ ์์ฑํ๋ **Tailwind CSS**, **[[CSS Modules|CSS Modules]]**, ํน์ **vanilla-extract**([[Zero-Runtime CSS-in-JS|Zero-Runtime CSS-in-JS]])์ ๋์ ์ด ๊ฐ๋ ฅํ ๊ถ์ฅ๋ฉ๋๋ค [8-10]. * **CSS-in-JS ์ง์ ๋ฐ ๋ ์ง์คํธ๋ฆฌ ํจํด** [[Next.js 15|Next.js 15]]๋ ๋ฐํ์ CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ ๋๋ง ์ค CSS ๊ท์น์ ์์งํ๊ณ ์ด๋ฅผ HTML์ `
`์ ์ฃผ์ (`useServerInsertedHTML` ํ ํ์ฉ)ํ๋ **[[Style Registry|Style Registry]] ํจํด**์ ์ง์ํฉ๋๋ค [11]. ๊ทธ๋ฌ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ํด๋์ค๋ช ๋ถ์ผ์น(Hydration Mismatch)๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ์ถ๊ฐ ์ค์ (์: `next.config.js` ๋ด ์ปดํ์ผ๋ฌ ์ต์ )์ด ์๊ตฌ๋ฉ๋๋ค [12]. ์ต์ `styled-components` (v6.3.0 ์ด์)์ ๊ฒฝ์ฐ, RSC ํ๊ฒฝ์ ์๋ ๊ฐ์งํ์ฌ ๋ณ๋์ ์ค์ ์์ด ์ธ๋ผ์ธ `