# [[Next.js App Router]] ## ๐Ÿ“Œ Brief Summary Next.js App Router๋Š” Next.js 13.4 ๋ฒ„์ „ ์ด์ƒ์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋œ ๋ผ์šฐํŒ… ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์‹œ์Šคํ…œ์œผ๋กœ, 'app'์ด๋ผ๋Š” ํด๋”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ๋กœ(Route)๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค [1, 2]. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ React Server Components(RSC)๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration) ์—†์ด ๋น ๋ฅธ ํŽ˜์ด์ง€ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [1, 3, 4]. ์ƒํƒœ ๊ด€๋ฆฌ๋‚˜ ๋ธŒ๋ผ์šฐ์ € API๊ฐ€ ํ•„์š”ํ•œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ UI์˜ ๊ฒฝ์šฐ์—๋งŒ `'use client'` ์ง€์‹œ์–ด๋ฅผ ๋ช…์‹œํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค [1, 5]. ## ๐Ÿ“– Core Content * **์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(RSC) ์šฐ์„  ์ ‘๊ทผ๋ฒ•** App Router์˜ ๋ชจ๋“  ํŽ˜์ด์ง€์™€ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(RSC)๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค [1, 5]. ์ด๋“ค์€ ํด๋ผ์ด์–ธํŠธ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๋œ ํ›„ ์ง๋ ฌํ™”๋œ JSON ํ˜•ํƒœ์˜ 'RSC ํŽ˜์ด๋กœ๋“œ(payload)'๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ŠคํŠธ๋ฆฌ๋ฐ๋ฉ๋‹ˆ๋‹ค [6-8]. ๋ฐ˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” RSC ํŽ˜์ด๋กœ๋“œ ๋‚ด์— ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์ธ์‹ํ•˜๋Š” ์ฐธ์กฐ(reference) ํ˜•ํƒœ๋กœ ํฌํ•จ๋˜๋ฉฐ, ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค [9, 10]. * **๋ฐ์ดํ„ฐ ํŽ˜์นญ๊ณผ ์„œ๋ฒ„ ์•ก์…˜(Server Actions)** ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๋น„๋™๊ธฐ(`async`) ํ•จ์ˆ˜๋กœ ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ์–ด ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ฝ๋Š” ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค [11-13]. ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ(Mutation)ํ•  ๋•Œ๋Š” `'use server'` ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„ ์•ก์…˜(Server Actions)์„ ํ™œ์šฉํ•˜์—ฌ API ๋ผ์šฐํŠธ ๊ตฌ์ถ• ์—†์ด ์„œ๋ฒ„์—์„œ ์ž‘์—…์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [14, 15]. * **ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๊ต์ฐจ ๋ฐฐ์น˜(Interleaving)** ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด์— ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ˜๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ๋‚ด์—์„œ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ์ž„ํฌํŠธํ•˜๋ฉด ํ•ด๋‹น ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” ์•”์‹œ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค [16, 17]. ์ด๋Ÿฌํ•œ ์ œ์•ฝ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ `children` ํ”„๋กœํ”„(prop)๋กœ ๋„˜๊ฒจ์„œ ๋ Œ๋”๋งํ•˜๊ฒŒ ํ•˜๋Š” ํŒจํ„ด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [18, 19]. * **์ŠคํŠธ๋ฆฌ๋ฐ(Streaming)๊ณผ Suspense์˜ ๊ฒฐํ•ฉ** App Router์—์„œ๋Š” ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ์˜ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋‹ค๋ฅผ ๋•Œ `Suspense` ๊ฒฝ๊ณ„๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ถ€๋ถ„์ ์ธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [20, 21]. ๋А๋ฆฐ ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ๊ฐ€ ์ „์ฒด ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๋„๋ก, ์™„๋ฃŒ๋œ ๋ถ€๋ถ„(์˜ˆ: ํ—ค๋” ๋“ฑ)์„ ๋จผ์ € ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜์—ฌ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค [20, 22]. ## โš–๏ธ Trade-offs & Caveats * **์บ์‹ฑ ๋ฐ ์žฌ๊ฒ€์ฆ ๋น„ํšจ์œจ์„ฑ**: ์„œ๋ฒ„ ์•ก์…˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ๋’ค `revalidateTag`๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ, ํŠน์ • ๋ฐ์ดํ„ฐ๋งŒ ๋ฆฌ๋กœ๋“œ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ „์ฒด RSC ํŠธ๋ฆฌ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋Š” ๋น„ํšจ์œจ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [23, 24]. * **์„œ๋ฒ„ ์•ก์…˜์˜ ์ง๋ ฌ(Serial) ์‹คํ–‰ ๋ณ‘๋ชฉ**: ์„œ๋ฒ„ ์•ก์…˜์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ง๋ ฌ๋กœ ์‹คํ–‰๋˜๋ฉฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค [25]. ๋„คํŠธ์›Œํฌ ์ƒํƒœ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•˜๊ฑฐ๋‚˜ ๊ณ ์˜๋กœ ์š”์ฒญ์„ ๋Šฆ์ถœ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์ €์žฅ์ด ํ(Queue)์— ๋ง‰ํ˜€ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [25]. * **์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์  ์œ„ํ—˜ (React2Shell)**: ๊ฐœ๋ฐœ์ž๋“ค์ด ์„œ๋ฒ„ ์•ก์…˜์„ ๋‚ด๋ถ€ ๋กœ์ปฌ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋ˆ„๊ตฌ๋‚˜ POST ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ HTTP ์—”๋“œํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค [26]. ํด๋ผ์ด์–ธํŠธ์—์„œ ๋„˜์–ด์˜จ ์ž…๋ ฅ๊ฐ’์„ ์—„๊ฒฉํžˆ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ(validation)ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰(RCE)์ด๋‚˜ ์†Œ์Šค ์ฝ”๋“œ ์œ ์ถœ ๋“ฑ์˜ ์น˜๋ช…์ ์ธ ์ทจ์•ฝ์ (์˜ˆ: CVE-2025-55182)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [26-28]. * **๋ผ์šฐํŒ… ์ค‘๋Œ ํ˜„์ƒ**: `react-query` ๋“ฑ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ `router.push`๋กœ URL์˜ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ, Next.js๊ฐ€ ์ƒˆ ๊ฒฝ๋กœ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ RSC ํŽ˜์ด์ง€๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋งํ•˜๊ณ  ์ค‘๋ณต ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์‹œ๋„ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [29]. ๋Œ€์•ˆ์ธ `history.pushState`๋ฅผ ์“ฐ๋ฉด UI ์ „ํ™˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘๋‹จ๋˜๋Š” ๋ฒ„๊ทธ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [30]. * **๊ตฌ์กฐ์  ๋ณต์žก์„ฑ**: ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋‚˜๋ˆ„๊ณ , Context API๋ฅผ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋“ฑ ๊ธฐ์กด React ๊ฐœ๋ฐœ๋ณด๋‹ค ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ๊ณผ ์ธ์ฒด๊ณตํ•™์ (ergonomic) ๋ณต์žก์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค [31]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] * [[React Server Components]] * ์—ฐ๊ฒฐ ์ด์œ : Next.js App Router๊ฐ€ ์ฑ„ํƒํ•œ ํ•ต์‹ฌ ๋ Œ๋”๋ง ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ, ํด๋ผ์ด์–ธํŠธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์„ ์ค„์ด๊ณ  ์„œ๋ฒ„ ์ž์›์„ ์ง์ ‘ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค [32-34]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: RSC ํŽ˜์ด๋กœ๋“œ(payload)์˜ ์ง๋ ฌํ™” ๊ณผ์ •๊ณผ ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration) ์—†์ด ๋ Œ๋”๋ง๋˜๋Š” ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 8, 35]. * [[Suspense ๋ฐ Streaming]] * ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ์ดํ„ฐ ํŒจ์นญ์œผ๋กœ ์ธํ•œ ์›Œํ„ฐํด(Waterfall)์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋น„๋™๊ธฐ์ ์œผ๋กœ UI๋ฅผ ์ฒญํฌ(chunk) ๋‹จ์œ„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค [20, 21]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ์ค€๋น„ ์‹œ๊ฐ„์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  App Router๊ฐ€ ๋น ๋ฅธ ์ตœ์ดˆ ๋ Œ๋”๋ง(First Paint)์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋น„๋™๊ธฐ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [36, 37]. #### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] * [[Server Actions]] * ์—ฐ๊ฒฐ ์ด์œ : App Router ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์“ฐ๊ธฐ๋‚˜ ์—…๋ฐ์ดํŠธ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ(Mutation)์„ ์œ„ํ•ด ๋ณ„๋„์˜ API ๋ผ์šฐํŠธ ์—†์ด ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค [14, 15]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ˆœํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ด๋ฉด์˜ HTTP ํ†ต์‹  ์›๋ฆฌ์™€, ์™œ ์„œ๋ฒ„ ์•ก์…˜์— ๋Œ€ํ•ด ์ „ํ†ต์ ์ธ API ์ˆ˜์ค€์˜ ๋ณด์•ˆ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•œ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [26, 38]. * [[Client Components]] * ์—ฐ๊ฒฐ ์ด์œ : ์ƒํƒœ(State), ๋ถ€์ˆ˜ ํšจ๊ณผ(Effect), ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ UI ๋ Œ๋”๋ง์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ `'use client'` ์ง€์‹œ์–ด๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค [3, 12]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€์˜ ๊ต์ฐจ ๋ฐฐ์น˜(Interleaving) ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์˜ ๋ Œ๋”๋ง ๊ฒฝ๊ณ„ ๊ทœ์น™๊ณผ, ๋ถˆํ•„์š”ํ•œ ๋ฒˆ๋“ค ์ฆ๊ฐ€๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•œ ๋ถ„๋ฆฌ ์ „๋žต์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [17, 19, 39]. ### Deeper Research Questions * ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž์‹(`children`) ํ”„๋กœํ”„๋กœ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ, ์ง๋ ฌํ™”(Serialization) ์ œ์•ฝ์€ ์–ด๋–ป๊ฒŒ ๊ทน๋ณต๋˜๋ฉฐ React ๋‚ด๋ถ€ ํŒŒ์ด๋ฒ„(Fiber) ํŠธ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ด๋“ค์„ ๋ณ‘ํ•ฉํ•˜๋Š”๊ฐ€? * ์„œ๋ฒ„ ์•ก์…˜ ์‚ฌ์šฉ ์‹œ ๋ฐ์ดํ„ฐ ๋ฌดํšจํ™”(`revalidateTag`)๊ฐ€ ์ „์ฒด ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ์œ ๋ฐœํ•˜๋Š” ๋น„ํšจ์œจ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด, Next.js์˜ ์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํŠœ๋‹ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ๋ฌด์—‡์ธ๊ฐ€? * ์™ธ๋ถ€ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: `react-query`)์™€ Next.js App Router์˜ ๋ผ์šฐํ„ฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ URL ์ƒํƒœ ๋™๊ธฐํ™” ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€? * ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” RSC ํŽ˜์ด๋กœ๋“œ๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ € ๋„คํŠธ์›Œํฌ ํƒญ์— ๋ชจ๋‘ ๋…ธ์ถœ๋˜๋Š”๋ฐ, ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง(Data Sanitization) ์ž๋™ํ™” ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? * ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ `'use client'`๋ฅผ ๋‚จ์šฉํ•˜๋Š” ํ˜„์ƒ(Vibe Coding RSC Trap)์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„๋ถ€ํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์–ด๋А ์˜์—ญ์„ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts * **Implementation:** ๋ณต์žกํ•œ ์ƒํ˜ธ์ž‘์šฉ์ด ์—†๋Š” ์ œํ’ˆ ์„ค๋ช…, ๋‚ด๋น„๊ฒŒ์ด์…˜, ํ‘ธํ„ฐ ๋“ฑ ์ •์ ์ธ ๋ถ€๋ถ„์€ ๋ชจ๋‘ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚จ๊ฒจ๋‘๊ณ , ์ƒํƒœ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์ด๋ฒคํŠธ๊ฐ€ ํ•„์š”ํ•œ ํผ์ด๋‚˜ ๋ฒ„ํŠผ ์š”์†Œ๋งŒ ์ตœ์†Œํ•œ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ(`'use client'`)๋กœ ๊ฐ์‹ธ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [40-42]. * **System Design:** ๋ณ„๋„์˜ REST API ๋ ˆ์ด์–ด๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ , ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง์ ‘ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ํ†ตํ•ฉํ˜• ๋ฐฑ์—”๋“œ-ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜๋กœ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [12, 13]. * **Operation / Maintenance:** ์„œ๋ฒ„ ์•ก์…˜์„ ๊ตฌํ˜„ํ•  ๋•Œ, ๋ฐ˜๋“œ์‹œ '์™ธ๋ถ€์— ๊ณต๊ฐœ๋œ HTTP ์—”๋“œํฌ์ธํŠธ'๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ์กฐ์ž‘ ์š”์ฒญ(Mutation)์˜ ๋ชจ๋“  ์ธ์ž๊ฐ’์„ ์ฒ ์ €ํ•˜๊ฒŒ ์œ ํšจ์„ฑ ๊ฒ€์ฆ(validation)ํ•˜๋Š” ๋ณด์•ˆ ๊ฒ€์‚ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์šด์˜ ์ง€์นจ์œผ๋กœ ๊ฐ•์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [26, 38]. * **Learning Path:** SSR๊ณผ ํด๋ผ์ด์–ธํŠธ ๋ Œ๋”๋ง์˜ ๋ณ‘๋ชฉ์  ์ดํ•ด [43, 44] โ†’ RSC์˜ ๊ฐœ๋…๊ณผ ์ง๋ ฌํ™” ๊ฐ€๋Šฅ์„ฑ ์ œ์•ฝ ํŒŒ์•… [7, 45] โ†’ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๊ฒฝ๊ณ„(`children` ํ™œ์šฉ๋ฒ•) ํ•™์Šต [18, 19] โ†’ ์„œ๋ฒ„ ์•ก์…˜์˜ ๋ณด์•ˆ ์œ„ํ—˜์„ฑ ์ธ์ง€ ์ˆœ์œผ๋กœ ๋‹จ๊ณ„์  ํ•™์Šต์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค [26]. * **My Project Relevance:** ํ˜„์žฌ ๋Œ€๊ทœ๋ชจ React ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์„ฑ๋Šฅ(FCP) ์ €ํ•˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•  ๋•Œ, ๋‹จ์ˆœํžˆ SSR์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด App Router ๊ธฐ๋ฐ˜์˜ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•จ์œผ๋กœ์จ ํด๋ผ์ด์–ธํŠธ ์ธก์— ๋‚ด๋ ค๊ฐ€๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋น„์šฉ์„ ์ œ๊ฑฐํ•˜๋Š” ์†”๋ฃจ์…˜์œผ๋กœ ์ฆ‰๊ฐ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [38, 40, 46]. ### Adjacent Topics * [[React Hydration]] * ํ™•์žฅ ๋ฐฉํ–ฅ: SSR ํ™˜๊ฒฝ์—์„œ ์ •์  HTML์ด ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ ๊ณผ์ •์œผ๋กœ, ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ณ‘๋ชฉ๊ณผ RSC๊ฐ€ ์ด ํ•œ๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์กฐ์ ์œผ๋กœ ํšŒํ”ผํ•˜๋Š”์ง€ ๋น„๊ต ์กฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค [35, 43, 44]. * [[Next.js Caching Architecture]] * ํ™•์žฅ ๋ฐฉํ–ฅ: App Router์˜ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋ณต์žกํ•œ ๊ธฐ๋ณธ ์บ์‹œ ๋™์ž‘ ๋ฐฉ์‹๊ณผ, ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ํŒจ์นญ ํ›„ ๋ฌดํšจํ™” ๊ณผ์ •์ด ์–ด๋–ป๊ฒŒ ์ด๋ค„์ง€๋Š”์ง€ ์„ธ๋ถ€ ์›๋ฆฌ๋ฅผ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค [13, 24]. --- *Last updated: 2026-05-03*