๐Ÿค ์€์ง€log ๐Ÿค

[REACT] ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ๋ฉด์ ‘ ๊ฐœ๋… ์ •๋ฆฌ ๋ณธ๋ฌธ

๐Ÿ’™ React

[REACT] ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ๋ฉด์ ‘ ๊ฐœ๋… ์ •๋ฆฌ

Eun_zii 2023. 11. 2. 15:58

 

๐Ÿ”† React

: ๋ฆฌ์•กํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•˜๋‚˜๋กœ์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์›น ํ”„๋ ˆ์ž„ ์›Œํฌ ์ด๋‹ค.

 

๐Ÿ–‡๏ธ React์˜ ์›๋ฆฌ, ํŠน์ง•, ์žฅ๋‹จ์ 

: ๋ฆฌ์•กํŠธ๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด ํ•œ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ๋ฅด๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค.

  • UI๋ฅผ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋กœ ์ชผ๊ฐœ์„œ ๋งŒ๋“ ๋‹ค. ์ „์ฒด ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค.
  • ๋ฆฌ์•กํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋™์ ์ธ UI๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค.

๐Ÿ–‡๏ธ Javascript + XML

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— HTML ํƒœ๊ทธ๋ฅผ ๋ผ์–น์€ ๋ฌธ๋ฒ•
    HTML ํƒœ๊ทธ ์•ˆ์—์„  ์ค‘๊ด„ํ˜ธ {}๋ฅผ ์‚ฌ์šฉํ•ด์„œ JS๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
const apple = "์‚ฌ๊ณผ"
const title = <h1>{apple} ๋“œ์‹ค๋ถ„?</h1>

 


๐Ÿ–‡๏ธ Component

  • ํ™”๋ฉด์„ ์ด๋ฃจ๋Š” '์š”์†Œ'๋กœ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ฝ”๋“œ ์กฐ๊ฐ์ด๋‹ค.
  • ๊ฐœ๋ฐœํ•˜๋‹ค๊ฐ€ ํŠน์ • ๋ถ€๋ถ„์—์„œ ๋ฒ„๊ทธ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ๊ทธ ์ปดํฌ๋„ŒํŠธ๋งŒ ์ˆ˜์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๊ทธ๋ž˜์„œ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.
  • ๋ฆฌ์•กํŠธ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ค„์ง„๋‹ค. ์ฆ‰, ๋ถ€๋ชจ์—์„œ ์ž์‹์œผ๋กœ ํ•œ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ props๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต์œ ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

Props

  • ํ”„๋กœํผํ‹ฐ์˜ ์ค„์ž„๋ง์ด๊ณ  ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ -> ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฐœ๋…์ด๋‹ค.
  • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ ๋ฐ›์€ props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๊ณ  Props๋ฅผ ์ „๋‹ฌํ•ด์ค€ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋งŒ props๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

State

  • ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • useState ํ•จ์ˆ˜๋กœ ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • const [์ƒํƒœ๋ช…, ์ƒํƒœ๋ณ€๊ฒฝํ•จ์ˆ˜๋ช…] = useState(์ดˆ๊ธฐ๊ฐ’);

๐Ÿ’ก Props์™€ State์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

: props๋Š” ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์ด๊ฑฐ๋‚˜ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ, ์ฆ‰ ๋ฐ์ดํ„ฐ์˜ ๊ธฐ์›์ด ์ž๊ธฐ ์ž์‹ ์ด ์•„๋‹Œ ๊ฒƒ์ด๊ณ , state๋Š” ์ž๊ธฐ์ž์‹ ์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋งŒ๋“ค์–ด๋‚ธ ๋ฐ์ดํ„ฐ

 

๐Ÿ’ก ์™œ state๋ฅผ ์ง์ ‘ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  setState (useState)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜์š”?

: ์ง์ ‘ state๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋ฆฌ์•กํŠธ๋Š” render ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„์„œ ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  setState๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ state๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฆฌ์•กํŠธ ์—”์ง„์ด render ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ Œ๋”๋ง์„ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 


