๐Ÿค”

NextJS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๐Ÿค”
NextJS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?
์›์„์˜ ์ƒ๊ฐ์ •๋ฆฌ

4๊ฐ€์ง€ ๋™์ž‘์›๋ฆฌ

Server Side Rendering(SSR), Server Static Generation(SSG), Incremental Server Rendering(ISR), Client Side Rendering(CSR)
 
์‚ฌ์šฉ์„ฑ ๊ฐœ์„ ์„ ์œ„ํ•ด Server Side Rendering์„ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ ํ™•์‹ 

NextJS์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ 
๋‹จ์ 
ํŽ˜์ด์ง€ ์ ‘์†์‹œ ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค(SSR) ์ฆ‰ SSR๊ณผ SSG๋ฅผ ์ง€์›ํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ์จ SEO ์ตœ์ ํ™”์™€ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ํ–ฅ์ƒ์— ๋„์›€์ด ๋œ๋‹ค.
React์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด ํ•™์Šต ๊ณก์„ ์ด ๋†’์„ ์ˆ˜ ์žˆ๋‹ค.
์ž๋™์œผ๋กœ ํŽ˜์ด์ง€์™€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฝ”๋“œ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ถˆ๋Ÿฌ์™€ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ ๋‹ค.
SSR ๋ฐ SSG๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜๊ณ  ๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜ ์ˆ˜ ์žˆ๋‹ค.
API ๋ผ์šฐํŒ…: ๋‚ด์žฅ๋œ API ๋ผ์šฐํŒ…์„ ํ†ตํ•ด ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SSR์€ ์„œ๋ฒ„ ์ธก์—์„œ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€๋กœ ํ•„์š”๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
lighthouse์˜ ์ ์ˆ˜๊ฐ€ ๋งŽ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค
๊ฐ„๋‹จํ•œ ์ •์  ์›น์‚ฌ์ดํŠธ๋‚˜ SPA(Single Page Application)์—๋Š” Next.js์˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
ใ…ค
ใ…ค
 

์šฐ๋ฆฌ์˜ ์งˆ๋ฌธ!

  1. ํ˜„์—…์—์„œ Next.js ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ถ”์„ธ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค
      • ํ˜„์—…์—์„œ Nextjs ๋งŽ์ด ์“ด๋‹ค. ์•„์ง page ๋ผ์šฐํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•œ๋‹ค.
  1. ์‹ ์ž… ์ด๋ ฅ์„œ์— Next.js ์‚ฌ์šฉ๊ฒฝํ—˜์ด ์žˆ๋Š” ๊ฒƒ์ด ์ทจ์—…์— ๋„์›€์ด ๋งŽ์ด ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
  1. 1. Next.js ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์ €ํฌ๋Š” Next.js ์˜ ์–ด๋–ค ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•˜์—ฌ ๊ณต๋ถ€ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„์ง€ ๋ฉ˜ํ† ๋‹˜์˜ ์˜๊ฒฌ์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. (2-3 ๋ฌถ์–ด์„œ ๋‹ต)
      • Nextjs ์‚ฌ์šฉ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ทจ์—…์— ๋„์›€์ด ๋˜๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค. ๋‹ค๋งŒ NextJS์„ ์“ฐ๋ฉด์„œ 1deps ๊นŠ๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๊ณ  ์ด๊ฒƒ์„ ํ‘œํ˜„ํ•  ์ค„ ์•„๋Š” ๊ฒƒ, ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋น ๋ฅด๊ฒŒ ๊ณต๋ถ€ํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์–ดํ•„ํ•˜๋ฉด ๋„์›€์ด ๋œ๋‹ค. ๋‹จ์ˆœํžˆ ์จ๋ดค๋‹ค๋Š” ๊ฒƒ์€ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
      • page ๋ผ์šฐํ„ฐ์™€ ์ƒˆ๋กœ ๋‚˜์˜จ app ๋ผ์šฐํ„ฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์–ด๋А ๊ฒƒ์„ ์‚ฌ์šฉํ•ด๋„ ์ข‹๋‹ค.
        • page: ๊ณ„์† ์กด์žฌํ•ด์™”๊ณ , ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ž˜์„œ ํ•™์Šต ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ถ”์ฒœํ•œ๋‹ค.(์–ธ์  ๊ฐ€ legacy๊ฐ€ ๋œ๋‹ค.)
        • app: ํ˜„์žฌ react18์ด ๋‚˜์•„๊ฐ€๊ณ ์ž ํ•˜๋Š” ๋ฐฉํ–ฅ๊ณผ ์ผ์น˜ํ•˜๋‹ค. ์‹ค์ œ react ๊ฐœ๋ฐœ์ž๊ฐ€ vercel๋กœ ์ž๋ฆฌ๋ฅผ ์˜ฎ๊ฒจ nextjs๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค. next๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ react18์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. react์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์—†๋‹ค๋ฉด ๋” ์ข‹์„์ˆ˜๋„ ์žˆ๋‹ค. react๋Š” lib, next๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฏ€๋กœ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์“ด๋‹ค๋Š” ๊ฒƒ์€ ์•ฝ์†์ธ๋ฐ lib๋Š” ์–ด๋–ป๊ฒŒ ์“ธ์ง€ ๋ณ€ํ˜•์ด ์•„์ฃผ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. app ๋ผ์šฐํ„ฐ๋ฅผ ์“ฐ๋ฉด์„œ server component SSG SSR ๋“ฑ์˜ ๊ฐœ๋…๋“ค์„ ์ตํ˜”๋‹ค๋ฉด ๊ณต๋ถ€ํ• ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์ถฉ๋ถ„ํžˆ ์žˆ๋‹ค. ์ถ”์ฒœํ•œ๋‹ค. ๋‹ค๋งŒ ๋ž˜ํผ๋Ÿฐ์Šค๊ฐ€ ๋งŽ์ด ์—†์–ด์„œ ํ•™์Šต ๋น„์šฉ์ด ๋งŽ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์„ฑ๊ณต์ ์œผ๋กœ ํ•™์Šต์„ ํ•œ๋‹ค๋ฉด 4๋ฐฐ ์ด์ƒ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
4. ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ๋Š” React ์™€ Next ๋‘˜ ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์ถ”์ฒœํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!
  • next๋ฅผ ์“ฐ๋“  react๋ฅผ ์“ฐ๋“  ๋‘˜ ๋‹ค ์ข‹๋‹ค. ์œ„์—์„œ ๋งํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ํ•™์Šต์„ ๋ชฉ์ ์œผ๋กœ (์–ด์ฐจํ”ผ react18๊ณผ ๋‚˜์•„๊ฐ€๋Š” ๋ฐฉํ–ฅ์ด ๊ฐ™์œผ๋‹ˆ๊น) next๋ฅผ ์“ฐ๋ฉด ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

์œ„ ์ž๋ฃŒ๋ฅผ ํ•จ๊ป˜ ์ฝ์–ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”!!
ํ˜œ์ง„์˜ ์ƒ๊ฐ์ •๋ฆฌ
์šฐ๋ฆฌ๋Š” ์™œ Next ๋ฅผ ์จ์•ผํ• ๊นŒ?
  • React: JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • Next: React ํ”„๋ ˆ์ž„์›Œํฌ -> ์ฆ‰, Next ๋ฅผ ์“ด๋‹ค๊ณ  React ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜!

Next ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๋‚˜์˜ ๊ฒฐ๋ก : ๋ฆฌ์•กํŠธ์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋žœ๋”๋ง ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด

1. CSR ๊ณผ SSR

