๊ฐœ๋ฐœ ๊ณต๋ถ€/๋ฐ๋ธŒ์ฝ”์Šค TIL

[ํด๋ผ์šฐ๋”ฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”์ง€๋‹ˆ์–ด๋ง TIL] 240218 - React ์‹ค์ „ ํ”„๋กœ์ ํŠธ 5, ๋ฆฌ์•กํŠธ ํŠน๊ฐ•

๊ฐ€์šค์ด 2024. 2. 18. 21:46

Intro


๊ฐ์ • ์ผ๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•  ๋•Œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ์— ๋Œ€ํ•ด ์•Œ๋ ค์ฃผ์…”์„œ ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ๋‹ค.

์ „๋‚  ์ผ์ •๋•Œ๋ฌธ์— ๋ชป๋“ค์€ ํŠน๊ฐ•๋„ ๋‹ค์‹œ ๋“ค์œผ๋ฉฐ ๋ณต์Šต๋„ ํ–ˆ๋‹ค.

 

 

 

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ


ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ

  • ๋ฐฐ์—ด๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฒน์น˜๋Š” ํ‚ค๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ง€ ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
  • ์˜คํƒ€ ์ฒดํฌํ•˜๊ธฐ!! (์˜คํƒ€๋ฅผ ๋ง‰์•„์ฃผ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ถŒ์žฅ)
  • ๋‚ ์งœ ๊ณ„์‚ฐ ์ฒดํฌํ•˜๊ธฐ: ์‹œ๊ฐ„๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์˜ˆ์‹œ) ์›ํ•˜๋Š” ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์„ ๊ตฌํ•  ๊ฒฝ์šฐ, 23์‹œ 59๋ถ„ 59์ดˆ๊นŒ์ง€ ์„ค์ •์„ ํ•ด์•ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ์ง์—†์ด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

const lastDay = new Date(curDate.getFullYear(), curDate.getMonth() + 1, 0, 23, 59, 59).getTime();

 

 


 

React์—์„œ ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋ณด๊ด€ ๋ฐฉ๋ฒ•

: React ์•ฑ์—์„œ๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ์œ„์น˜์— ๋”ฐ๋ผ ์ตœ์ ํ™” ์ง„ํ–‰ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

์ด๋ฏธ์ง€๋Š” public ํด๋” ๋‚ด ๋˜๋Š” src ๋‚ด์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, public๋ณด๋‹ค๋Š” src ํด๋” ์•ˆ์— ์žˆ๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ import ํ•ด ์™€์•ผ ์ตœ์ ํ™” ๊ณผ์ •์— ํฌํ•จ๋œ๋‹ค.

import logo from './image/logo.png'

<img src={logo} />

 

  • import๋กœ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉ๋œ ์ด๋ฏธ์ง€๋Š” ๋ฒˆ๋“ค๋ง ์‹œ ํฌํ•จ๋œ๋‹ค.
  • ์ด๋•Œ ๋ถˆ๋Ÿฌ์˜จ ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 10000Byte์ดํ•˜๋ฉด Data URL(์ด๋ฏธ์ง€ ํŒŒ์ผ์„ Base64 ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•ด ๋†“์€ ๊ฒƒ์œผ๋กœ HTML ๋‚ด๋ถ€์— ์บ์‹ฑ๋œ๋‹ค.) ์ด๋ผ๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • ๋‹จ, ์ด๋ฏธ์ง€๊ฐ€ ๋งŽ์ด ์กด์žฌํ•˜๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ํฐ ๊ฒฝ์šฐ์—” ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

State๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ์ด์œ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ ๋ณ€์ˆ˜์˜ ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ถˆ๋ณ€์„ฑ์ด๋ž€ ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„์— ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์›์น™์ด๋‹ค.

๋˜ํ•œ, ๋ฆฌ์•กํŠธ์—์„  ===๋กœ State ๋ณ€๊ฒฝ์„ ํ™•์ธํ•˜๋Š”๋ฐ ๊ฐ์ฒด State์˜ ์ฃผ์†Œ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉด ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

 

 

๋ฆฌ์•กํŠธ์˜ ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค

Render Phase โžก๏ธ Commit Phase

  • Render Phase
    • React ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋งํ•ด์•ผ ํ•˜๋Š” UI๋ฅผ Virtual DOM์ด๋ผ๋Š” ๊ฐ์ฒด ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
    • ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•ด ๊ฒฐ๊ณผ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ ํ›„ โžก๏ธ React Element๋“ค์„ ๋ชจ์•„ Virtual DOM์„ ์ƒ์„ฑ
  • Commit Phase
    • Virtual DOM์„ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ์ƒˆ๋กœ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •

๋ฆฌ์•กํŠธ๋Š” DOM์˜ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

๋™์‹œ์— ๋ฐœ์ƒํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ชจ์•„ ํ•œ ๋ฒˆ๋งŒ DOM์„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋œ๋‹ค. (Reconciliation: ์žฌ์กฐ์ •)

โš ๏ธ ๋ฆฌ์•กํŠธ์˜ ์ด๋Ÿฌํ•œ ๋ Œ๋”๋ง ๊ณผ์ •์ด ํ•ญ์ƒ ์ตœ๊ณ ์˜ ์†๋„๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
Virtual DOM์„ ์ƒ์„ฑํ•˜๊ณ  ๋น„๊ตํ•˜๋Š” ๋ฐ์—๋„ ์—ฐ์‚ฐ์ด ์†Œ์š”๋˜๊ธฐ ๋•Œ๋ฌธ์—..!! 

 

 

 

 

 

๋งˆ๋ฌด๋ฆฌ


ํ† ์š”์ผ์— ์ง„ํ–‰๋๋˜ ๋ฆฌ์•กํŠธ ํŠน๊ฐ•์—์„œ ์œ ์ตํ•œ ๋‚ด์šฉ๋“ค์ด ๋งŽ์•„์„œ ์ข‹์•˜๋‹ค.

๋ฆฌ์•กํŠธ ๊ด€๋ จ ๋‚ด์šฉ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ณต๋ถ€ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ ๊ฐœ๋ฐœ ๊ณต๋ถ€์˜ ๋ฐฉํ–ฅ์„ฑ์„ ์žก์•„์ฃผ๋ ค ํ•˜์…”์„œ ๋” ์ข‹์•˜๋‹ค.