Frontend ๐Ÿ“š/React

[React] ๋ฆฌ์•กํŠธ ๊ธฐ์ˆ  ๋ฉด์ ‘ ํ•ธ๋“œ๋ถ III - FLUX, ๋ฆฌ๋•์Šค, state ๋ถˆ๋ณ€์„ฑ, ๋ฆฌ๋“€์„œ ๋ถˆ๋ณ€์„ฑ, side effect etc.

leejaejae 2024. 6. 30. 20:09

1. FLUX๋ž€
2. ๋ฆฌ๋•์Šค๋ž€
3. React์—์„œ state ๋ถˆ๋ณ€์„ฑ
4. ๋ฆฌ๋“€์„œ ๋‚ด๋ถ€์˜ ๋ถˆ๋ณ€์„ฑ๊ณผ ...์—ฐ์‚ฐ์ž์˜ ๋‹จ์  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
5. side effect ๋ฌธ์ œ์ 


1. FLUX ๋ž€ โญ๏ธโญ๏ธ

  • FLUX๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์ž„
  • MVC ํŒจํ„ด์—์„œ ์Œ๋ฐฉํ–ฅ์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ•์กฐํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ FLUX ํŒจํ„ด์—์„œ๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ•์กฐํ•จ

  • MVC ํŒจํ„ด
    • ์‚ฌ์šฉ์ž์˜ ์–ด๋– ํ•œ ํ–‰์œ„(์•ก์…˜)๊ฐ€ ์žˆ์„ ๋•Œ, ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๊ณ„๋œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์„ ๋ณ€ํ™”ํ•˜๊ณ  ์ด๋ฅผ ๋ทฐ์— ๋ฐ˜์˜ํ•จ
    • ๋ณด์—ฌ์ ธ์•ผ ํ•  ๋ทฐ๊ฐ€ ์ ๊ฑฐ๋‚˜, ๋ณ€๊ฒฝ๋  ๋ชจ๋ธ์ด ๋งŽ์ง€ ์•Š๋‹ค๋ฉด ๋งค์šฐ ํšจ์œจ์ ์ธ ๊ตฌ์กฐ์ž„
    • ํ•˜์ง€๋งŒ, ๋ชจ๋ธ๊ณผ ๋ทฐ๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€ ์žˆ๋‹ค๋ฉด ์–ด๋–ค ๋ชจ๋ธ์ด ๋ณ€ํ™”๋˜์–ด ๋ทฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์ œ๋Œ€๋กœ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น€

  • FLUX ํŒจํ„ด
    • MVC ํŒจํ„ด์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ํŒจํ„ด
    • ๋‹จ๋ฐฉํ˜•์  ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์•ก์…˜์ด ๋””์ŠคํŒจ์ฒ˜์— ์˜ํ•ด ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ๊ณ  ๋ณ€ํ™”๋˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ  ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Œ
    • ์‚ฌ์šฉ์ž์˜ ํ–‰์œ„(์•ก์…˜)์€ ๋””์ŠคํŒจ์ฒ˜์— ์˜ํ•ด ํ†ต์ œ๋จ
    • ๋””์ŠคํŒจ์ฒ˜๊ฐ€ ์Šคํ† ์–ด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ์Šคํ† ์–ด์— ๋Œ€ํ•œ ๋ทฐ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•จ
    • ๋ทฐ์—์„œ๋Š” ์Šคํ† ์–ด์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋””์ŠคํŒจ์ฒ˜๋กœ ๋‹ค์‹œ ์•ก์…˜์„ ๋ณด๋‚ด๊ณ  ์Šคํ† ์–ด๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ๋’ค, ๋‹ค์‹œ ๋ทฐ๋ฅผ ๋ฆฌ๋ Œ๋”๋ง

 

2. ๋ฆฌ๋•์Šค๋ž€ โญ๏ธโญ๏ธ

  • ๋ฆฌ๋•์Šค(Redux)
    • ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋จ
    • Store(์Šคํ† ์–ด)๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋จ
    • ์ „์—ญ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— props <-> state๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ, ์ž์‹์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚ด๋ ค์ฃผ์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ฆฌ๋•์Šค์˜ ๊ธฐ๋ณธ ์›์น™
    • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์—ญ ์ƒํƒœ๋Š” ๋‹จ์ผ ์ €์žฅ์†Œ ๋‚ด์˜ ํŠธ๋ฆฌ์— ์ €์žฅ๋จ
    • ์ƒํƒœ(state)๋Š” ์ฝ๊ธฐ ์ „์šฉ์ž„
    • ์ˆœ์ˆ˜ ํ•จ์ˆ˜(๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋Š” ํ•จ์ˆ˜)์— ์˜ํ•ด์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•จ

 