๐Ÿ–‡๏ธ ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ

  • ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๊ณ , ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์ƒ์— ๋‚˜ํƒ€๋‚˜๊ณ , ์—…๋ฐ์ดํŠธ ๋˜๊ณ , ์‚ฌ๋ผ์ง€๊ฒŒ ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋“ค ์ด๋‹ค.

๐Ÿ–‡๏ธ SPA (Single Page Application)

์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ํŽ˜์ด์ง€์˜ ๋จธ๋ฌด๋ฅด๋ฉด์„œ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋กœ ๋ฐ”๋€” ๋•Œ ๋งˆ๋‹ค ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐ›์•„์™€(์ƒˆ๋กœ๊ณ ์นจ ์—†์ด) ๋ถ€๋ถ„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

  • ์ฒซ ํ™”๋ฉด ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๋‹ค์†Œ ๊ธธ๋‹ค๋Š” ์ ์ด ์žˆ๋‹ค.
  • ๋ผ์šฐํŒ…์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ–‡๏ธ Virtual DOM

: ๊ฐ€์ƒ์˜ DOM ์ด๋ฉฐ ์‹ค์ œ๋กœ ๋ณด์—ฌ์ง€๋Š” DOM์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์ƒ์œผ๋กœ ์กด์žฌํ•˜๋Š” DOM์ด๋‹ค.

  • ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ณณ์˜ UI๋ฅผ Virtual DOM์„ ํ†ตํ•ด์„œ ๋ Œ๋”๋ง ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ณ ๋‚˜์„œ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €์— ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” DOM๊ณผ ๋น„๊ตํ›„ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๊ณณ์„ ๊ฐ์ง€ํ•˜์—ฌ ์‹ค์ œ DOM์— ํŒจ์น˜ ์‹œ์ผœ์ค€๋‹ค.

: ๋ณ€๊ฒฝ๋  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์ „์ฒด๊ฐ€ ๋ Œ๋”๋ง์ด ๋˜๋Š”๋ฐ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ Virtual DOM ์ด๋‹ค.
Virtual DOM์€ ๊ธฐ์กด DOM๊ณผ ๋ณ€๊ฒฝ๋  Virtual DOM์˜ ์ฐจ์ด๋ฅผ ํŒ๋‹จํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ๊ตฌ์„ฑ์š”์†Œ๋งŒ ์ฐพ์•„ ๊ทธ๋ถ€๋ถ„๋งŒ ๋ Œ๋”๋ง์ด ๋œ๋‹ค.

 


๐Ÿ–‡๏ธ Key Props

: ํ•˜๋‚˜์˜ JSX ํƒœ๊ทธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ ์ด ๊ฐ์ฒด์—๋Š” ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ Virtual DOM์˜ ์š”์†Œ์ž„์„ ํ™•์ธํ•ด์ฃผ๋Š” ์‹ฌ๋ณผ๊ฐ’๊ณผ ๊ฐ๊ฐ์˜ Virtual DOM๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋Š” key ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ map( ) ์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ์— ๊ณ ์œ ํ•œ key๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค. ๋ฆฌ์•กํŠธ๋Š” ์ด key๋“ค์˜ ๋น„๊ต๋ฅผ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜์—ˆ์„ ๋•Œ ์ƒํƒœ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ์ง€ํ•˜๊ณ  ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด ์—˜๋ฆฌ๋จผํŠธ ํ˜น์€ ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๊ณ  ์ด๋Š” ํšจ์œจ์ ์ธ DOM ์‚ฌ์šฉ์œผ๋กœ ๊ท€๊ฒฐ๋œ๋‹ค.

 


๐Ÿ–‡๏ธ Hook

: ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ƒ๋ช… ์ฃผ๊ธฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋Šฅ

 

๐Ÿ’กํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์žฅ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

: ์งง๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ๊ณ , hook์„ ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋‹ค๋Š” ์ ์ด ์ œ์ผ ํฐ ์žฅ์ ์ด๋‹ค. 