์‚ฌ์‹ค CSR ๋„ ์›น ํŽ˜์ด์ง€์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๊ธฐ์ˆ  ์›๋ž˜ ์˜›๋‚  ์›น์€ ์‚ฌ์‹ค ์ „๋ถ€ ๋‹ค SSR ์ด์—ˆ์Œ...!
SSR ์ด๋ž€?  - ์„œ๋ฒ„์—์„œ javascript ํŒŒ์ผ์„ html ๋กœ ๋žœ๋”๋งํ•˜๊ณ , ๊ทธ๊ฑธ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๋กœ ์ „๋‹ฌ  - ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ชจ๋“  javascript ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด html ์„ ๋ณด์—ฌ์คŒ  - ๋”ฐ๋ผ์„œ ์ดˆ๊ธฐ ํŽ˜์ด์ง€์˜ First Contentful Paint ๋˜๋Š” Largest Contentful Paint ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค  - ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํŽ˜์ด์ง€ ์ด๋™ํ• ๋•Œ๋งˆ๋‹ค ๋˜ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•ด์„œ, ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ์ปค์ง€๊ณ , ์ธํ„ฐ๋„ท ๋Œ€์—ญํญ์ด ๋งŽ์ด ์†Œ๋ชจ๋จ
CSR ์ด๋ž€?  - ์„œ๋ฒ„์—์„œ javascript ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด๋ฉด, ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ทธ๊ฑธ html ๋กœ ๋žœ๋”๋งํ•จ  - ๋ธŒ๋ผ์šฐ์ €๋Š” javascript ํŒŒ์ผ์„ ํ•ด์„ํ•˜๋Š” ๋™์•ˆ ๋นˆ html ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์คŒ  - ํ•˜์ง€๋งŒ ํ•œ ๋ฒˆ ์ปจํ…์ธ ๊ฐ€ ๋กœ๋“œ๋˜๋ฉด, ์žฌํ˜ธ์ถœ์ด ์—†์œผ๋ฏ€๋กœ ๋ฐฑ์—”๋“œ ํ˜ธ์ถœ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Œ  - ๊ทธ๋ฆฌ๊ณ  ํŽ˜์ด์ง€ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ์ปจํ…์ธ ๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š์•„๋„ ๋ผ์„œ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ๊ณผ ๊ฐ™์€ ์„ฑ๋Šฅ
 
๋ฆฌ์•กํŠธ์—์„œ SSR
  • ๋ฆฌ์•กํŠธ๋Š” CSR ์ฒ ํ•™์„ ํ† ๋Œ€๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ๋ฆฌ์•กํŠธ๋Š” ๊ณต์‹์ ์œผ๋กœ๋Š” SSR ์ง€์›์€ ์•ˆ๋˜๊ณ , ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
  • SSR ๊ณผ ์‚ด์ง ๋‹ค๋ฅธ ๊ฐœ๋…์ด์ง€๋งŒ, React Server Component ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๊ธด ํ•จ(์•„์ง ์ถœ์‹œ ์•ˆํ•จ)
๋„ฅ์ŠคํŠธ์—์„œ SSR
  • ์‚ฌ์‹ค ๋„ฅ์ŠคํŠธ๋„ ๋ฆฌ์•กํŠธ์™€ ๋™์ผํ•˜๊ฒŒ SPA์œผ๋กœ ๋™์ž‘ํ•จ
  • ํ•˜์ง€๋งŒ ๋นˆ html ์ด ์•„๋‹Œ, server side ์—์„œ rendering ๋œ html ์„ ๊ฐ€์ง€๊ณ  SPA ๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ์ฐจ์ด
  • ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” SPA ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ์ƒํƒœ๊ด€๋ฆฌ ๋˜ํ•œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ (์ฐ SSR ์€ ์ „์—ญ์ƒํƒœ๊ด€๋ฆฌ ๋ถˆ๊ฐ€๋Šฅํ•จ)

2. SSG

SSG ๋ž€?
  • ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์‹œ, pre-render page ๋ฅผ ๋งŒ๋“ค์–ด static ํŽ˜์ด์ง€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋ฏ€๋กœ ์‘๋‹ต์ด ๋น ๋ฆ„
  • ๋ฐฐํฌ ๋˜๊ณ ๋‚˜๋ฉด ์‚ฌ์ „ ๋ Œ๋”๋งํ•œ ํŽ˜์ด์ง€๋Š” ๋ณ€๊ฒฝ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ž์ฃผ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ํŽ˜์ด์ง€์—๋งŒ ์‚ฌ์šฉ
 

Next ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ๋‹จ์ 

ํ”„๋ ˆ์ž„์›Œํฌ๋ผ์„œ ์ƒ๊ธฐ๋Š” ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ํ•œ๊ณ„

