โœ๏ธ What I Learned/TIL

[TIL] React.js์™€ Next.js์˜ ์ฐจ์ด์  - Library vs Framework, CSR vs SSR

Jiwon() 2023. 8. 15. 19:40

๐Ÿ’ก TIL 20230815

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vs ํ”„๋ ˆ์ž„์›Œํฌ, CSR vs SSR


1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(React) vs ํ”„๋ ˆ์ž„์›Œํฌ(Next.js)

React์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์„ค์ •ํ•ด ์ฃผ์—ˆ๋˜ ๊ฒƒ๋“ค์ด Next์—์„œ๋Š” ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋‹ค.

 

1) ๐Ÿ“š ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

React๋Š” JavaScript Library

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ์ž์›(๊ธฐ๋Šฅ: ํ•จ์ˆ˜)์˜ ๋ชจ์ž„
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋กœ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

 

2) ๐Ÿ› ๏ธ ํ”„๋ ˆ์ž„์›Œํฌ

Next.js๋Š” React Framework

  • ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ํ‹€์„ ์ œ๊ณตํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ
  • ์ฝ”๋“œ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์ž˜ ์ ๊ธฐ๋งŒ ํ•œ๋‹ค๋ฉด framework๋Š” ๋‚ด๊ฐ€ ์“ด ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์คŒ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์–ด์ง„ ์ง‘๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ, ์ฝ”๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋„ฃ์–ด์ฃผ๋ฉด์„œ ์ง‘์„ ์™„์„ฑ์‹œํ‚ค๋Š” ๊ฒƒ์ด์ง€๋งŒ, ์ง‘ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜๋Š” ์—†๋‹ค(=framework ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜๋Š” ์—†๋‹ค).

 

 


2. CSR vs SSR

์œ ์ €, ๋ธŒ๋ผ์šฐ์ €, ์„œ๋ฒ„๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

 

1) ๐Ÿ–ฅ๏ธ CSR

Client Side Rendering - React.js

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” '๋ธŒ๋ผ์šฐ์ €'๋ฅผ ๋œปํ•œ๋‹ค.

์ฆ‰, ์œ ์ €๊ฐ€ ๋ณด๋Š” UI๋ฅผ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๊ณผ์ •์„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•œ๋‹ค.

  1. ์œ ์ €๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์•ฑ์— ์ ‘์†ํ•˜๋ฉด,
  2. ์•ฑ์€ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋นˆ HTML ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ฆ‰ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ „๋‹ฌํ•œ๋‹ค.
  3. ๋ธŒ๋ผ์šฐ์ €๋Š” JS ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ๋™์‹œ์— ์œ ์ €๋Š” ๋นˆ ํ™”๋ฉด(์ ‘์†์— ๋Œ€ํ•œ ์‘๋‹ต)์„ ๋ณด๊ฒŒ ๋œ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ €์—์„œ JS ํŒŒ์ผ์˜ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋๋‚˜๋ฉด, ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” JS ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ๋‹ค.
  5. ๋ธŒ๋ผ์šฐ์ €์— ์žˆ๋Š” ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๊ฐ€ UI๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค. (๋™์  ๋ Œ๋”๋ง)
  6. ์œ ์ €๋Š” ์•ฑ์ด ๋ณด์—ฌ์ฃผ๊ณ ์ž ํ–ˆ๋˜ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

2) ๐Ÿ”™ SSR

Server Side Rendering - Next.js

์„œ๋ฒ„์—์„œ UI๋ฅผ ๊ตฌ์„ฑํ•œ ํ›„ ์œ ์ €์—๊ฒŒ ์‘๋‹ตํ•ด ํ™”๋ฉด์„ ๋ณด์—ฌ์ค€๋‹ค.

  1. ์œ ์ €๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์•ฑ์— ์ ‘์†ํ•˜๋ฉด,
  2. ์„œ๋ฒ„์—์„œ ๋ฆฌ์•กํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  3. ๋ฆฌ์•กํŠธ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ๋ฆฌ์•กํŠธ๋Š” UI๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.
  4. ๋ Œ๋”๋ง ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ HTML์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋•Œ ์œ ์ €๋Š” ์•ฑ์˜ ์ดˆ๊ธฐํ™”๋ฉด(์ ‘์†์— ๋Œ€ํ•œ ์‘๋‹ต)์„ ๋ณด๊ฒŒ ๋œ๋‹ค.
  5. ์ดํ›„ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” JS ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›๊ณ  ์‹คํ–‰์‹œํ‚จ๋‹ค. ์ด ๋•Œ๋ถ€ํ„ฐ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฆฌ์•กํŠธ ์•ฑ๊ณผ ๊ฐ™์ด CSR์˜ ๋™์ž‘(๋™์  ๋ Œ๋”๋ง)์„ ํ•˜๊ฒŒ ๋˜๊ณ , ์ด ๊ณผ์ •์„ hydration์ด๋ผ๊ณ  ํ•œ๋‹ค.

hydration์˜ ๊ณผ์ •์„ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด,

  • next.js๋Š” react.js๋ฅผ ๋ฐฑ์—”๋“œ์—์„œ ๋™์ž‘์‹œ์ผœ์„œ ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์„œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ Œ๋”๋งํ•œ๋‹ค.
  • ๋ Œ๋”๋ง์ด ๋๋‚˜๋ฉด HTML์ด ๋˜๊ณ  next.js๋Š” ๊ทธ HTML์„ ํŽ˜์ด์ง€์˜ ์†Œ์Šค์ฝ”๋“œ์— ๋„ฃ์–ด์ค€๋‹ค.
  • ๊ทธ๋Ÿผ ์œ ์ €๋Š” JS์™€ react.js๊ฐ€ ๋กœ๋”ฉ๋˜์ง€ ์•Š์•˜๋”๋ผ๋„ ์ปจํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ ํ›„์— react.js๊ฐ€ ๋กœ๋”ฉ๋˜์—ˆ์„ ๋•Œ, ๋จผ์ € ์กด์žฌํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ๋“ค๊ณผ ์—ฐ๊ฒฐ ๋˜์–ด์„œ ์ผ๋ฐ˜์ ์ธ react.js ์•ฑ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
hydration ๊ณผ์ •์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜ ๋ธ”๋กœ๊ทธ์—์„œ ๋„ˆ๋ฌด๋‚˜๋„ ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด์žˆ์–ด ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„๋“ฏ ํ•˜๋‹ค.
Next.js์˜ ๋ Œ๋”๋ง ๊ณผ์ •(Hydrate) ์•Œ์•„๋ณด๊ธฐ

 

 


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

[NextJS] NextJS ์‹œ์ž‘ํ•˜๊ธฐ - 2. React.js์™€ Next.js์˜ ์ฐจ์ด์  (framework vs. library, CSR vs. SSR)