useState

  • ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์ƒํƒœ์— ๋”ฐ๋ผ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋‹ค๋ฅธ ํ™”๋ฉด๋“ค์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค. (= ๋ Œ๋”๋ง)

useEffect

  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํŠน์ •์ž‘์—…์„ ์‹คํ–‰ํ• ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค.
  • ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ž‘์—…, ๊ฒ€์‚ฌ ๊ฐ’์ด ๋ณ€ํ•˜๋ฉด ์ฝœ๋ฐฑ์„ ์‹คํ–‰ํ•œ๋‹ค.
useEffect(์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ž‘์—… ํ•จ์ˆ˜, [๊ฒ€์‚ฌ ๊ฐ’])

 

componentDidMount: ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์ฒซ ๋ Œ๋”๋ง์„ ๋‹ค ๋งˆ์นœ ํ›„ ์‹คํ–‰.
componentDidUpdate: ๋ฆฌ๋ Œ๋”๋ง์„ ์™„๋ฃŒํ•œ ํ›„ ์‹คํ–‰. ์ฆ‰ render()๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰
compoenntWillUnMount: ์ปดํฌ๋„ŒํŠธ๋ฅผ DOM์—์„œ ์ œ๊ฑฐํ•  ๋•Œ ์‹คํ–‰.

 

  • Component๊ฐ€ Mount ๋˜์—ˆ์„ ๋•Œ(๋‚˜ํƒ€๋‚  ๋•Œ) = componentDidMount
  • [deps]๋ถ€๋ถ„์„ ์ƒ๋žตํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค useEffect๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
  useEffect(() => {
    console.log("๋ Œ๋”๋ง ๋ ๋•Œ๋งˆ๋‹ค ์‹คํ–‰");
  });

 

  • ๋งŒ์•ฝ ๋งจ ์ฒ˜์Œ ๋ Œ๋”๋ง ๋  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด deps์œ„์น˜์— ๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ๋Š”๋‹ค.
useEffect(() => {
    console.log("๋งจ ์ฒ˜์Œ ๋ Œ๋”๋ง๋  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰");
  },[]);

 

  • Component๊ฐ€ Update ๋˜์—ˆ์„ ๋•Œ(props, state ๋ณ€๊ฒฝ) = componentDidUpdate
  useEffect(() => {
    console.log("name์ด๋ผ๋Š” ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๋งŒ ์‹คํ–‰");
  },[name]);

 

  • Component๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ & Update ๋˜๊ธฐ ์ง์ „์— =compoenntWillUnMount
  • ์–ธ๋งˆ์šดํŠธ ๋  ๋•Œ๋งŒ cleanUp ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด deps์— ๋นˆ๋ฐฐ์—ด์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.
  • ํŠน์ • ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ์ง์ „์— cleanup ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด deps์— ํ•ด๋‹น ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
  useEffect(() => {
    console.log("hello");
    return () => {
      console.log("cleanUp ํ•จ์ˆ˜");
    };
  });

 

๐Ÿ”ฅ ์œ ์˜์‚ฌํ•ญ

  • useEffect๋Š” ์ฒซ ๋ Œ๋”๋ง ํ›„ ์‹คํ–‰๋œ๋‹ค.
  • ์ตœ์ดˆ์— ํ•œ ๋ฒˆ์€ ๋ฌด์กฐ๊ฑด ์‹คํ–‰๋œ๋‹ค.

useRef

  • ์ €์žฅ๊ณต๊ฐ„(๋ณ€์ˆ˜ ๊ด€๋ฆฌ) ๋˜๋Š” DOM ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ref(= ์ฐธ์กฐ: reference)

useMemo & useCallback

: useMemo๋ฅผ ํ†ตํ•ด ์บ์‹ฑ์„ ํ•œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊บผ๋‚ด์™€์„œ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. useMemo์— ์ธ์ž๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

: useCallback์€ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๊ทธ ์ž์ฒด๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ฃผ๋กœ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์— ์‚ฌ์šฉํ•œ๋‹ค. 

 


๐Ÿ–‡๏ธ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ vs ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ

๐Ÿ’ก ์ œ์–ด ์ปดํฌ๋„ŒํŠธ์™€ ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

: ์ฆ‰๊ฐ์ ์œผ๋กœ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ’์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•˜๋‹ค > ์ œ์–ด ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ

์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ์ด ๋ถˆํ•„์š”ํ•˜๊ณ  ์ œ์ถœ์‹œ์—๋งŒ ๊ฐ’์ด ํ•„์š”ํ•˜๋‹ค, ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง๊ณผ ๊ฐ’ ๋™๊ธฐํ™”๊ฐ€ ์‹ซ๋‹ค > ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ

 

๋ฆฌ์•กํŠธ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ form์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
๋ฐ”๋กœ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ์™€ ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ

๐Ÿ”ฅ (1) ์ œ์–ด ์ปดํฌ๋„ŒํŠธ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์ฝ”๋“œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ๋ Œ๋”๋ง์ด ๋œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ form์— value ๊ฐ’์„ useState๋กœ ๊ด€๋ฆฌํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์‹ ํ™” ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
const [inputValue, setInputValue] = useState('');

return (
 <input value={inputValue} onChange={(e) => setInputValue(e.target.value) />
)

์ด๋Ÿฐ์‹์œผ๋กœ ํ…์ŠคํŠธ ์ž…๋ ฅ์„ ํ•  ๋•Œ๋งˆ๋‹ค onChange์˜ ์ฝœ๋ฐฑ ํ˜ธ์ถœ์— ๋”ฐ๋ผ์„œ form์˜ ์ƒํƒœ๊ฐ€ ๊ณ„์† ์ฆ‰๊ฐ์œผ๋กœ ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒƒ์„ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•œ๋‹ค.

ํ™œ์šฉ ์˜ˆ)

  • form์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•  ๋•Œ (์•„์ด๋””๋‚˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฒดํฌ์‹œ)
  • form์— ๋ฐ์ดํ„ฐ ๊ฐ’์— ๋”ฐ๋ผ ๋ฒ„ํŠผ ์ƒํƒœ๋ฅผ disabled๋กœ ํ‘œ์‹œ

 

๐Ÿ”ฅ (2) ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ

  • ์‚ฌ์šฉ์ž๊ฐ€ ํผ ํ•„๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์—…๋ฐ์ดํŠธ๋œ ์ •๋ณด๊ฐ€ ๋ฆฌ์•กํŠธ์—์„œ ๋ณ„๋„ ์ฒ˜๋ฆฌํ•  ํ•„์š” ์—†์ด ์—˜๋ฆฌ๋จผํŠธ์— ๋ฐ˜์˜๋œ๋‹ค.
    ์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋Š” useState๋กœ ๊ด€๋ฆฌํ•˜์ง€๋งŒ ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋Š” ref๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
const inputRef = useRef();

return (
<input ref={inputRef} value="hello" />
)

์ด์ฒ˜๋Ÿผ ref๋ฅผ ํ™œ์šฉํ•ด ์ž…๋ ฅ ํผ์˜ ์ƒํƒœ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. button์„ ํด๋ฆญํ•  ๋•Œ ref๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

ํ™œ์šฉ ์˜ˆ)

  • ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ด๊ณ , ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ œ์ถœํ•  ๋•Œ ๊ฐ’์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉ

๐Ÿ”† ์ƒํƒœ ๊ด€๋ฆฌ

๐Ÿ’ก React์—์„œ State๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋‚˜์š”?

: ๋ฆฌ์•กํŠธ์˜ ์ƒํƒœ๊ด€๋ฆฌ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ˜น์€ ์ž์‹ ์ด ์ง์ ‘ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋กœ์ปฌ ์ƒํƒœ ๋ฐฉ๋ฒ•๊ณผ ๋กœ์ปฌ ์ƒํƒœ์˜ ๋ถˆํŽธํ•จ์„ ๊ฐœ์„ ํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ–‡๏ธ ๋กœ์ปฌ ์ƒํƒœ ๊ด€๋ฆฌ?

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๋ฆฌ์•กํŠธ hook ๊ณผ props ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด, props๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌ๊ธฐ๊ฐ€ ์ ์  ์ปค์งˆ ์ˆ˜๋ก props drilling์ด ์ฆ๊ฐ€ํ•˜์—ฌ, ๋ฐ˜๋ณต์ž‘์—…์ด ๋งŽ์•„์ง€๊ณ  ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๐Ÿ–‡๏ธ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ?