Next ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ตฌํ˜„ ๋ฐฉ์‹์€ ์ „๋ถ€ CSR ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๊ณ , Next ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  React ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์ด ๊ตฌํ˜„ํ•ด๋„ ๋จ.
ํ•˜์ง€๋งŒ, ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ฐ•์š”ํ•˜๋Š” ๊ทœ์น™์„ ๋”ฐ๋ฅผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ.
  • ์–ด๋–ค ๋ถ€๋ถ„์€ ๊ตฌํ˜„์ด ๋„ˆ๋ฌด ์ˆจ๊ฒจ์ ธ ์žˆ์–ด ์šฐ๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์ปค์Šคํ…€ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์Œ
  • ํ•˜์ง€๋งŒ ํ‰๋ฒ”ํ•œ ์š”๊ตฌ์‚ฌํ•ญ ์ˆ˜์ค€์—์„œ๋Š” ์•„๋งˆ ๊ทธ๋Ÿฐ์ผ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ
  • Next ์—์„œ ์ œ๊ณตํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๋Š” ๊ฒƒ์˜ ์ด์ ์ด ๋” ํฌ๋‹ค
 
๋ฆฌ์•กํŠธ์—์„œ SSR, SSG ๊ฐ™์€ ๊ธฐ์ˆ ๋“ค์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์‚ฌ์‹ค Next ๋ง๊ณ ๋„ Gatsby ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ๊ธดํ•จ. ํ•˜์ง€๋งŒ SSR์„ ์ง€์›ํ•˜๋Š” ๋ฆฌ์•กํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ๋ถ„์•ผ์—์„œ๋Š” Next ๊ฐ€ ์••๋„์ ์ธ ์„ ํ˜ธ๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ์ธต์ด ๋งŽ๊ณ  ์ถ”ํ›„ ์ง€์›๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์€ Next ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐ.
 
๋™ํ™˜์˜ ์ƒ๊ฐ์ •๋ฆฌ

React์˜ ํ•œ๊ณ„

  1. TV(Time To View), ์ฆ‰ FCP(First Contentful paint)๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค
  1. js์— ์˜ํ•ด ํŽ˜์ด์ง€๊ฐ€ ๊ทธ๋ ค์ง€๋ฏ€๋กœ js๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค. ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ js๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค๋ฉด ์ฒซ๋ฒˆ์งธ ํŽ˜์ด์ง€์กฐ์ฐจ ๋ณผ ์ˆ˜ ์—†๋‹ค
  1. SEO(๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”)๊ฐ€ ํž˜๋“ค๋‹ค
  1. ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค - Client์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„์•ผํ•˜๋Š”๋ฐ API key, ์„œ๋ฒ„ ์ฃผ์†Œ ๋“ฑ์ด ๋…ธ์ถœ๋œ๋‹ค
  1. CDN์— html์ด ์บ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค

Next.js์˜ ์žฅ์ 

  1. ์—ฌ๋Ÿฌ ๋ Œ๋”๋ง ๋ฐฉ๋ฒ•์„ ํ˜ผํ•ฉํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (SSG, ISR, SSG, CSR)
  1. ์ž๋™์œผ๋กœ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ ์„œ๋ฒ„ ๋ Œ๋”๋ง ์ง€์› - FCP ๊ฐ์†Œ
  1. ๋ฐ์ดํ„ฐ ํŒจ์นญ ์„ค์ • ๊ฐ€๋Šฅ
    1. ์ฃผ์ฒด: ์„œ๋ฒ„ or ํด๋ผ์ด์–ธํŠธ
      ํŒจ์น˜ ์ฃผ๊ธฐ: ํ•œ๋ฒˆ or ์ฃผ๊ธฐ์  ํŒจ์นญ
  1. nested layout - outlet์„ ์‚ฌ์šฉํ•  ๋•Œ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ layout.js ์‚ฌ์šฉ๊ฐ€๋Šฅ
  1. html streaming - ์›๋ž˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์•ผ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š”๋ฐ Suspense๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ chunk๋กœ ๋‚˜๋ˆ ์„œ ๋ฐ›์•„ ํ™”๋ฉด์˜ ์ผ๋ถ€๋ถ„๋ถ€ํ„ฐ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค
  1. turbopack - ์ƒˆ๋กœ์šด ๋ฒˆ๋“ค๋Ÿฌ๋กœ dev๋ชจ๋“œ์—์„œ ์›นํŒฉ๋ณด๋‹ค 700๋ฐฐ vite๋ณด๋‹ค 10๋ฐฐ ๋น ๋ฆ„, ์•„์ง alpha๋ผ ์‹ค์ œ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Œ
  1. SSG, ISR์„ ์‚ฌ์šฉํ•˜๋ฉด CDN์— ํ™”๋ฉด ์บ์‹ฑ ๊ฐ€๋Šฅ
  1. ๋ฏธ๋“ค์›จ์–ด, ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜ ์‚ฌ์šฉ์œผ๋กœ ๋ณด์•ˆ์ด ์ข‹์•„์ง„๋‹ค