3. React์—์„œ state์˜ ๋ถˆ๋ณ€์„ฑ ์œ ์ง€ โญ๏ธ

  • ๊ฐ์ฒด๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์•„๋‹Œ ์ฐธ์กฐ ๊ฐ’์„ ๊ฐ€์ง
  • ๋”ฐ๋ผ์„œ ๋ณต์‚ฌํ•˜์—ฌ ๋™์ผํ•œ ์ฐธ์กฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด, ๋ชจ๋“  ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๊ฒƒ์ž„
  • `...(spread) ์—ฐ์‚ฐ์ž`๋ฅผ ํ†ตํ•ด ๋ณต์‚ฌํ•  ๊ฒฝ์šฐ A์™€ B๋Š” ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๋”๋ผ๋„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ํ• ๋‹น ๋ฐ›์€ ์ƒํƒœ๋จ
  • ๋”ฐ๋ผ์„œ A์™€ B ๋‚ด๋ถ€์˜ ๊ฐ’์€ ๊ฐ™๋”๋ผ๋„(๊ฐ™์•„ ๋ณด์ด๋”๋ผ๋„) ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

  • ์ด๋ฏธ ๋ณต์‚ฌ๋ฅผ ํ•œ ํ”„๋ฆฐํŠธ๋ฌผ์€ A ์ธ์‡„๋ฌผ์— ๋‚™์„œ๋ฅผ ํ•˜๋”๋ผ๋„ B ์ธ์‡„๋ฌผ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ
  • ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๊ฐ์ฒด ํ˜•์‹ ๋˜๋Š” ๋ฐฐ์—ด ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŽ์ด ๋‹ค๋ฃจ๊ฒŒ ๋˜๋Š”๋ฐ, ์›๋ณธ ๋ฐฐ์—ด์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์˜๋„ํ•œ ๋™์ž‘๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ด๋–ค ํ•จ์ˆ˜์— ์˜ํ•ด ๋ถ€์ˆ˜ ํšจ๊ณผ(side effect)๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ฐพ๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ

 

4. ๋ฆฌ๋“€์„œ ๋‚ด๋ถ€์—์„œ ๋ถˆ๋ณ€์„ฑ & ์ „๊ฐœ(spread) ์—ฐ์‚ฐ์ž์˜ ๋‹จ์  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• โญ๏ธ 

  • ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด ๋„ค ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์—…๋ฐ์ดํŠธํ•จ
    • props๊ฐ€ ๋ฐ”๋€” ๋•Œ
    • state๊ฐ€ ๋ฐ”๋€” ๋•Œ
    • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋  ๋•Œ
    • this.forceUpdate๋กœ ๊ฐ•์ œ๋กœ ๋ Œ๋”๋ง์„ ํŠธ๋ฆฌ๊ฑฐํ•  ๋•Œ
  • ๋ฆฌ๋“€์„œ์˜ initial state์—๋Š” ์„œ๋ฒ„์—์„œ ๋„˜๊ฒจ๋ฐ›๋Š” ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์ „์—ญ์œผ๋กœ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•จ
    • Q) ๋ฆฌ๋“€์„œ ๋‚ด๋ถ€์—์„œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋Š” ์ด์œ ?
    • A) ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ด์œผ๋กœ์จ ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋์„ ๋•Œ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋ฉด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง๊ณผ ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • ํ•˜์ง€๋งŒ `...(spread) ์—ฐ์‚ฐ์ž`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฐ์ฒด์˜ ๊นŠ์ด์— ๋”ฐ๋ผ, ๋กœ์ง ๊ตฌ์„ฑ์ด ๋งค์šฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ
    • Q) `...(spread) ์—ฐ์‚ฐ์ž`์˜ ๋‹จ์  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€?
    • A) immer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ, produce, drafe ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ์˜ `...(spread) ์—ฐ์‚ฐ์ž`๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•ด์ฃผ๋ฉฐ ๋ถˆํ•„์š”ํ•œ ๋ถ€์ˆ˜ํšจ๊ณผ(side effect)๋ฅผ ๋ง‰์•„์คŒ
/* ๊ธฐ์กด์˜ ...(spread)์—ฐ์‚ฐ์ž ์‚ฌ์šฉ */
const nextState = {
  ...state,
  posts: state.posts.map((post) =>
    post.id === 1
      ? {
          ...post,
          comments: post.comments.concat({
            id: 3,
            text: '์ƒˆ๋กœ์šด ๋Œ“๊ธ€',
          }),
        }
      : post
  ),
};

/* immer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ */
const nextState = produce(state, (draft) => {
  const post = draft.posts.find((post) => post.id === 1);
  post.comments.push({
    id: 3,
    text: '์™€ ์ •๋ง ์‰ฝ๋‹ค!',
  });
});

 

