๐Ÿ–ฅFrontEnd/React

Next.js๋Š” ๋ฌด์—‡์ธ๊ฐ€? ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋Š๋‚€ Next.js์˜ ์žฅ์ ์€?

hellohailie 2022. 11. 8. 20:05

 

โœ”๏ธ Next.js๋Š” ๋ฌด์—‡์ธ๊ฐ€?

vercel์—์„œ ๋งŒ๋“  ๋ฆฌ์•กํŠธ์˜ ํ”„๋ ˆ์ž„์›Œํฌ!!

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๊ธฐ์ˆ ๊ณผ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๊ธฐ์ˆ ์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜ฌ์ธ์› ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค! 

 

api๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ํ”„๋ก ํŠธ์—”๋“œ์ธ ๋ฆฌ์•กํŠธ์™€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„œ๋ฒ„ ๊ธฐ๋Šฅ๊ณผ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

** ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ํŠน์ •ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ๋“ˆํ™”ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํด๋”๋ช…, ํŒŒ์ผ๋ช… ๋“ฑ์— ๋Œ€ํ•œ ๊ทœ์น™์ด ์—†๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ์— ๋น„ํ•ด ์ž์œ ๋กญ์Šต๋‹ˆ๋‹ค.

ex) ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž๋ฅผ ๋•Œ '๋„๊ตฌ'์ธ '๊ฐ€์œ„'๋ฅผ ์‚ฌ์šฉํ•ด์„œ '๋‚ด๊ฐ€' ์ง์ ‘ ์ปจํŠธ๋กคํ•˜์—ฌ ์ž๋ฅธ๋‹ค. 

 

** ํ”„๋ ˆ์ž„์›Œํฌ

๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ํŠน์ •ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ๋“ˆํ™”ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

ํด๋”๋ช…, ํŒŒ์ผ๋ช… ๋“ฑ์— ๋Œ€ํ•œ ๊ทœ์น™์ด ์žˆ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋น„ํ•ด ์ข€ ๋” ์—„๊ฒฉํ•ฉ๋‹ˆ๋‹ค.

ex) ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ด๋™ํ•  ๋•Œ '๋„๊ตฌ'์ธ ๋น„ํ–‰๊ธฐ๋ฅผ ํƒ€๊ณ  ์ด๋™ํ•˜์ง€๋งŒ '๋น„ํ–‰๊ธฐ'๊ฐ€ ์ปจํŠธ๋กคํ•˜๊ณ  ๋‚˜๋Š” ๊ฐ€๋งŒํžˆ ์•‰์•„ ์žˆ์–ด์•ผํ•œ๋‹ค. 

 

 

 

โœ”๏ธ React๋ฅผ ์ž˜ ์“ฐ๋‹ค๊ฐ€ ์™œ Next.js๋ฅผ ๋งŒ๋“ ๊ฑฐ์ง€?

 

SEO(Search Engine Optimization)๋ฅผ ์œ„ํ•œ Server-Side Rendering(SSR)์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ!

 

 

React๋Š” Client Side Rendering(CSR)์„ ํ•ฉ๋‹ˆ๋‹ค. ์›น์‚ฌ์ดํŠธ๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ๋นˆ html์„ ๊ฐ€์ ธ์™€ script๋ฅผ ๋กœ๋”ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฒซ ๋กœ๋”ฉ ์‹œ๊ฐ„๋„ ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ  Search Engine Optimization(SEO)์— ์ทจ์•ฝํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋Œ€์‹œ๋ณด๋“œ๋‚˜ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ ์“ธ ์ˆ˜ ์žˆ๋Š” privateํ•œ ์‚ฌ์ดํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

 

์ด์— ๋น„ํ•ด Next.js๋Š” pre-reloading์„ ํ†ตํ•ด ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ Œ๋”๋ง๋œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ์ข‹์€ ๊ฒฝํ—˜์„ ์ฃผ๊ณ , ๊ฒ€์ƒ‰ ์—”์ง„์— ์ž˜ ๋…ธ์ถœ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” SEO์—์„œ๋„ ์žฅ์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

** Search Engine Optimization/๊ฒ€์ƒ‰์—”์ง„์ตœ์ ํ™”(์ดํ•˜ “SEO”๋ผ ํ•œ๋‹ค)

๊ตฌ๊ธ€๊ณผ ๋„ค์ด๋ฒ„์™€ ๊ฐ™์€ ๊ฒ€์ƒ‰์—”์ง„์˜ ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ ์›น ์‚ฌ์ดํŠธ ํ˜น์€ ์ฝ˜ํ…์ธ ๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ƒ์œ„์— ๋…ธ์ถœ์‹œํ‚ค๋Š” ์ž‘์—…์˜ ์ผ๋ จ์˜ ๋…ธ๋ ฅ๊ณผ ๊ณผ์ •

 

 

