TIL2

๐Ÿ“Œ Q1. React์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์—๋Š” ์–ด๋–ค ๊ฒŒ ์žˆ์„๊นŒ?

  1. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜๋ฉด์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋„ ์ „๋ถ€ ๋ฆฌ๋ Œ๋”๋ง

    • ๋ถ€๋ชจ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜๋ฉด, props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„๋„ ์ž์‹์ด ๊ฐ™์ด ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค.
  2. props๋กœ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ฐธ์กฐ๊ฐ’(๊ฐ์ฒด, ๋ฐฐ์—ด, ํž˜์ˆ˜)์„ ์ „๋‹ฌํ• ๋•Œ -> React.memo๋ฅผ ์จ๋„ ์˜๋ฏธ๊ฐ€ ์—†์Œ

    <Child data={[1,2,3]} /> // ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์ƒ์„ฑ
    <Child onClick={() => doSomething()} /> // ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ƒ์„ฑ
  3. state๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํฌ๊ฒŒ ๊ด€๋ฆฌํ•  ๋•Œ

    • ํ•˜๋‚œ์˜ state ๊ฐ์ฒด์— ํ•„๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด, ํŠน์ • ํ•„๋“œ๋งŒ ๋ณ€๊ฒฝ์ด ๋˜๋„ ์ „์ฒด๊ฐ€ ๋‹ค์‹œ ๋ฆฌ๋ Œ๋”๋ง๋œ๋‹ค.
  4. context ๊ณผ๋„ ์‚ฌ์šฉ

    • Context Provider์˜ ๊ฐ’์ด ์กฐ๊ธˆ๋งŒ ๋ฐ”๋€Œ์–ด๋„ ๋ชจ๋“  Consumer ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋œ๋‹ค.
  5. ๋ถˆํ•„์š”ํ•œ key ์‚ฌ์šฉ ์˜ค๋ฅ˜

  • map์„ ๋Œ๋ฆด ๋•Œ index๋ฅผ key๋กœ ์“ฐ๋ฉด, ์‹ค์ œ ๊ฐ’์€ ์•ˆ ๋ฐ”๋€Œ์–ด๋„ key๊ฐ€ ๋ฐ”๋€Œ์–ด์„œ ์ „์ฒด๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋  ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌ์•กํŠธ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” useMemo, React.memo, useCallback ๊ฐ™์€ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‚˜, state ๊ตฌ์กฐ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

React.memo Vs useMemo์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

  • React.memo๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ์„œ, ๋ถ€๋ชจ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜๋”๋ผ๋„ props๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉด ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์•„์ค€๋‹ค. ๋ฐ˜๋ฉด useMemo๋Š” ๊ฐ’์„ ๋ฉ”์˜ค์ด์ œ์ด์…˜ํ•ด์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋™์ผํ•œ ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฉ”๋ชจ์ด์ œ์ด์…˜ : ๊ฐ™์€ ์ž…๋ ฅ์ด ๋‹ค์‹œ ์ฃผ์–ด์งˆ ๋•Œ ์ด์ „์— ์ €์žฅํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ์—†์• ๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค

useCallback์€ ์–ธ์ œ ์“ฐ์ด๊ณ , useMemo์™€๋Š” ์–ด๋–ค ๊ด€๊ณ„๊ฐ€ ์žˆ์„๊นŒ?

useCallback์€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์•„์ค€๋‹ค. ์ฝœ๋ฐฑ์„ props๋กœ ๋„˜๊ธฐ๋ฉด ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋ผ React.memo๋กœ๋„ ๋ง‰์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ˜๋ฉด useMemo๋Š” ๊ฐ’์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•ด์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋™์ผํ•œ ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. useCallback์€ ๋‚ด๋ถ€์ ์œผ๋กœ useMemo๋ฅผ ํ™œ์šฉํ•œ ๊ตฌํ˜„๊ณผ ๋™์ผํ•ด ํ•จ์ˆ˜ ๋ฒ„์ „์˜ useMemo๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ Q2. React์—์„œ state๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  setState๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

  1. React๊ฐ€ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ์‹

    • React๋Š” ์ƒํƒœ์˜ ์ฐธ์กฐ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ€๊ฒฝ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
  2. ์ง์ ‘ ์ˆ˜์ •์˜ ๋ฌธ์ œ์ 

    • ๋งŒ์•ฝ state๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋ฉด ์ฐธ์กฐ๋Š” ๊ทธ๋Œ€๋กœ์ด๊ธฐ ๋•Œ๋ฌธ์— React๊ฐ€ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค.
  3. setState์˜ ์—ญํ• 

    • setState๋Š” React ๋‚ด๋ถ€์˜ ์—…๋ฐ์ดํŠธ ํ์— ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋“ฑ๋กํ•˜๊ณ , batching ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” ํ•˜๋ฉด์„œ ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋ Œ๋”๋งํ•œ๋‹ค.
    • ๋˜ํ•œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ React์œผ ์ตœ์ ํ™”๋„๊ตฌ (React.memo)๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
    • batching : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ชจ์•„์„œ ํ•œ๋ฒˆ์— ๋ฆฌ๋ Œ๋”๋งํ•˜๋Š” React์˜ ์ตœ์ ํ™” ๋ฐฉ์‹์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด setState๋ฅผ ์—ฌ๋Ÿฌ๋ถ„ ํ˜ธ์ถœํ•ด๋„, ๊ฐ๊ฐ์˜ ํ˜ธ์ถœ์— ๋ฆฌ๋ ˆ๋˜๋งํ•˜์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰์— ํ•œ๋ฒˆ๋งŒ ๋ Œ๋”๋งํ•œ๋‹ค.

๐Ÿ“Œ Q3. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ธ๋ฐ ์–ด๋–ป๊ฒŒ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ?

๋ธŒ๋ผ์šฐ์ €๋‚˜ Node.js ๋Ÿฐํƒ€์ž„์ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜๊ณ  ์™„๋ฃŒ๋œ ์ฝœ๋ฐฑ์„ ํƒœ์Šคํฌ ํ์— ๋„ฃ์–ด์ค€๋‹ค.

์‹ฑ๊ธ€์Šค๋ ˆ๋“œ : ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)์™€ ํƒœ์Šคํฌ ํ(MacroTask, MicroTask)์˜ ์ฐจ์ด

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝœ์Šคํƒ์ด ๋น„์–ด์žˆ์„๋•Œ ํƒœ์Šคํฌ ํ์— ์žˆ๋Š” ์ž‘์—…์„ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•ด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ํƒœ์Šคํฌ ํ๋Š” ๋งคํฌ๋กœ ํƒœ์Šคํฌ(setTimeout, setInterval ๋“ฑ)์™€ ๋งˆ์ดํฌ๋กœ ํƒœ์Šคํฌ(Promise.then ๋“ฑ)๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๋งคํฌ๋กœ ํƒœ์Šคํฌ ์‹คํ–‰ ํ›„ ๋ฐ˜๋“œ์‹œ ๋ชจ๋“  ๋งˆ์ดํฌ๋กœ ํƒœ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ๊ทœ์น™์„ ๊ฐ€์ง„๋‹ค.