๐Ÿšค ์„ฑ์žฅ์ผ์ง€ 6.0

์ฑ… ํ–‰๋ณตํ•œ ์ด๊ธฐ์ฃผ์˜์ž(์›จ์ธ ๋‹ค์ด์–ด)์˜ ๋‚ด์šฉ์— ์ž๊ทน๋ฐ›์•„ ์‹œ์ž‘ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ์„ฑ์žฅ๊ธฐ๋ก

์‚ด์•„์žˆ๋Š” ๊ฝƒ๊ณผ ์ฃฝ์€ ๊ฝƒ์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š”๊ฐ€?
์„ฑ์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
์ƒ๋ช…์˜ ์œ ์ผํ•œ ์ฆ๊ฑฐ๋Š” ์„ฑ์žฅ์ด๋‹ค!

๐ŸŒพ (4.0)ํ•™์Šต ํ‚ค์›Œ๋“œ์—์„œ ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ •๋ณด ์ œ๊ณต, ๊ณ ๋ฏผ์—์„œ ๋‚ด ๊ฒฝํ—˜์„ ์ž์„ธํžˆ ์ ์ž!
๐ŸฅŠ (5.0)ํ•™์Šต ํ‚ค์›Œ๋“œ๋Š” ํ•œ์ค„์˜ ํ•ต์‹ฌ์œผ๋กœ๋งŒ ์ •๋ฆฌ, ์„ฑ๊ณต/์‹คํŒจ ์ผ์ง€ ์ž‘์„ฑํ•˜๊ธฐ! ์ด ๋•Œ, ์‹คํŒจ์˜ ๊ฒฝํ—˜์€ ์ž์„ธํžˆ ์ ๊ธฐ!
๐Ÿ‰ (6.0)<์™„์ „ ๊ฐœํŽธ!!!> ๋งค์ผ ์Šต๊ด€์ ์œผ๋กœ ํ•ต์‹ฌ๋งŒ ์ ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ”„๋ ˆ์ž„ ๋ณ€๊ฒฝ. ์„ฑ๊ณต๋ณด๋‹จ ์‹คํŒจ์— ์ดˆ์ ์„ ๋งž์ถ”๊ธฐ.

  • ๐Ÿ‰ (6.1)<์ˆ˜์ •> ๋งค๋ฒˆ ์„ฑ๊ณต, ์‹คํŒจ๋ฅผ ๋”ฐ๋กœ ์ ๋Š” ๊ฒƒ๋ณด๋‹จ ๊ฒฝํ—˜์œผ๋กœ ํ‘œํ˜„ํ•˜์ž

๐ŸŒˆ ์˜ค๋Š˜์˜ ๊ฐ์ •

์˜ค๋Š˜์€ ๋„ˆ๋ฌด ์ž ์ด ์™€์„œ ๋‚ฎ์ž ์„ ์ข€ ๊ธธ๊ฒŒ ์žค๋‹ค. ์˜ˆ์ „์—๋Š” ๊ณ„ํš๋Œ€๋กœ ๋˜์ง€ ์•Š๊ณ  ์ž ์„ ์ž๋ฉด ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ๋งŽ์ด ๋ฐ›์•˜๋Š”๋ฐ, ์ด์ œ๋Š” ์ž ์ด ์˜จ๋‹ค๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋‚˜์—๊ฒŒ ํ•„์š”ํ–ˆ๋‹ค๋Š” ๊ฑธ ์•Œ๊ธฐ์— ์ŠคํŠธ๋ ˆ์Šค๋ฐ›์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜๋„ ์ž ์„ ์ž๊ณ  ๋‚˜๋‹ˆ ๊ฐœ์šดํ•˜๊ฒŒ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋‚˜๋ฆ„๋Œ€๋กœ ๊ณ„ํš์„ ์ „๋ถ€ ์™„๋ฃŒํ–ˆ๋‹ค.(ํ—ฌ์Šค๋ฅผ ์•ˆ๊ฐ”์ง€๋งŒ ๐Ÿคช)

๐Ÿซง ์˜ค๋Š˜์˜ ๊ณ ๋ฏผ