โœ”๏ธ ssr์™€ csr์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด์ž!

 

SSR CSR
์„œ๋ฒ„์—์„œ html ๊ทธ๋ ค์คŒ ํด๋ผ์ด์–ธํŠธ์—์„œ html ๊ทธ๋ ค์คŒ
html ๋ Œ๋”๋ง๋ถ€ํ„ฐ ํ•œ ๋‹ค์Œ์— js๋ฅผ ๋‹ค์šด์„ ๋ฐ›๋Š”๋‹ค. (js ๋‹ค์šด๋ฐ›๊ธฐ ์ „์— html ๋ฅผ ๋‹ค์šด ๋ฐ›์•„์„œ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒ€์ƒ‰์—”์ง„ ํด๋กค๋ง์ด ๊ฐ€๋Šฅ) js๋‹ค์šด ๋ฐ›๊ณ  react๋ฅผ ๋Œ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์—”์ง„ ๋ด‡์˜ ํด๋กค๋ง์ด ์•ˆ๋œ๋‹ค. 

 

 

โœ”๏ธ Next.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ  React์™€ ๋งŽ์€ ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜?

NO!!

 

์•„๋ž˜ ๊ณต์‹๋ฌธ์„œ์—์„œ ๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UI๋ฅผ ๊ตฌ์ถ•ํ•œ ๋‹ค์Œ Next.js๋กœ ๋ผ์šฐํŒ…, ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ, integration๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋™์‹œ์— ๊ฐœ๋ฐœ์ž ๋ฐ ์ตœ์ข… ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

You can use React to build your UI, then incrementally adopt Next.js features to solve common application requirements such as routing, data fetching, integrations - all while improving the developer and end-user experience.

 

https://nextjs.org/learn/foundations/about-nextjs

 

Learn | Next.js

Production grade React applications that scale. The world’s leading companies use Next.js by Vercel to build pre-rendered applications, static websites, and more.

nextjs.org

 

 

โœ”๏ธ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋Š๋‚€ Next.js์˜ ์žฅ์ ์€?

์ž‘์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ Next.js๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•„์ง ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ๋งŽ์ง€๋งŒ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค!

1๏ธโƒฃ pages ํด๋” ์•ˆ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ฒฝ๋กœ๊ฐ€ ์„ค์ •๋œ๋‹ค!

 

1. page ํด๋”์— ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ 

2. ์•„๋ž˜์ฒ˜๋Ÿผ href='' ์•ˆ์— ํŽ˜์ด์ง€ ๋ช…์„ ์“ฐ๋ฉด ๋!!

 

2๏ธโƒฃ Next/Image๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๊ฐ€ ์‰ฝ๋‹ค! 

1. lazyloading 

-> ์ฆ‰ ํ™”๋ฉด์— ํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋งŒ ๋จผ์ € ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๊ทธ ์™ธ์˜ ์ด๋ฏธ์ง€๋“ค์˜ ๋กœ๋”ฉ์„ ์ง€์—ฐ์‹œํ‚ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

2. ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌ๋งท ์ตœ์ ํ™” 

-> jpg, pngํŒŒ์ผ์„ webpํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์šฉ๋Ÿ‰์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

* webp๋ž€ ๊ตฌ๊ธ€์—์„œ ๋งŒ๋“  ์ตœ์ ํ™”๋œ ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌ๋งท ์ž…๋‹ˆ๋‹ค. 

 

3๏ธโƒฃ ํŽ˜์ด์ง€๊ฐ„ ๋น ๋ฅด๊ณ  ๋งค๋„๋Ÿฌ์šด ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค!

React์—์„œ๋Š” React Router๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ–ˆ๋Š”๋ฐ Next.js๋Š” React Router๋ฅผ ๋”ฐ๋กœ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด < Link /> ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€๊ฐ„์˜ ๋น ๋ฅด๊ณ  ๋งค๋„๋Ÿฌ์šด ์ด๋™์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

HTML์˜ a ํƒœ๊ทธ์™€ ๋‹ฌ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ๋ฆฌ๋กœ๋”ฉํ•˜์ง€ ์•Š๊ณ ๋„ ํŽ˜์ด์ง€๊ฐ„ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๊ณ , link ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ทฐํฌํŠธ์— ๋ณด์˜€์„ ๋•Œ ๊ด€๋ จ ํŽ˜์ด์ง€๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ๋‹ค ๋†“๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋งํฌ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. 

 

 

โœ”๏ธ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…์€ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?

npx create-next-app@latest

 

์ดํ›„ javascript๋ฅผ ์‚ฌ์šฉํ• ์ง€, typescript๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์„ ํƒํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.