Next์˜ ๋‹จ์ 

  • ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ์žˆ๋‹ค
  • ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค
  • legacy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ถฉ๋Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋•Œ๋Š”?

  • ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์™ธ์˜ ํฐ ๋‹จ์ ์€ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐํฐ ๋‹จ์ ์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”ํžˆ ๋งํ•˜๋Š” ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์€ Next.js์˜ ๋‹จ์ ์ด ์•„๋‹ˆ๋ผ SSR์˜ ๋‹จ์ ์ž…๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ SSG, ISR, SSR, CSR์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด๋ณด๋Š” ๊ฒฝํ—˜์„ ๊ฐ€์ง€๋ฉด ์–ด๋–จ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.
 
 
ํ˜„์ง€์˜ ์ƒ๊ฐ์ •๋ฆฌ
์žฅ์ 
  • ๊ฒ€์ƒ‰์—”์ง„์ตœ์ ํ™”
  • ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜ ๋ Œ๋”๋ง ํŒจํ„ด์„ ์ œ๊ณต
    • SSR
      • ์žฅ์ : HTML์„ ๋ Œ๋”๋งํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์„ ์Ÿ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
      • ๋‹จ์ : CSR์€ ๋ณด์—ฌ์ง€๋Š” ์‹œ๊ฐ„(Time To View)๊ณผ ์ธํ„ฐ๋ž™์…˜์ด ์ด๋ฃจ์–ด์ง€๋Š” ์‹œ๊ฐ„(Time To Interaction)์ด ๋™์ผํ•˜์ง€๋งŒ, Server Side Rendering์€ ๋ณด์—ฌ์ง€๋Š” ์‹œ๊ฐ„๊ณผ ์ธํ„ฐ๋ž™์…˜์ด ์ด๋ฃจ์–ด์ง€๋Š” ์‹œ๊ฐ„ ์‚ฌ์ด์— ๊ณต๋ฐฑ์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค.
  • ์ฝ”๋“œ๋ถ„ํ•  : ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํŽ˜์ด์ง€์—์„œ ์›ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š”๊ฒƒ
    • ๋ชจ๋“  ๋ฒˆ๋“ค์ด ํ•˜๋‚˜๋กœ ๋ฌถ์ด์ง€ ์•Š๊ณ , ๊ฐ๊ฐ ๋‚˜๋‰˜์–ด ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
 
๋‹จ์ 
  • ํ•™์Šต ๊ณก์„ 
  • SSR์˜ ๋‹จ์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ๋А๋ฆฌ๋ฉด ์›น์‚ฌ์ดํŠธ๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋А๋ ค์ง„๋‹ค. ์„œ๋ฒ„๋ถ€ํ•˜๊ฐ€ CSR์— ๋น„ํ•ด ๋งŽ์€ํŽธ์ด๋‹ค.
  • WebSocket, WebRTC ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์•ผํ•œ๋‹ค๋ฉด ์ง์ ‘ Nodejs + express ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“œ๋Š”๊ฒŒ ๋” ๋‚ซ๋‹ค..?
๊ฒฐ๋ก 
๋„ฅ์ŠคํŠธ๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ํŒจํ„ด์„ ์ œ๊ณตํ•ด์ฃผ๋Š”๊ฒƒ์ด ํฐ ์žฅ์ ์ธ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ƒํ•˜๋Š”์ง€์— ๋”ฐ๋ผ์„œ ๋„ฅ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์„ ๋„์ž…ํ•˜๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•™์Šต์ ์ธ ์ธก๋ฉด์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ํŒจํ„ด์„ ์ œ๊ณตํ•˜๋‹ˆ๊น ๋ Œ๋”๋ง ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผ์„ ํ•ด๋ณด๋Š” ๊ธฐํšŒ๊ฐ€ ์ƒ๊ธธ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.