์ „์—ญ ์ƒํƒœ๋Š” ํ”„๋กœ์ ํŠธ ์ „์ฒด์˜ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์ด๊ด„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๋Œ€ํ‘œ์ ์œผ๋กœ Redux, recoil ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค. ์ „์—ญ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์—์„œ๋“  ์ƒํƒœ ๊ฐ’์„ ๋ฐ˜์˜ํ•˜๊ณ , ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. props ๊ณผ์ •์ด ์ƒ๋žต๋˜์–ด, ์ž‘์—…์ด ์ ๊ณ  ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๊ฐ„ํŽธํ•ด์ง€๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜, ์ƒํƒœ๊ด€๋ฆฌ ์˜ค๋ฅ˜์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์ปค์ง€๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

 

๐Ÿ’กProps Drilling์— ๋Œ€ํ•ด ์„ค๋ช…๊ณผ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ๋งํ•ด์ฃผ์„ธ์š”.

: Prop Drilling ์€ props๋ฅผ ์˜ค๋กœ์ง€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์“ฐ์ด๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ฑฐ์น˜๋ฉด์„œ React Component ํŠธ๋ฆฌ์˜ ํ•œ ๋ถ€๋ถ„์—์„œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ props์˜ ์ „๋‹ฌ์ด ๋งŽ์ด์งˆ์ˆ˜๋ก ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ ํ•ด๋‹น prop์„ ์ถ”์ ํ•˜๊ธฐ ํž˜๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๋„ ๋”์šฑ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

๐Ÿ”ฅ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•? ์ฒซ ๋ฒˆ์งธ๋กœ ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ / ๋‘ ๋ฒˆ์งธ๋กœ๋Š” children ์„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

 

๐Ÿ–‡๏ธ Redux

: props ์—†์ด state(์ƒํƒœ)๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - js ํŒŒ์ผ ํ•˜๋‚˜์— state๋“ค์„ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ƒํƒœ๋ฅผ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. (์ˆœ์ˆ˜ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ)
  • ์œ ์ง€๋ณด์ˆ˜ (๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋น„๊ต)
  • ๋””๋ฒ„๊น…์— ์œ ๋ฆฌ (action๊ณผ state log ๊ธฐ๋ก ์‹œ) → redux dev tool (ํฌ๋กฌ ํ™•์žฅ)
  • ํ…Œ์ŠคํŠธ๋ฅผ ๋ถ™์ด๊ธฐ ์šฉ์˜ (์ˆœ์ˆ˜ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ)

  • flux ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
    ๐Ÿ”ฅ flux ๊ตฌ์กฐ๋ž€ ? ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ.
    ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„๋˜์–ด์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ dispatch -> store -> view ์ˆœ์„œ์ด๋‹ค. view์—์„œ ์ž…๋ ฅ์ด ๋ฐœ์ƒํ•˜๋ฉด ์•ก์…˜์„ ํ†ตํ•ด ๋””์ŠคํŒจ์น˜๋กœ ํ–ฅํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ–‡๏ธ Recoil

: atom(์ƒํƒœ์˜ ๋‹จ์œ„) , selector(ํŒŒ์ƒ๋œ state๋ฅผ ์ €์žฅ)

  • ๊ฐ€์žฅ ๋ฆฌ์•กํŠธ์Šค๋Ÿฝ๋‹ค. ๋ฆฌ์•กํŠธ hooks์˜ ๋Š๋‚Œ์œผ๋กœ ์นœ์ˆ™ํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ณ , ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋‚ฎ๋‹ค.
  • ์ดˆ๊ธฐ ์„ธํŒ…์ด ์ •๋ง ๊ฐ„ํŽธํ•˜๊ณ  recoil ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์™ธ์— ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผ ๋  ๊ฒƒ๋“ค์ด ์—†์–ด์„œ ์ข‹๋‹ค.
  • ์ง๊ด€์ ์ด๊ณ  ๋‹จ์ˆœํ•œ ํŽธ์ด๋‹ค.
  • ๋””๋ฒ„๊น… ๋„๊ตฌ ์ง€์›์ด ๋ฏธ๋ฏธํ•˜๋‹ค.

