--- category: AI_and_ML tags: [auto-wikified, technical-documentation, merged, ai_and_ml] title: Next.js description: "**Next." last_updated: 2026-05-04 --- # Next.js ## ๐Ÿ“Œ Brief Summary **Next.js**๋Š” ์œ ์—ฐํ•œ ๋ Œ๋”๋ง ์ „๋žต(SSR, SSG ๋“ฑ), ๋‚ด์žฅ API ๋ผ์šฐํŠธ ๋ฐ ํ’€์Šคํƒ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์—ฌ ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” React ๊ธฐ๋ฐ˜์˜ ๋ฉ”ํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค [1, 2]. ํŠนํžˆ, **App Router** ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด **React Server Components(RSC)**๋ฅผ ์„ ๋„์ ์œผ๋กœ ๋„์ž…ํ•จ์œผ๋กœ์จ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ๋ฐ์ดํ„ฐ ํŽ˜์นญ๊ณผ UI ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ํš๊ธฐ์ ์œผ๋กœ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [3-5]. ## ๐Ÿ“– Core Content * **์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(RSC) ์ค‘์‹ฌ์˜ App Router ์•„ํ‚คํ…์ฒ˜:** Next.js์˜ ์ƒˆ๋กœ์šด "app ๋””๋ ‰ํ† ๋ฆฌ" ๋‚ด์— ์žˆ๋Š” ๋ผ์šฐํŠธ์™€ ์ปดํฌ๋„ŒํŠธ๋“ค์€ **๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ**๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค [4]. ์ด๋Š” ์„œ๋ฒ„์—์„œ๋งŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์„ ์ง๋ ฌํ™”๋œ ํ˜•ํƒœ(RSC ํŽ˜์ด๋กœ๋“œ)๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๋ฏ€๋กœ **์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค** [6-9]. * **ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์™€์˜ ๊ฒฝ๊ณ„ ์„ค์ • ๋ฐ ํ˜ผํ•ฉ(Interleaving):** ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ(์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ)์ด๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์ „์šฉ API, ์ƒํƒœ(`useState` ๋“ฑ)๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ตœ์ƒ๋‹จ์— `"use client"` ์ง€์‹œ์–ด๋ฅผ ์„ ์–ธํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค [4, 10]. Next.js์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ๋ Œ๋”๋งํ•  ์ˆ˜๋Š” ์—†์œผ๋‚˜, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ `children`๊ณผ ๊ฐ™์€ **Prop(์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ์†์„ฑ) ํ˜•ํƒœ๋กœ ์ „๋‹ฌ**ํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ค‘์ฒฉ(Interleaving)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 12]. * **์ŠคํŠธ๋ฆฌ๋ฐ(Streaming)๊ณผ Suspense ํ†ตํ•ฉ:** ๊ธด ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ์ด ์ „์ฒด ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๋„๋ก, Next.js๋Š” RSC๋ฅผ `` ๊ฒฝ๊ณ„์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•„์›ƒ ์˜ค๋ธŒ ์˜ค๋”(Out-of-order) ๋ฐฉ์‹์˜ **์ŠคํŠธ๋ฆฌ๋ฐ ๋ Œ๋”๋ง**์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [3, 13]. ์„œ๋ฒ„๋Š” HTML ์…ธ์„ ๋จผ์ € ๋น ๋ฅด๊ฒŒ ๋ณด๋‚ด๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋˜๋Š” ๋Œ€๋กœ ๋‚˜๋จธ์ง€ RSC ํŽ˜์ด๋กœ๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ฒญํฌ ๋‹จ์œ„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜์—ฌ ์ฆ‰๊ฐ์ ์ธ ๋กœ๋”ฉ UI(Fallback)์—์„œ ์‹ค์ œ ์ฝ˜ํ…์ธ ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค [14-16]. * **์„œ๋ฒ„ ์•ก์…˜(Server Actions)์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋ณ€์ด:** `"use server"` ์ง€์‹œ์–ด๋กœ ์ •์˜๋˜๋Š” ์„œ๋ฒ„ ์•ก์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฒ„ํŠผ ํด๋ฆญ ๋“ฑ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ง์ ‘ ์„œ๋ฒ„์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 17, 18]. ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ **๋‹จ์ผ ๋ผ์šด๋“œํŠธ๋ฆฝ**๋งŒ์œผ๋กœ ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ, ๊ทธ๋ฆฌ๊ณ  `revalidateTag`๋ฅผ ํ†ตํ•œ ์ตœ์‹  UI์˜ ์žฌ๊ฒ€์ƒ‰ ๋ฐ ๋ฐ˜์˜์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค [18]. * **React-Query ๋“ฑ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ๊ฒฐํ•ฉ:** ์„œ๋ฒ„ ์•ก์…˜ ๋ฐ ์บ์‹ฑ ์ „๋žต๋งŒ์œผ๋กœ๋Š” ๋Œ€์‘ํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์šด ๋‹ค์ค‘ ํผ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ๋™์  ๋ผ์šฐํŒ… ์กฐ๊ฑด์—์„œ๋Š” `@tanstack/react-query`์˜ `useSuspenseQuery` ๋“ฑ๊ณผ RSC๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ํ›„์† ์ธํ„ฐ๋ž™์…˜๊ณผ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [19-21]. ## โš–๏ธ Trade-offs & Caveats * **์„œ๋ฒ„ ์•ก์…˜์˜ ์ง๋ ฌํ™”์™€ ์บ์‹œ ๋ฌดํšจํ™”(revalidateTag) ๋น„์šฉ:** ์„œ๋ฒ„ ์•ก์…˜ ๋‚ด์—์„œ `revalidateTag`๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ, ๋ณ€๊ฒฝ๋œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ๋กœ๋“œ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ **ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ „์ฒด RSC ํŠธ๋ฆฌ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๊ณ  ๋ชจ๋“  ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์š”์ฒญ**ํ•˜๋Š” ๋น„ํšจ์œจ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [22, 23]. ๋˜ํ•œ, ์„œ๋ฒ„ ์•ก์…˜์€ ์ง๋ ฌ(Serial)๋กœ๋งŒ ์‹คํ–‰๋˜์–ด ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์•ก์…˜๋งŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ ์ƒํƒœ๊ฐ€ ๋ถˆ๋Ÿ‰ํ•œ ์ƒํ™ฉ์—์„œ ์—ฐ์†๋œ ํ˜ธ์ถœ ์‹œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [24]. * **๊ณต๊ฐœ HTTP ์—”๋“œํฌ์ธํŠธ๋กœ์„œ์˜ ๋ณด์•ˆ ์œ„ํ—˜ (React2Shell):** `"use server"` ์ง€์‹œ์–ด๊ฐ€ ๋ถ™์€ ์„œ๋ฒ„ ์•ก์…˜์€ ๋‚ด๋ถ€ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” **์ „ ์„ธ๊ณ„ ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ HTTP ์—”๋“œํฌ์ธํŠธ**์ž…๋‹ˆ๋‹ค [25]. ์ผ๋ฐ˜์ ์ธ API ๋ผ์šฐํŠธ์™€ ๋™์ผํ•œ ์ˆ˜์ค€์˜ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ๊ณผ ๊ถŒํ•œ ํ™•์ธ(Sanitization)์„ ๊ฑฐ์น˜์ง€ ์•Š์œผ๋ฉด **์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰(RCE) ๋“ฑ ์น˜๋ช…์ ์ธ ๋ณด์•ˆ ์ทจ์•ฝ์ **์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [25-27]. ๋˜ํ•œ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋„˜๊ธฐ๋Š” ํ”„๋กœํ”„์— ํ•„์š” ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธฐ๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋„คํŠธ์›Œํฌ ํƒญ์— ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์ตœ์†Œํ™”๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [28]. * **๋ณต์žก๋„ ์ฆ๊ฐ€์™€ ์—์ฝ”์‹œ์Šคํ…œ ์ข…์†์„ฑ:** ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ํ˜ผํ•ฉ๊ณผ ์ค‘์ฒฉ ์‚ฌ์šฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ **๊ตฌ์กฐ์  ๋ณต์žก์„ฑ**์„ ํฌ๊ฒŒ ๋†’์ž…๋‹ˆ๋‹ค [29]. ๋˜ํ•œ, ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ๋ชจ๋“  ๊ณณ์— `"use client"`๋ฅผ ๋ถ™์ด๋Š” ์ด๋ฅธ๋ฐ” "Vibe Coding"์˜ ํ•จ์ •์— ๋น ์ง€๋ฉด RSC์˜ ํ˜œํƒ์ธ ๋ฒˆ๋“ค ์ตœ์ ํ™” ํšจ๊ณผ๋Š” ์‚ฌ๋ผ์ง€๊ณ  ๊ตฌ์กฐ์  ๋ณต์žก์„ฑ๊ณผ ๋ณด์•ˆ ํ‘œ๋ฉด๋งŒ ๋Š˜์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [30, 31]. ํ˜„์žฌ RSC๋ฅผ ์˜จ์ „ํžˆ ํ”„๋กœ๋•์…˜์— ์ง€์›ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์‚ฌ์‹ค์ƒ Next.js(Vercel)์— ์ข…์†๋˜์–ด ์žˆ์œผ๋ฉฐ, `emotion`๊ณผ ๊ฐ™์€ **CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ**๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋“ฑ ๊ธฐ์ˆ  ๋ถ€์ฑ„์˜ ์œ„ํ—˜๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [32]. * **๋ผ์šฐํŒ… ๋™์ž‘ ์‹œ์˜ ๋ถˆํ•„์š”ํ•œ ์„œ๋ฒ„ ์š”์ฒญ ๋ฌธ์ œ:** ํด๋ผ์ด์–ธํŠธ์—์„œ URL ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด ๋ณ€๊ฒฝ๋  ๋•Œ(`router.push` ์‚ฌ์šฉ ์‹œ), Next.js๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๋Š” RSC ํŽ˜์ด์ง€์กฐ์ฐจ ์ƒˆ๋กœ ๋ Œ๋”๋งํ•˜๋„๋ก ๋™์ž‘ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด `window.history.pushState`๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ Suspense ์ „ํ™˜๊ณผ ๋งค๋„๋Ÿฝ๊ฒŒ ์—ฐ๋™๋˜์ง€ ์•Š์•„ UI ๊ฒฝํ—˜์ด ์ €ํ•˜๋˜๋Š” ์ œ์•ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค [33, 34]. --- *Last updated: 2026-05-03* ## ๐Ÿ“š Legacy Insights & Additional Context > [!NOTE] > Below is content merged from previous versions of this documentation. ## ๐Ÿ“Œ Brief Summary [[Next.js|Next.js]] ๊ธฐ๋ฐ˜ ๋Œ€๊ทœ๋ชจ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ ๋ฐ ๋„๋ฉ”์ธ ์ค‘์‹ฌ(Feature-Driven/Domain-Driven)์˜ ๋ชจ๋“ˆํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ํ˜„๋Œ€์ ์ธ ์›น ๊ฐœ๋ฐœ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [1, 2]. ํŠนํžˆ ์ตœ๊ทผ์˜ Next.js App Router ํ™˜๊ฒฝ์—์„œ๋Š” React Server Components(RSC)์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๋Š” [[CSS-in-JS|CSS-in-JS]] ๋Œ€์‹  Tailwind CSS, [[CSS Modules|CSS Modules]], ๋˜๋Š” zero-runtime ๋ฐฉ์‹์˜ CSS-in-JS([[vanilla-extract|vanilla-extract]] ๋“ฑ)์™€ ๊ฐ™์€ ์ •์  ์Šคํƒ€์ผ๋ง ์ „๋žต์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [3-5]. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์™€ ์Šคํƒ€์ผ๋ง ์ ‘๊ทผ์€ ํŒ€ ๊ฐ„์˜ ํ˜‘์—…์„ ๋•๊ณ  ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ, ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ "์˜ˆ์˜๊ฒŒ"๊ฐ€ ์•„๋‹Œ "์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ" ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [1, 5, 6]. --- [[Next.js|Next.js]] ๋ Œ๋”๋ง ์ตœ์ ํ™”๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ, SEO ๋ฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŽ˜์ด์ง€ ํŠน์„ฑ์— ๋งž์ถฐ ๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ์ „๋žต(SSR, SSG, CSR, ISR)์„ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1-3]. ํŠนํžˆ [[React Server Components|React Server Components]](RSC)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๊ณผ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์˜ ํฌ๊ธฐ๋ฅผ ๋Œ€ํญ ์ค„์ž…๋‹ˆ๋‹ค [4, 5]. ์ด๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„(LCP)๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด ์ƒํ˜ธ์ž‘์šฉ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค [6-8]. ## ๐Ÿ“– Core Content * **๊ธฐ๋Šฅ ๋ฐ ๋„๋ฉ”์ธ ์ค‘์‹ฌ ์•„ํ‚คํ…์ฒ˜ ([[Feature-Driven Architecture|Feature-Driven Architecture]]):** ๋Œ€๊ทœ๋ชจ Next.js ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ, ํ›…, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํŒŒ์ผ ์œ ํ˜•๋ณ„๋กœ ๋‹จ์ˆœ ๊ทธ๋ฃนํ™”ํ•˜๊ฑฐ๋‚˜ ๋ผ์šฐํŒ…์„ ๋‹ด๋‹นํ•˜๋Š” `app/` ๋””๋ ‰ํ† ๋ฆฌ์— ๋ชจ๋‘ ๋„ฃ๋Š” ๊ฒƒ์€ ๊ด€๋ฆฌ๋ฅผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [1]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ ๋„๋ฉ”์ธ(์˜ˆ: `market-data`, `user-profile`, `auth`)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘์‹ฌ์˜ ํด๋” ๊ตฌ์กฐ(์˜ˆ: `src/features/...`)๋ฅผ ๋„์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 2]. `app/` ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ(page.tsx, layout.tsx ๋“ฑ)์€ ๋ผ์šฐํŒ…๊ณผ ๋ ˆ์ด์•„์›ƒ ๋“ฑ ์ตœ์†Œํ•œ์˜ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๊ณ , ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ์ปดํฌ๋„ŒํŠธ๋Š” `features/` ํ•˜์œ„๋กœ ์œ„์ž„ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์บก์Аํ™”ํ•ฉ๋‹ˆ๋‹ค [2, 7]. * **Next.js App Router์™€ CSS ์•„ํ‚คํ…์ฒ˜ ์ „๋žต:** ๋Œ€๊ทœ๋ชจ Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํŠนํžˆ App Router๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ์กด์˜ CSS-in-JS([[styled-components|styled-components]], Emotion ๋“ฑ)๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋Ÿฐํƒ€์ž„์— CSS๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, React [[Server Components|Server Components]](RSC)์—๋Š” Context๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ๋ณธ์งˆ์ ์œผ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [3, 4]. ๋”ฐ๋ผ์„œ 2025๋…„ ๊ธฐ์ค€ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์ด ์—†๋Š” Tailwind CSS๋‚˜ CSS Modules๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋นŒ๋“œ ํƒ€์ž„์— ์ •์  CSS๋ฅผ ์ƒ์„ฑํ•˜๋Š” `vanilla-extract`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [4, 5, 8]. ํŠนํžˆ ๋‹ค์ค‘ ํ…Œ๋งˆ๊ฐ€ ํ•„์š”ํ•œ ๋Œ€๊ทœ๋ชจ ๋””์ž์ธ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•˜๋Š” `vanilla-extract`๊ฐ€ ๊ฐ€์žฅ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค [5]. * **์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐํ™” ๊ทœ์น™:** * **๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ๊ฒฝ๋กœ ๊ด€๋ฆฌ:** ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ์„ค์ • ์‹œ `src/` ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ `tailwind.config.ts`, `next.config.mjs` ๋“ฑ์˜ ๋ฃจํŠธ ์„ค์ • ํŒŒ์ผ๊ณผ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค [9]. ๋˜ํ•œ, ์ค‘์ฒฉ๋œ ์ƒ๋Œ€ ๊ฒฝ๋กœ(`../../../`)๋กœ ์ธํ•œ ํ˜ผ๋ž€์„ ๋ง‰๊ธฐ ์œ„ํ•ด `@/components/...`์™€ ๊ฐ™์€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์ž„ํฌํŠธ(Absolute Imports)๋ฅผ ๊ฐ•์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [6, 9, 10]. * **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ([[_แ„‚แ…ฌแ„‹แ…ช แ„‘แ…กแ†ฏแ„ƒแ…กแ„…แ…ตแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต_ - แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns)|Separation of Concerns]]):** ๋ฐ์ดํ„ฐ ํŒจ์นญ์ด๋‚˜ API ํ˜ธ์ถœ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๋กœ์ง์€ UI ์ปดํฌ๋„ŒํŠธ์™€ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„์˜ ๋ ˆ์ด์–ด(์˜ˆ: `services/` ํด๋”)์—์„œ ๊ด€๋ฆฌํ•ด์•ผ ๋ฐฑ์—”๋“œ ๋ณ€๊ฒฝ์ด๋‚˜ ์œ ์ง€๋ณด์ˆ˜์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 11]. * **ํ™•์žฅ์„ฑ ๋„๊ตฌ ํ™œ์šฉ:** ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ Storybook์„ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ๋†’์ด๊ณ , ์—ฌ๋Ÿฌ ์•ฑ๊ณผ ๊ณต์œ  ํŒจํ‚ค์ง€๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด [[Turborepo|Turborepo]]๋‚˜ Nx์™€ ๊ฐ™์€ [[Monorepo|Monorepo]] ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [6, 11]. --- - **ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ Œ๋”๋ง ์ „๋žต (Hybrid Rendering):** Next.js๋Š” ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ํŽ˜์ด์ง€๋ณ„ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ์œ ์—ฐํ•˜๊ฒŒ ํ˜ผํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. ๋งˆ์ผ€ํŒ… ํŽ˜์ด์ง€๋‚˜ ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG)์„, ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ƒํ’ˆ ํŽ˜์ด์ง€์—๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์„, ์‚ฌ์šฉ์ž ๋Œ€์‹œ๋ณด๋“œ์™€ ๊ฐ™์ด ์ธํ„ฐ๋ž™์…˜์ด ์ค‘์š”ํ•œ ๊ณณ์—๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)์„ ์ ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ๊ณผ SEO๋ฅผ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [1, 3]. - **์ ์ง„์  ์ •์  ์žฌ์ƒ์„ฑ (ISR):** ์ •์  ์ƒ์„ฑ(SSG)์˜ ์••๋„์ ์ธ ๋กœ๋”ฉ ์†๋„์™€ SSR์˜ ๋ฐ์ดํ„ฐ ์ตœ์‹ ํ™” ์ด์ ์„ ๊ฒฐํ•ฉํ•œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค [9, 10]. ์ „์ฒด ์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ํ•„์š” ์—†์ด ํŠน์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด๋‚˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ฐœ๋ณ„ ์ •์  ํŽ˜์ด์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ตœ์‹  ์ƒํƒœ์˜ ์บ์‹œ๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [10-12]. - **[[React Server Components (RSC)|React Server Components (RSC]] ์ƒํƒœ๊ณ„ ๋„์ž…:** Next.js์˜ App Router๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค [13]. ์ •์ ์ธ UI๋Š” ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ๋˜์–ด HTML๊ณผ ์ง๋ ฌํ™”๋œ ๋ช…๋ น(React Flight ํ”„๋กœํ† ์ฝœ)์œผ๋กœ๋งŒ ์ „๋‹ฌ๋˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†ก๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(0 bytes)๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [4, 5, 14-16]. ์ธํ„ฐ๋ž™์…˜์ด ํ•„์ˆ˜์ ์ธ ๋ถ€๋ถ„๋งŒ `"use client"` ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค [14, 17, 18]. - **๋ฐ์ดํ„ฐ ํŽ˜์นญ๊ณผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ:** ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด API ๊ณ„์ธต์„ ๊ฑฐ์น  ํ•„์š” ์—†์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [14, 19, 20]. ์ด๋ฅผ ์ ์ ˆํžˆ ์„ค๊ณ„ํ•˜๋ฉด ๋ Œ๋”๋ง ์ค‘ ๋ถ€๋ชจ์™€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘๋ ฌ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์–ด, ๋„คํŠธ์›Œํฌ ์›Œํ„ฐํด(Waterfall) ํ˜„์ƒ์„ ์ œ๊ฑฐํ•˜๊ณ  ์‘๋‹ต ์†๋„๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค [21, 22]. - **์ž๋™ํ™”๋œ ์ตœ์ ํ™” ๋„๊ตฌ ํ™œ์šฉ:** `next/image` ์ปดํฌ๋„ŒํŠธ๋Š” ์ด๋ฏธ์ง€ ํฌ๋งท ์ž๋™ ๋ณ€ํ™˜(WebP/AVIF), ๋ฐ˜์‘ํ˜• ์‚ฌ์ด์ง•, ๊ทธ๋ฆฌ๊ณ  ํ™”๋ฉด์— ๋ณด์ผ ๋•Œ๋งŒ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading)์„ ์ง€์›ํ•˜์—ฌ [[Core Web Vitals|Core Web Vitals]]๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [7, 23, 24]. ์ถ”๊ฐ€๋กœ ์ตœ์‹  Next.js ํ™˜๊ฒฝ์—์„œ๋Š” [[React Compiler|React Compiler]]๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์—†์ด ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค [25]. ## โš–๏ธ Trade-offs & Caveats No trade-offs available. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Feature-Driven Architecture|Feature-Driven Architecture]], React Server Components (RSC), Tailwind CSS, [[CSS Modules|CSS Modules]], [[Zero-Runtime CSS-in-JS|Zero-runtime CSS-in-JS]] - **Projects/Contexts:** Next.js App Router ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ, ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”„๋ก ํŠธ์—”๋“œ ์‹œ์Šคํ…œ - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด, ๊ณผ๊ฑฐ์—๋Š” ๋™์  ์Šคํƒ€์ผ๋ง๊ณผ ํ…Œ๋งˆ ์ ์šฉ์˜ ์ด์  ๋•Œ๋ฌธ์— CSS-in-JS(styled-components, Emotion ๋“ฑ)๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋‚˜, ์ตœ๊ทผ Next.js์˜ App Router ๋ฐ RSC ํ™˜๊ฒฝ์˜ ๋„์ž…์œผ๋กœ ์ธํ•ด ์ปจํ…์ŠคํŠธ(Context) ๊ธฐ๋ฐ˜์˜ ๋Ÿฐํƒ€์ž„ CSS-in-JS๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•˜์—ฌ ์‚ฌ์šฉ์ด ์ง€์–‘๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋Œ€์•ˆ์œผ๋กœ Tailwind CSS๋‚˜ CSS Modules ๊ฐ™์€ ์ •์  ๋ Œ๋”๋ง ํ˜ธํ™˜ ์Šคํƒ€์ผ๋ง ๋ฐฉ์‹์ด ์ƒˆ๋กœ์šด ํ‘œ์ค€์œผ๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค [3-5]. --- *Last updated: 2026-04-26* --- - **Related Topics:** [[React Server Components|React Server Components]], ์ ์ง„์  ์ •์  ์žฌ์ƒ์„ฑ (ISR), ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ([[Hydration|Hydration]] - **Projects/Contexts:** [[Next.js App Router|Next.js App Router]], ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ ([[E-commerce Platforms|E-commerce Platforms]] - **Contradictions/Notes:** SSR์€ ์ดˆ๊ธฐ ์ฝ˜ํ…์ธ  ๋ Œ๋”๋ง(FCP)์ด ๋น ๋ฅด๊ณ  SEO์— ๋งค์šฐ ์œ ๋ฆฌํ•˜์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” 'ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration)' ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„(TTI)์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 26-28]. ๋˜ํ•œ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ ์˜์กด์„ฑ์ด ์ง๋ ฌ(Sequential)๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„ ์ธก์—์„œ ์›Œํ„ฐํด ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ด ์‘๋‹ต ์ง€์—ฐ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ คํ•œ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [29, 30]. --- *Last updated: 2026-04-25*