5. ๋ฆฌ์•กํŠธ ์‚ฌ์šฉ์‹œ ๋ถ€์ˆ˜ํšจ๊ณผ(side effect)๋กœ ์ธํ•ด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์  โญ๏ธโญ๏ธ

  • ๋ถ€์ˆ˜ํšจ๊ณผ
    • ํ•จ์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ๋ชฉ์ ๊ณผ๋Š” ๋‹ค๋ฅธ ํšจ๊ณผ ๋˜๋Š” ๋ถ€์ž‘์šฉ
  • ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ค๋Š” ํ•จ์ˆ˜(๋ถˆ์ˆœํ•จ์ˆ˜)
/* ์ฝ”๋“œ ์ฐธ์กฐ (https://maxkim-j.github.io/posts/js-pure-function) */

// http ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜ : ์ˆœ์ˆ˜ํ•จ์ˆ˜ ๋  ์ˆ˜ ์—†์Œ
const getData = () => {
  axios.get('http://data.url')
  .then(...)
  .catch(...)
}

// ์ž…๋ ฅ ๋‚ดํฌํ•œ ํ•จ์ˆ˜ : ์ˆœ์ˆ˜ํ•จ์ˆ˜ ๋  ์ˆ˜ ์—†์Œ
const typeInput = () => {
  const input = prompt("Message");
  return input;
}

// ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜ : ์ˆœ์ˆ˜ํ•จ์ˆ˜ ๋  ์ˆ˜ ์—†์Œ
const changeParams = (arr, elem) => {
  arr.push(elem);
  return arr;
}
  • ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋Š” ํ•จ์ˆ˜(์ˆœ์ˆ˜ ํ•จ์ˆ˜)
/* ์ฝ”๋“œ ์ฐธ์กฐ (https://maxkim-j.github.io/posts/js-pure-function) */

const num_arr = [1, 2, 3, 4, 5];

// ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋Š” ๋ถˆ์ˆœํ•จ์ˆ˜
const addSixImpure = (arr) => {
  // ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ง์ ‘ 6 ์ถ”๊ฐ€
  arr.push(6);
  return arr;
};

// ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜
const addSixPure = (arr) => {
  // ํŽผ์นจ ์—ฐ์‚ฐ์ž๋กœ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— 6 ์ถ”๊ฐ€
  newArr = [...arr, 6];
  return newArr;
};

// ๋งค๊ฐœ๋ณ€์ˆ˜ arr์— 6์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
const hasSix = (arr) => {
  if (arr.includes(6)) {
    return true;
  } else {
    return false;
  }
};

const new_arr = addSixImpure(num_arr);
console.log(hasSix(num_arr)); // true
  • addSixPure()๊ณผaddSixInpure()๋Š” ์–ธ๋œป ๋ณด๋ฉด ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†์–ด ๋ณด์ด์ง€๋งŒ addSixInpure()๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋Š” ๋ถˆ์ˆœํ•จ์ˆ˜์ด๊ณ , addSixPure()๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜์ž„
    • addSixInpure()๋Š” num_arr์„ ์ง์ ‘ ๋ฐ”๊ฟจ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด num_arr์˜ ๊ฐ’์ด [1,2,3,4,5,6]์œผ๋กœ ์˜๊ตฌํžˆ ๋ฐ”๋€œ. ๊ทธ๋ž˜์„œ hasSix()ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋กœ๋Š” true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ
    • ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๊ฐ€ ๋ณ€์ˆ˜ new_arr์— addSix ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ํ• ๋‹นํ•˜๊ณ  ๋‚œ ํ›„, ๊ฐ’์ด [1,2,3,4,5]์ธ num_arr์— ๋Œ€ํ•ด์„œ 6์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๊ฑฐ์˜€๋‹ค๋ฉด ์ฝ”๋“œ๋Š” ์˜๋„๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•˜์Œ

  • ์š”์•ฝ!
    • react state๋Š” ์ง์ ‘ ์กฐ์ž‘์„ ํ”ผํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ๋ฐฉ์ง€ํ•จ(state, props๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜๋„์น˜ ์•Š๊ฒŒ ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ๊ฐ€์ง„ ํ•จ์ˆ˜๋“ค๋กœ ์ธํ•ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ์žฆ์•„์งˆ ์ˆ˜ ์žˆ์Œ)
    • Redux์˜ reducer๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜์—ฌ์•ผ๋งŒ ํ•˜๋Š”๋ฐ, store๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ๋™๋ฐ˜ํ•˜์ง€ ์•Š์•„์•ผ store ๋‚ด๋ถ€์˜ ๊ฐ’๋“ค์ด ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