๐Ÿ–‡๏ธ React-query

:  React Application์—์„œ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์บ์‹ฑํ•˜๋ฉฐ, ์ง€์†์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๊ณ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…์„ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ๐Ÿ”ฅํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๋ฐ์ดํ„ฐ ์บ์‹ฑ์ด๋‹ค.๐Ÿ”ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ๋กœ ์ €์žฅํ•˜์—ฌ, ๋™์ผํ•œ ์š”์ฒญ์ด ๋ฐ˜๋ณต๋˜์–ด๋„ ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ๋กœ๋”ฉ ๋ฐ ์˜ค๋ฅ˜ ์ƒํƒœ ๊ด€๋ฆฌ (๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋”ฉ๋˜์—ˆ์„ ๋•Œ์™€ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.)
  • ๊ฒŒ์‹œํŒ ๊ฐ™์€ ๊ฒƒ์„ ๋งŒ๋“ค ๋•Œ Pagination ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ฆฌํŒจ์นญ(Prefetching)์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๐Ÿ”ฅ ํ”„๋ฆฌํŒจ์นญ(Prefetching)์ด๋ž€ ? ๋‹ค์Œ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์™€์„œ, ๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋„๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌ ๋œ๋‹ค.

๐Ÿ”† NextJS

: Next.js๋Š” ๋ฆฌ์•กํŠธ์—๋Š” ์—†๋Š”์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋งserver-side rendering(SSR), ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑstatic site generation(SSG), ์ฆ๋ถ„ ์ •์  ์žฌ์ƒ์„ฑincremental static regeneration(ISR)๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์•กํŠธ๋ฅผ ์œ„ํ•ด ๋งŒ๋“  ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋‹ค.

 

๐Ÿ–‡๏ธ SEO(๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”)

๊ฒ€์ƒ‰์„ ํ•˜๋ฉด ๊ฒ€์ƒ‰์—”์ง„์€ ์ธ๋ฑ์‹ฑํ•ด๋‘” ์ˆ˜๋งŽ์€ ์›น ํŽ˜์ด์ง€ ์ค‘ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋…ธ์ถœํ•˜๋Š”๋ฐ ๊ทธ์ค‘ 

์ž์‹ ์˜ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋” ๋งŽ์ด ๋…ธ์ถœ๋˜๋„๋ก ์ตœ์ ํ™”๋œ ์ž‘์—…์„ ๋งํ•œ๋‹ค.

 


๐Ÿ–‡๏ธ SSR (์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง)

: ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์™„์ „ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง„ htmlํŒŒ์ผ์„ ๋ฐ›์•„์™€ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹

  • ์ฒซ ํŽ˜์ด์ง€์˜ ๋กœ๋”ฉ์‹œ๊ฐ„์ด CSR์— ๋น„ํ•ด ์งง๋‹ค.
    ์ด๋ฏธ ๋ Œ๋”๋ง๋œ ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์„œ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • SEO ์ธก๋ฉด์—์„œ๋„ ์œ ๋ฆฌํ•˜๋‹ค.
    ๊ฒ€์ƒ‰์—”์ง„์ด ํฌ๋กค๋ง์„ ํ•  ๋•Œ ์„œ๋ฒ„์— ์ด๋ฏธ ํ•˜๋“œ์ฝ”๋”ฉ๋œ html ํŒŒ์ผ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์—”์ง„์ด ์ด ํŽ˜์ด์ง€๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š”๋ฐ ์šฉ์ดํ•˜๋‹ค.
  • SSR์€ ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ์ผ์–ด๋‚˜๋‹ˆ ํ•„์š”์— ๋”ฐ๋ผ SSG์™€ ISR์„ ์ ์ ˆํ•˜๊ฒŒ ์“ฐ๋ฉด ์ข‹๋‹ค.

