ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Redux

[Redux] Redux๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? Redux(๋ฆฌ๋•์Šค)๋ž€?

์šฉ๋‡ฝ 2021. 7. 7. 22:32
๋ฐ˜์‘ํ˜•

Redux๋ž€? Redux ์‚ฌ์šฉ์ด์œ 

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ

React๋ฅผ ์ฒ˜์Œ ํ•™์Šตํ•˜๋˜ ์‹œ์ ˆ, Redux๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ์™œ ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ดํ•ด ์—†์ด 'Redux๋ฅผ ์™œ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”์ง€'์— ๋Œ€ํ•ด ์˜๋ฌธ์„ ๊ฐ–๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, React๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ก  ์ฝ”๋”ฉ์„ ํ•˜๊ฑฐ๋‚˜ ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์–ด ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋งŽ์€ Props๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ(Props Driling)์„ ๊ฒช๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ๊ฒฝํ—˜์„ ํ†ตํ•ด "์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ"์˜ ํ•„์š”์„ฑ์„ ์ฒด๊ฐํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Redux์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

Redux๋ž€ โ“

Redux๋Š” JavaScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.


Redux๋Š” React์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ, Redux์™€ React๋Š” ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.
Angular, Vue.js, Vanilla JavaScript ๋“ฑ ๋‹ค๋ฅธ JavaScript ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด MVC ํŒจํ„ด

React์—์„œ๋Š” state๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Redux๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ „์—๋Š” ํ”„๋ก ํŠธ์—”๋“œ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ๋œ ๋ฐฉ์‹์€ MVC(Model-View-Controller) ํŒจํ„ด์ด์—ˆ์Šต๋‹ˆ๋‹ค.

MVC ํŒจํ„ด

MVC ํŒจํ„ด์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, ๊ด€๋ จ๋œ ๋ชจ๋“  View, Model, Controller์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์ด๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ๋ฅผ ๋ถˆ๋Ÿฌ์™”์Šต๋‹ˆ๋‹ค.

์ด ์›์ธ์€ '์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„'๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Flux ํŒจํ„ด ๋“ฑ์žฅ

Flux ํŒจํ„ด

Flux๋Š” Facebook์ด ๊ฐœ๋ฐœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜ ์ค‘ ํ•˜๋‚˜๋กœ, ํด๋ผ์ด์–ธํŠธ-์‚ฌ์ดํŠธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

 

Flux๋Š” MVC ํŒจํ„ด๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ํ๋ฅด๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํฌ๊ฒŒ 4๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Action: ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • Dispatcher: ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์•™ ํ—ˆ๋ธŒ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Action์ด ๋ฐœ์ƒํ•˜๋ฉด, Dispatcher๋Š” ์ด๋ฅผ ๋ชจ๋“  Store์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Store: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ์™€ ๋กœ์ง์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. MVC์˜ Model๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ Store๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ Store๋Š” ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค.
  • View: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ๋ถ€๋ถ„์œผ๋กœ, Store์—์„œ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์™€ ๋ Œ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค. Store์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด View๋Š” ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋‹ค์‹œ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

Flux ํŒจํ„ด์€ ์ด๋ ‡๊ฒŒ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๊ณ  ๋ณ€ํ™”ํ•˜๋Š”์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

Redux ๋“ฑ์žฅ

Redux๋Š” Flux ํŒจํ„ด์˜ ์•„์ด๋””์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ , Flux์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๋ฉด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๋ฉด์„œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๊ณผ์ •์ด ๋ณต์žกํ•ด์ง€๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, '๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„'์„ ์ œ๊ณตํ•˜๋Š” Redux๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

Redux๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Š” ํŠนํžˆ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

Redux_Store

์œ„ ๊ทธ๋ฆผ์€ ์™ผ์ชฝ์€ Redux๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ, ์˜ค๋ฅธ์ชฝ์€ Redux์™€ ๊ฐ™์ด ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋Œ“๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์ด๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.

๋งŒ์•ฝ ๋Œ“๊ธ€์ด ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋ฉด, ์ด ๋ณ€๊ฒฝ์„ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๊นŒ์ง€ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์—๊ฒŒ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ดˆ๋ž˜ํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ Redux๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Redux๋Š” Redux store๋ฅผ ํ†ตํ•ด ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” Store์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Redux์˜ ์žฅ๋‹จ์  ๐Ÿง

๋ชจ๋“  ๋„๊ตฌ์™€ ๊ฐ™์ด Redux ์—ญ์‹œ ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ์ 

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

๋‹จ์ 

  • ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ํฝ๋‹ˆ๋‹ค: Redux๊ฐœ๋…์„ ์ตํžˆ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ๋‹นํ•œ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฉ๋Œ€ํ•œ ์ฝ”๋“œ์–‘: Redux๋ฅผ ํ†ตํ•ด์„œ ์ž‘์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ๋„ ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“• ๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Redux์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ ์ด์œ ์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Redux, MobX, Recoil ๋“ฑ ๋‹ค์–‘ํ•˜๋ฉฐ, ์ด๋“ค์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‚ฌ์šฉ์€ ํ•„์ˆ˜์ ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ž‘์€ ํ”„๋กœ์ ํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๋ฒˆ๋“ค ํฌ๊ธฐ๋งŒ ์ฆ๊ฐ€์‹œํ‚ฌ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์ƒํ™ฉ์„ ์ž˜ ๊ณ ๋ คํ•˜์—ฌ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์€ ๊ธ€

https://yong-nyong.tistory.com/94

 

[React] ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ (feat. redux-tookit, recoil, zustand, jotai)

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” React์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ์˜ ํŠน์ง•๊ณผ ๊ฐœ์ธ์ ์ธ ๊ฒฌํ•ด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃฐ ์ฃผ์š” ๋„ค ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. reac

yong-nyong.tistory.com

 

๋ฐ˜์‘ํ˜•