# [[Next.js]] ## ๐Ÿ“Œ Brief Summary Next.js๋Š” React ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR), ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG), ๊ทธ๋ฆฌ๊ณ  ์ฆ๋ถ„ ์ •์  ์žฌ์ƒ์„ฑ(ISR)์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [1-3]. ์ด๋Š” ๊ธฐ๋ณธ React์˜ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)์ด ๊ฐ€์ง€๋Š” ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO) ๋ฐ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [4, 5]. ์„ฑ๋Šฅ ์ค‘์‹ฌ์˜ ์›น ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•๊ณผ ์šฐ์ˆ˜ํ•œ ์ฝ”์–ด ์›น ๋ฐ”์ดํƒˆ(Core Web Vitals) ์ ์ˆ˜ ๋‹ฌ์„ฑ์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ๊ณผ๋ฅผ ๋†’์ด๋Š” ํ•„์ˆ˜์ ์ธ ํ”Œ๋žซํผ์œผ๋กœ ํ‰๊ฐ€๋ฐ›์Šต๋‹ˆ๋‹ค [1, 2, 6]. ## ๐Ÿ“– Core Content * **ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ Œ๋”๋ง(Hybrid Rendering):** Next.js๋Š” ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ํŽ˜์ด์ง€๋ณ„ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ์œ ์—ฐํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7]. `getServerSideProps`๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ HTML์„ ์ƒ์„ฑํ•˜๋Š” SSR, ๋นŒ๋“œ ํƒ€์ž„์— ์ •์  HTML์„ ์ƒ์„ฑํ•˜์—ฌ ์ดˆ๊ณ ์†์œผ๋กœ ์ „์†กํ•˜๋Š” SSG, ๊ทธ๋ฆฌ๊ณ  ์บ์‹œ๋œ ์ •์  ํŽ˜์ด์ง€๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์—…๋ฐ์ดํŠธํ•˜์—ฌ TTFB(Time to First Byte) ์„ฑ๋Šฅ๊ณผ ์ฝ˜ํ…์ธ ์˜ ์ตœ์‹ ์„ฑ์„ ๋ชจ๋‘ ํ™•๋ณดํ•˜๋Š” ISR ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [4, 5, 8-10]. * **๊ฐ•๋ ฅํ•œ SEO ์ง€์›:** SPA(Single Page Application)์˜ ์ทจ์•ฝ์ ์ธ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ ์ œ๊ณต๋˜๋Š” `next/head` ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ผ์šฐํŠธ๋ณ„ ๋™์  ๋ฉ”ํƒ€ ํƒœ๊ทธ ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, `next-sitemap` ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•œ ์‚ฌ์ดํŠธ๋งต ์ž๋™ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [1, 2, 11, 12]. ๊ฒ€์ƒ‰ ์—”์ง„ ๋ด‡์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ๋Œ€๊ธฐํ•  ํ•„์š” ์—†์ด ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ HTML๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ์‘๋‹ต๋ฐ›์œผ๋ฏ€๋กœ ํฌ๋กค๋ง ํšจ์œจ์ด ๊ทน๋Œ€ํ™”๋ฉ๋‹ˆ๋‹ค [4, 5]. * **์„ฑ๋Šฅ ๋ฐ ์ฝ”์–ด ์›น ๋ฐ”์ดํƒˆ(Core Web Vitals) ์ตœ์ ํ™”:** ๋ผ์šฐํŠธ ๊ธฐ๋ฐ˜์˜ ์ฝ”๋“œ ๋ถ„ํ• (Code splitting)์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ดˆ๊ธฐ ๋‹ค์šด๋กœ๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์˜ ํฌ๊ธฐ๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ž…๋‹ˆ๋‹ค [13, 14]. ๋˜ํ•œ `next/image` ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด WebP, AVIF ๊ฐ™์€ ์ฐจ์„ธ๋Œ€ ์ด๋ฏธ์ง€ ํฌ๋งท ๋ณ€ํ™˜, ์ž๋™ ๋ฆฌ์‚ฌ์ด์ง• ๋ฐ ์ง€์—ฐ ๋กœ๋”ฉ(Lazy loading)์ด ์ ์šฉ๋˜์–ด LCP(Largest Contentful Paint)์™€ CLS(Cumulative Layout Shift) ์ ์ˆ˜๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15, 16]. ์„ธ๋ฐ€ํ•œ ์ˆ˜ํ™”(Hydration) ์ œ์–ด๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [17]. * **์ž…์ฆ๋œ ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ๊ณผ:** ์ „ํ†ต์ ์ธ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR) ํ™˜๊ฒฝ์˜ Create React App ๊ตฌ์กฐ์—์„œ Next.js ๊ธฐ๋ฐ˜์˜ ISR๋กœ ์ „์ž์ƒ๊ฑฐ๋ž˜ ์‚ฌ์ดํŠธ๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ์‹ค์ œ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์‚ฌ๋ก€์—์„œ TTFB๋Š” 200ms์—์„œ 50ms๋กœ ๋‹จ์ถ•๋˜์—ˆ๊ณ  LCP๋Š” 1.8์ดˆ๋กœ ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฉฐ, ๋ฉ”์ธ ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ 1.8MB์—์„œ 320KB๋กœ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค [15, 16, 18, 19]. ์ด ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์ œํ’ˆ ํŽ˜์ด์ง€ ์ƒ‰์ธ์œจ์ด 40%์—์„œ 95%๋กœ ํฌ๊ฒŒ ์ƒ์Šนํ•˜์˜€๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ์˜ค๊ฐ€๋‹‰ ํŠธ๋ž˜ํ”ฝ์€ 70%, ์˜ค๊ฐ€๋‹‰ ๊ฒ€์ƒ‰์„ ํ†ตํ•œ ์ˆ˜์ต์€ 75% ์ฆ๊ฐ€ํ•˜๋Š” ์„ฑ๊ณผ๋ฅผ ๊ฑฐ๋‘์—ˆ์Šต๋‹ˆ๋‹ค [15, 16, 18, 19]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** `[[Server-Side Rendering (SSR)]]`, `[[Static Site Generation (SSG)]]`, `[[Incremental Static Regeneration (ISR)]]`, `[[Core Web Vitals]]`, `[[Client-Side Rendering (CSR)]]` - **Projects/Contexts:** `[[E-commerce Migration Case Study]]`, `[[Strapi Launchpad demo]]` - **Contradictions/Notes:** ์ˆœ์ˆ˜ React ์•ฑ(CSR)์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ Œ๋”๋ง ์ง€์—ฐ๊ณผ ๋นˆ ์ดˆ๊ธฐ HTML ๊ตฌ์กฐ๋กœ ์ธํ•ด ๊ฒ€์ƒ‰ ์—”์ง„์˜ 2์ฐจ ์ƒ‰์ธ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๋ถˆ๋ฆฌํ•จ๊ณผ ์ƒ‰์ธ ๋ˆ„๋ฝ์˜ ์œ„ํ—˜์ด ์žˆ์ง€๋งŒ, Next.js๋ฅผ ๋„์ž…ํ•œ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ๋ Œ๋”๋ง์€ ๊ฒ€์ƒ‰ ์—”์ง„ ๋ด‡์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์˜์กด์„ฑ์„ ์›์ฒœ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜์—ฌ ํฌ๋กค๋ง ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค [4, 5, 20-23]. --- *Last updated: 2026-04-26*