๋ฆฌ๋•์Šค๋ฅผ ์–ด๋””๊นŒ์ง€ ๋ฐฐ์šฐ๋Š” ๊ฒŒ ๋‚˜์€๊ฐ€?

์ง€๊ธˆ ๋“ฃ๊ณ  ์žˆ๋Š” ๊ฐ•์˜๋Š” ๋ฆฌ๋•์Šค์˜ ์ดˆ๊ธฐ ๋ชจ์Šต๋ถ€ํ„ฐ ๋ฆฌ๋•์Šค thunk, saga๊นŒ์ง€ ๋‹ค๋ฃจ๊ณ  toolkit์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ํ™•์‹คํžˆ redux๋ฅผ ๋ฐฐ์šฐ๊ณ  ์กฐ๊ธˆ ์‚ฌ์šฉํ•ด๋ณด๋‹ˆ ์™œ toolkit์ด ๋‚˜์™”๋Š”์ง€ ์•Œ ๊ฒƒ ๊ฐ™๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์น˜๊ณค ๋„ˆ๋ฌด ๋งŽ์€ ์ •ํ˜•ํ™”๋œ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•œ ๋Š๋‚Œ..? ์ข€๋” ์ž์œ ๋กญ๊ณ  ์œ ์—ฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ๊ฒŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ์ด๊ฑด ๋ญ ๋ง์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ง€ ์ดˆ๊ธฐ ์„ค์ •์„ ํ•˜๋Š” ๊ณผ์ •์€ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋‹ค๋ฆ„์ด ์—†๋‹ค. ๋ฌผ๋ก  ์ด๋Ÿฐ ํ๋ฆ„์„ ๊ฑฐ์ณ์„œ ์ ์  ์ •ํ˜•ํ™”๋˜๊ณ  ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋„๊ตฌ๋กœ ์ž๋ฆฌ์žก๋Š” ๊ฒƒ์ด๊ฒ ์ง€ ์‹ถ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๊ฒŒ redux-toolkit๊ณผ ๊ฐ™์€ ๋ฆฌ๋•์Šค ๋„๊ตฌ ๋ชจ์Œ์ด๊ฒ ์ง€..?! ์•„์ง ํ”„๋กœ์ ํŠธ์— ์ œ๋Œ€๋กœ ์ ์šฉํ•ด๋ณธ ์ ์€ ์—†์ง€๋งŒ, ์ฒซ ์ธ์ƒ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฐฐ์šธ์ˆ˜๋ก ์žฌ๋ฏธ์žˆ๋Š” ๋Š๋‚Œ์ด๋‹ค!

์•ž์œผ๋กœ ํ”„๋ก ํŠธ ๊ณผ์ œ ์ „ํ˜•์€ ๋ฐ”๋‹๋ผ JS๋กœ ํ•˜๋Š” ๊ฒŒ ์ข‹์„๊นŒ, React๋กœ ํ•˜๋Š” ๊ฒŒ ์ข‹์„๊นŒ?

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

โ˜€๏ธ ์˜ค๋Š˜์˜ ๊ฒฝํ—˜

Redux์˜ container ๊ฐœ๋…

Redux๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ container๋ผ๋Š” ๊ฐœ๋…์„ ์ฒ˜์Œ ์ ‘ํ–ˆ๋‹ค. Redux๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ container๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ? ๋จผ์ € container๋Š” Redux์™€ ์—ฐ๊ฒฐ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Redux๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋‹ค๋ณด๋ฉด, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ถ„๋ฆฌ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒŒ container์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ๋„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

Redux๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ์ด์œ 

