๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Next

(4)
Next.js Image ์•Œ์•„๋ณด๊ธฐ Next.js์—์„œ๋Š” ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ตœ์ ํ™”๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค Next.js๋ฅผ ์“ฐ์ง€ ์•Š์•˜์„ ๋•Œ๋Š” Lazy loading๋“ฑ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ์ด ๋งŽ์•˜๋Š”๋ฐ Next.js์—์„œ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต์„ ํ•ด์ค€๋‹ค๊ณ ํ•œ๋‹ค. ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•ด๋ณด์ž Image ์ปดํฌ๋„ŒํŠธ์— ๋‚ด์žฅ๋œ ์ตœ์ ํ™”๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค ํ–ฅ์ƒ๋œ ์„ฑ๋Šฅ - ์ตœ์‹  ์ด๋ฏธ์ง€ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐ ๋””๋ฐ”์ด์Šค์— ๋งž๋Š” ์˜ฌ๋ฐ”๋ฅธ ํฌ๊ธฐ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค ์‹œ๊ฐ์  ์•ˆ์ •์„ฑ - ์ž๋™์œผ๋กœ CLS (Cumulative Layout Shift) ๋ฅผ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค ๋น ๋ฅธ ํŽ˜์ด์ง€ ๋กœ๋“œ - ์ด๋ฏธ์ง€๊ฐ€ ๋ทฐํฌํŠธ์— ๋“ค์–ด ์™”์„ ๋•Œ๋งŒ ๋กœ๋“œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค ์œ ์—ฐํ•œ ์—์…‹ - ์™ธ๋ถ€์— ์ €์žฅ๋œ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ์—๋„ ํฌ๊ธฐ ์กฐ์ •์ด ๊ฐ€๋Šฅ ํ•„์ˆ˜ props src ์ •์ ์œผ๋กœ ๊ฐ€์ ธ์˜จ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์™ธ๋ถ€ URL ..
Next.js์˜ Pre-rendering Next.js๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ Pre-renderingํ•œ๋‹ค ์ฆ‰, Next.js๋Š” ํด๋ผ์ด์–ธํŠธ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋“œ๋˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ HTML์„ ์ƒ์„ฑํ•œ๋‹ค Pre-rendering์€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ SEO์— ์ตœ์ ํ™” ๋˜์–ด ์žˆ๋‹ค. Static Generation , Server-side Rendering Next.js์—๋Š” Static Generation, Server-side Rendering ๋‘๊ฐ€์ง€ ํ˜•ํƒœ์˜ Pre-rendering ๋ฐฉ์‹์„ ์ œ๊ณตํ•œ๋‹ค ๋‘๊ฐ€์ง€ Rendering ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์€ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ HTML์„ ์–ธ์ œ ์ƒ์„ฑ ํ•˜๋А๋ƒ์— ๋”ฐ๋ฅธ ์ฐจ์ด์ด๋‹ค. Static Generation - HTML์€ ๋นŒ๋“œ ์‹œ ์ƒ์„ฑ๋˜๋ฉฐ ์‚ฌ์šฉ์ž ์š”์ฒญ์— ๋”ฐ๋ผ ์žฌ์‚ฌ์šฉ๋œ๋‹ค. Server-side Rendering - HTML์€ ์‚ฌ์šฉ์ž ์š”์ฒญ๋งˆ๋‹ค ์ƒ..
Next.js์˜ _app๊ณผ _document ์•Œ์•„๋ณด๊ธฐ Next.js์—๋Š” _document, _app ๋‘๊ฐœ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค _app, _document๋Š” ํ”„๋กœ์ ํŠธ์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ ๋˜์–ด์•ผํ•  ๋‚ด์šฉ๋“ค์„ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค. App App ์ปดํฌ๋„ŒํŠธ๋Š” ์•ฑ์ด ์‹œ์ž‘ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ๊ธ€๋กœ๋ฒŒ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค ์˜ˆ์‹œ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ ์‹œ์—๋„ ๋ ˆ์ด์•„์›ƒ๊ณผ ์ƒํƒœ๊ฐ’์„ ์œ ์ง€ componentDidCatch๋ฅผ ํ†ตํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ํŽ˜์ด์ง€์— ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… Global CSS ์ถ”๊ฐ€ Header, Footer์™€ ๊ฐ™์€ ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ const App = ({ Component, pageProps }) => { return ( ); }; export default App; ๊ธฐ๋ณธ์ ์ธ _app ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ์ด๋ฉฐ props๋กœ Component์™€..
Next.js ์•Œ์•„๋ณด๊ธฐ Next.js์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” ๊ธ€ ์ตœ๊ทผ์— ์•Œ๊ฒŒ ๋œ ์ •๋ณด๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ๋А๋‚Œ์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด๋ ค ํ•œ๋‹ค Next.js๋Š” vercel ํŒ€์—์„œ ๋งŒ๋“  React Framework์ด๋‹ค. ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ•จ์œผ๋กœ ์–ป๋Š” ์ด๋“ ? CSR์˜ ๋‹จ์  CSR์˜ ๊ฒฝ์šฐ ๋ชจ๋“  JS ํŒŒ์ผ์„ ๋กœ๋“œํ•œ ์ดํ›„์— ์‚ฌ์šฉ์ž๊ฐ€ ์›น์„ ๋ณด๊ฒŒ ๋œ๋‹ค → ์ฆ‰ JS ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ธฐ ์ „ ๊นŒ์ง€ ์‚ฌ์šฉ์ž๋Š” ๋งŽ์€ ์‹œ๊ฐ„์„ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค ๐Ÿ‘‰ ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ฆ‰ ์„œ๋ฒ„์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋”ฉํ•˜๊ณ  ์œ ์ €๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” html (๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ Œ๋”๋ง๋œ ํŽ˜์ด์ง€)์„ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์‹œ๊ฐ„์„ ๋‹จ์ถ• ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. CSR์˜ ๋‹จ์  SEO - CSR์˜ ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋“œ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์›นํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์—†๋‹ค -> ๋น„์–ด์žˆ๋Š” (index.html) ๊ตฌ๊ธ€ ..