# [[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 ํ™˜๊ฒฝ์„ ์ž๋™ ๊ฐ์ง€ํ•˜์—ฌ ์ธ๋ผ์ธ `