Redux๋ž€ ?

Redux๋ž€ ?

๐ŸŒŽ Redux

๐ŸŒž 1. ๋ฆฌ๋•์Šค๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

โ€œ์ค‘์•™ state ๊ด€๋ฆฌ์†Œโ€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํŒจํ‚ค์ง€(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ์ด๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋“ค์€ โ€œ๋ฆฌ๋•์Šคโ€๋ฅผ ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ผ๊ณ  ๋งŽ์ด ํ‘œํ˜„ํ•œ๋‹ค. ์ „์—ญ ์ƒํƒœ, ์ฆ‰ Global State๋ฅผ ์˜๋ฏธํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (ํŒจํ‚ค์ง€) ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


๐ŸŒž 2. ๋ฆฌ๋•์Šค๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

๐ŸŒง props ๋กœ state ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๋ถˆํŽธํ•จ

  1. ์ปดํฌ๋„ŒํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๋กœ State๋ฅผ ๋ณด๋‚ด๊ธฐ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ๋ถ€-๋ชจ ๊ด€๊ณ„๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.
  1. ์กฐ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์†์ž ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ’์„ ๋ณด๋‚ด๊ณ ์ž ํ• ๋•Œ๋„ ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑฐ์ณ์•ผ๋งŒ ํ•œ๋‹ค. ์ฆ‰, ์ •์ž‘ ๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๊ทธ ๊ฐ’์ด ํ•„์š”๊ฐ€ ์—†์–ด๋„ ๋‹จ์ˆœํžˆ ์†์ž ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ฑฐ์ณ์•ผ๋งŒ ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. (์กฐ๋ถ€๋ชจ โ†’ ๋ถ€๋ชจ โ†’ ์†์ž) props drilling
  2. ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ’์„ ๋ณด๋‚ผ ์ˆ˜ ์—†๋‹ค.

๋ฆฌ๋•์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด State๋ฅผ ๊ณต์œ ํ•˜๊ณ ์ž ํ• ๋•Œ ๋ถ€-๋ชจ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ ๋˜๊ณ , ์ค‘๊ฐ„์— ์˜๋ฏธ์—†์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋งŒ๋“  State๋ฅผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


๐ŸŒž 3. Global state์™€ Local state

๐ŸŒง Local state (์ง€์—ญ์ƒํƒœ) ๋ž€?

  • ์ปดํฌ๋„ŒํŠธ์—์„œ useState๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•œ state ์ด๋‹ค. ์ข์€ ๋ฒ”์œ„ ์•ˆ์—์„œ ์ƒ์„ฑ๋œ State ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๐ŸŒง Global state (์ „์—ญ์ƒํƒœ)๋ž€?

  • Global state๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ค‘์•™ํ™” ๋œ ํŠน๋ณ„ํ•œ ๊ณณ์—์„œ State๋“ค์ด ์ƒ์„ฑ๋œ๋‹ค. ์ค‘์•™ State๊ด€๋ฆฌ์†Œ์—์„œ State๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋งŒ์•ฝ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์—์„œ State๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋””์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋“  ์ƒ๊ด€์—†์ด State๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํŠน์ • ์ปดํฌ๋„ŒํŠธ์— ์ข…์†๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ค‘์•™ state ๊ด€๋ฆฌ์†Œ์—์„œ ์ƒ์„ฑ๋œ State๋ฅผ Global state๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๊ฐ’๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ๊ณ  ํ•œ๋‹ค.

๐ŸŒž 4. ๋ฆฌ๋•์Šค์˜ ํ๋ฆ„ ๊ตฌ์กฐ


๐ŸŒž 5. Duck ํŒจํ„ด

Erik Rasmussn ๊ฐ€ ์ œ์•ˆํ•œ Ducks ํŒจํ„ด์€ ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ์ง€์ผœ ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ์ด๋‹ค.

  1. Reducer ํ•จ์ˆ˜๋ฅผ export default ํ•œ๋‹ค.
  1. Action creator ํ•จ์ˆ˜๋“ค์„ export ํ•œ๋‹ค.
  2. Action type์€ app/reducer/ACTION_TYPE ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค. (์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ ๋˜๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•  ๊ฒฝ์šฐ์—๋Š” UPPER_SNAKE_CASE ๋กœ๋งŒ ์ž‘์„ฑํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.)

๊ทธ๋ž˜์„œ ๋ชจ๋“ˆ ํŒŒ์ผ 1๊ฐœ์— Action Type, Action Creator, Reducer ๊ฐ€ ๋ชจ๋‘ ์กด์žฌํ•˜๋Š” ์ž‘์„ฑ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๐ŸŒง ๋‚˜์˜ Duck ์˜ˆ์‹œ

JP
์ด์ค‘ํ‘œFrontend Engineer

3๋…„์ฐจ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž. Next.js, React, TypeScript ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ „๋ฌธ. ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์—์„œ SSRยทISR ๋ Œ๋”๋ง ์ „๋žต ์„ค๊ณ„ ๊ฒฝํ—˜.

์ด๋ ฅ์„œ ๋ณด๊ธฐโ†’