์žฅ์ 

  • ๊ตฌ๊ธ€, ๋„ค์ด๋ฒ„, ๋‹ค์Œ ๋“ฑ์˜ ๊ฒ€์ƒ‰ ์—”์ง„์ด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŽ˜์ด์ง€๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ˆ˜์ง‘ํ•ด์ค€๋‹ค.
    โœ” ๋”ฐ๋ผ์„œ ์›น ์„œ๋น„์Šค์˜ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ๋ผ๋ฉด ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ๊ตฌํ˜„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์˜ˆ๋ฅผ๋“ค๋ฉด, SSR์ด ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ์›น ํŽ˜์ด์ง€์— ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐฉ๋ฌธํ•˜๋ฉด, JS๊ฐ€ ๋กœ๋”ฉ๋˜๊ณ  ์‹คํ–‰๋  ๋•Œ ๊นŒ์ง€ ์‚ฌ์šฉ์ž๋Š” ๋น„์–ด ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉฐ ๋Œ€๊ธฐํ•ด์•ผํ•œ๋‹ค.
    ์—ฌ๊ธฐ์— API๊นŒ์ง€ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ๋”๋”์šฑ ๊ธธ์–ด์ง„๋‹ค.
    ๋ฐ˜๋ฉด ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ๊ตฌํ˜„ํ•œ ์›น ํŽ˜์ด์ง€๋ผ๋ฉด JS ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์‹œ์ ์—์„œ๋„ HTML์ƒ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฝ˜ํ…์ธ ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ตœ์†Œํ™”๋˜๊ณ , ์ด๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๋„ ํ–ฅ์ƒ๋œ๋‹ค.

๋‹จ์ 

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

๐Ÿ–‡๏ธ CSR (Client Side Render)

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๊ทธ๋ฆฐ๋‹ค.
  • ์ฒ˜์Œ ๋กœ๋”ฉ์‹œ jsํŒŒ์ผ์˜ ์šฉ๋Ÿ‰์ด ํด์ˆ˜๋ก ๋กœ๋”ฉ์‹œ๊ฐ„์ด ๊ธธ๋‹ค.
    ํ•˜์ง€๋งŒ ์ดˆ๊ธฐ์— ๋กœ๋”ฉ์ด ๋˜๊ณ ๋‚˜๋ฉด ํŽ˜์ด์ง€ ๊ฐ„ ์ด๋™ ์‹œ ๋งค์šฐ ๋น ๋ฅธ ์†๋„๋กœ ์ „ํ™˜๋˜๊ณ , ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์ƒˆ๋กœ๊ณ ์นจ๋˜๋Š” ํ˜„์ƒ๋„ ์‚ฌ๋ผ์ง„๋‹ค(= SPA).

๐Ÿ–‡๏ธ SSG (Statice-Site Generation)

  • ์ •์ ์ธ ์‚ฌ์ดํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค : ์ •์ ์ธ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๊ทธ๋ ค์ค€๋‹ค.
    SSG์„ ๋‹ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜๋กœ๋Š” getStaticProps๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

๐Ÿ–‡๏ธ ISR (Incremental Static Regeneration)

  • ์ฆ๋ถ„ ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ์žฌ์ƒ์„ฑ ํ•œ๋‹ค. (ํŠน์ • ์ฃผ๊ธฐ๋กœ) ์ •์ ์ธ ์‚ฌ์ดํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋‹ค์‹œ ๊ทธ๋ ค์ค€๋‹ค.
    ์ด๊ฑธ ๋‹ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜๋Š” getStaticProps ๋ผ๋Š” ํ•จ์ˆ˜๋‹ค.
    ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฉด์„œ ๋™์ž‘ํ•œ๋‹ค.

 

 

 

 

โค๏ธ ๋„์›€์ฃผ์‹ ๋ถ„ :

 

728x90