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