Redux๋Š” ์ƒํƒœ๋ฅผ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค๋ค„ ์ข€๋” ์ง๊ด€์ ์ด๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ƒํƒœ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ Flux ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ๊ตฌํ˜„์ฒด์ด๋‹ค. Redux๋ฅผ ํ†ตํ•ด ํ•œ ๊ณณ์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ƒํƒœ์— ๋Œ€ํ•œ ์ถ”์ ์ด ์‰ฌ์›Œ์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฐ ์ถ”์ ์„ ๋” ๋ณด๊ธฐ ํŽธํ•˜๊ณ  ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒŒ Redux DevTools์ด๋‹ค. Redux DevTools๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์ƒํƒœ๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค. Redux Devtools๋„ ๊ฒฐ๊ตญ์—” Redux์˜ middleware๋กœ ์ œ๊ณต์ด ๋˜๋Š”๋ฐ, ์ด middleware์˜ ํž˜์ด ๋„ˆ๋ฌด ๋ง‰๊ฐ•ํ•ด์„œ ์กฐ๊ธˆ ์‚ฌ์šฉํ•ด๋ณด๊ณ ์„  Redux๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹๊นŒ ์ƒ๊ฐํ•˜๊ฒŒ ๋๋‹ค. Redux Devtools๊ฐ€ ์ ์šฉ๋œ ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ๋ฅผ ๋Œ์•„๋‹ค๋‹ˆ๋ฉด์„œ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ ์ฝ”๋“œ๋ฅผ ๋ชจ๋ฅด๊ณ  ๋ณด๋Š” ๊ฑด๋ฐ๋„ ๊ต‰์žฅํžˆ ์ง๊ด€์ ์ด๊ณ  ์ถ”์ ํ•˜๊ธฐ ์‰ฌ์› ๋‹ค. ํ•ด์„œ ๊ฐ€๋Šฅํ•˜๋ฉด ๋‹ค์Œ์— ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—๋Š” Redux๋ฅผ ์ ์šฉํ•ด๋ณด๊ณ ์‹ถ๋‹ค.(๋ฌผ๋ก  Toolkit์œผ๋กœ ใ…Žใ…Žใ…Žใ…Žใ…Žใ…Ž)

์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ JS ํ™œ์šฉ

์š”์ฆ˜ ๋“ฃ๊ณ  ์žˆ๋Š” ์‹œ๋‚˜๋ธŒ๋กœ JS ๊ฐ•์˜์—์„œ ์€์žฌ๋‹˜์˜ JS ํ™œ์šฉ์€ ํ™•์‹คํžˆ ๋ญ”๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์ฝ”๋“œ์˜ ๋กœ์ง๋„ ๋กœ์ง์ด์ง€๋งŒ, ์‚ฌ์šฉํ•˜์‹œ๋Š” api๋‚˜ ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•˜์‹œ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ญ”๊ฐ€ ๋„˜๋‚˜ ๊น”๋”ํ•˜๊ณ  ์ž˜ ์ฝํžŒ๋‹ค๊ณ  ํ•ด์•ผํ•˜๋‚˜..? 2๊ฐ€์ง€์˜ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด

  1. matches() api ํ™œ์šฉํ•˜๊ธฐ
  • ์ •๋ง ๋ณ„๊ฑด ์•„๋‹ˆ์ง€๋งŒ, matches๋ผ๋Š” api๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ ๋„ˆ๋ฌด ์ง๊ด€์ ์ด๋ผ์„œ ๋ณด๊ธฐ ์ข‹์•˜๋‹ค.
document.querySelector('.btn').addEventListener('click', (e) => {
  if (e.target.matches('.btn')) {
    // do something
  }
})
  1. ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ํŠน์ • ๋ถ€๋ชจํƒœ๊ทธ ์ฐพ๊ธฐ
function findElement(startingElement, selector) {
  let currentElement = startingElement;
  while (currentElement) {
    if (currentElement.matches(selector)) {
      return currentElement;
    }
    currentElement = currentElement.parentElement;
  }
  return null;
}

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

๐Ÿพ ์˜ค๋Š˜์˜ ๊ตํ›ˆ

์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž์ฃผ ์ ‘ํ•˜๊ณ  ์ฝ์–ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ํ™œ์šฉํ•ด๋ณด์ž. ๊ฑฐ๊ธฐ์„œ ์–ป๋Š” ๋ฐฐ์›€์ด ์ •๋ง ํฐ ๊ฒƒ ๊ฐ™๋‹ค.

๐Ÿชต ์ฐธ๊ณ 

  • ์—†์Œ