๐ŸŽจFrontEnd/React

React - redux ์ดํ•ดํ•˜๊ธฐ (๋ฆฌ๋•์Šค ๊ฐœ๋…์ •๋ฆฌ)

IOTrue 2023. 1. 4. 11:36

๐Ÿ˜Ž React - ๋ฆฌ๋•์Šค(redux) ์ดํ•ดํ•˜๊ธฐ

โœ… Redux๋ž€?

๋ฆฌ๋•์Šค ์‚ฌ์šฉ ์ด์œ ๋ฅผ ํ•œ ๋ฒˆ์— ์„ค๋ช…ํ•˜๋Š” ์ด๋ฏธ์ง€

 

Redux
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
์ƒํƒœ๊ฐ€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ๋งŒ ์—…๋ฐ์ดํŠธ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ทœ์น™๊ณผ ํ•จ๊ป˜
์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํƒœ์— ๋Œ€ํ•œ ์ค‘์•™ ์ง‘์ค‘์‹ ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
-redux ๊ณต์‹๋ฌธ์„œ-

 

ํ•œ ๋งˆ๋””๋กœ ๋ฆฌ๋•์Šค๋Š” "state ์‚ฌ์šฉ์„ ๋” ํŽธํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ"๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 

Local State

 

๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด

A ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์žˆ๋Š” data๋ผ๋Š” state๋ฅผ(Local State) B ํ˜น์€ C ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด

A ์ปดํฌ๋„ŒํŠธ์—์„œ B๋‚˜ C ํ˜น์€ B๋ฅผ ํ†ตํ•ด์„œ C๋กœ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค

๋งŒ์•ฝ ๊ทธ depth๊ฐ€ ๊นŠ๋‹ค๋ฉด? ์ด๋ฏธ์ง€(Without Redux)์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด

์ „๋‹ฌ & ์ „๋‹ฌ & ์ „๋‹ฌ์„ ๊ณ„์† ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค(props drilling)

์ „๋‹ฌ์— ์ „๋‹ฌ์„ ๊ฑฐ๋“ญํ•˜๋Š” Local State

 

Local State๋ฅผ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”

ํ•œ ๋‹จ๊ณ„์”ฉ ์ „๋‹ฌ ํ•ด์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค!

 

 

Global State

 

Local State์˜ ๋ถˆํŽธํ•จ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€

State ๊ด€๋ฆฌ๋ฅผ Local์ด ์•„๋‹Œ Globalํ•˜๊ฒŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค

๊ทธ๋ž˜์„œ ๋ฆฌ๋•์Šค(Redux)๊ฐ€ ์กด์žฌํ•œ๋‹ค!

๋ฆฌ๋•์Šค๋ฅผ ํ•œ ๋ฒˆ์— ์„ค๋ช…ํ•˜๋Š” ์ด๋ฏธ์ง€

 

๋ฆฌ๋•์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์ดํ•ด๊ฐ€ ๋์œผ๋ฆฌ๋ผ ์ƒ๊ฐํ•œ๋‹ค

์ด์ œ ๋น ๋ฅด๊ฒŒ ๋ฆฌ๋•์Šค๋ฅผ ์•Œ์•„๋ณด์ž

 

โœ… redux์˜ 3๊ฐ€์ง€ ๊ทœ์น™

1. Single source of truth(๋‹จ์ผ ์Šคํ† ์–ด)

  • ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์—๋Š” ํ•˜๋‚˜์˜ ์Šคํ† ์–ด(๋ฐ์ดํ„ฐ ๊ณต๊ฐ„)๊ฐ€ ์žˆ๋‹ค.

2. State is read-only(์ฝ๊ธฐ ์ „์šฉ ์ƒํƒœ)

  • ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋Š” ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. (๋ถˆ๋ณ€์„ฑ ์œ ์ง€)
  • ์ข‹์€ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์–•์€ ๋น„๊ต(shallow equality) ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•ด ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค

3. Changes are made with pure functions(๋ฆฌ๋“€์„œ๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค)

  • ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๋Š” ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค

*์ˆœ์ˆ˜ ํ•จ์ˆ˜์˜ ์กฐ๊ฑด

  • ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค (ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ๋ผ์น˜๋ฉด ์•ˆ๋œ๋‹ค)
  • ๊ฐ™์€ ์ž…๋ ฅ ๊ฐ’์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์–ธ์ œ๋‚˜ ๊ฐ™์€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค

 

 

โœ… redux์˜ ํ•ต์‹ฌ ์š”์†Œ 5๊ฐ€์ง€

๋ฆฌ๋•์Šค์˜ ํ•ต์‹ฌ ์š”์†Œ์— ๋Œ€ํ•œ ์„ค๋ช…

  • Action
  • Reducer
  • Store
  • Dispatch
  • Subscribe

Action
State ํ–‰๋™ ์ •์˜ ์˜์—ญ

 

Reducer

๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๋Š” ํ•จ์ˆ˜ (action์„ ํ†ตํ•ด ์ •์˜ํ•œ ํ–‰๋™์„ ์‹คํ–‰)

์ฆ‰, ๋ฐ์ดํ„ฐ(state)๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ํ•จ์ˆ˜


Store
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋ฉฐ

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


Dispatch

์Šคํ† ์–ด์˜ ๋‚ด์žฅํ•จ์ˆ˜์ด๋ฉฐ
๋””์ŠคํŒจ์น˜๋Š” ‘์•ก์…˜์„ ๋ฐœ์ƒ ์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ’์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค

store์—์„œ reducerํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ state๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค
dispatch(action) ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์•ก์…˜ ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์„œ ํ˜ธ์ถœํ•œ๋‹ค


Subscribe

subscribe๋Š” ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•œ๋‹ค

dispatch๋ฅผ ํ†ตํ•ด์„œ reducer์˜ state๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ฌ ๋•Œ ๋งˆ๋‹ค ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•œ๋‹ค

subscribe์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋œ ํ•จ์ˆ˜๋Š” ์•ก์…˜์ด ๋””์ŠคํŒจ์น˜๋˜์–ด ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ๋งˆ๋‹ค ํ˜ธ์ถœ๋œ๋‹ค

 

 

โœ… redux์˜ ํ๋ฆ„

๋ฆฌ๋•์Šค์˜ ํ๋ฆ„. ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค!

 

1. view ์—์„œ ์•ก์…˜์ด ์ผ์–ด๋‚œ๋‹ค.
2. action ๊ฐ์ฒด๊ฐ€ dispatch() ๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌ๋œ๋‹ค.
3. dispatch(์•ก์…˜)์„ ํ†ตํ•ด action์ด ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.
4. action์— ์˜ํ•œ reducer ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— middleware๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.
5. middleware์—์„œ ๋ช…๋ น ๋‚ด๋ฆฐ ์ผ์„ ์‹คํ–‰ ํ›„, reducer ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
6. reducer์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ƒˆ๋กœ์šด ๊ฐ’(state)์„ store์— ์ €์žฅํ•œ๋‹ค.
7. store์˜ state๋ฅผ subscribeํ•˜๊ณ  ์žˆ๋˜ UI์— ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ์ค€๋‹ค.

 

 

๐Ÿ’ก redux ์ •๋ฆฌ

-์ค‘์•™ ์ง‘์ค‘์‹ State ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•œ๋‹ค

-๋ฆฌ๋•์Šค์—๋Š” 3๊ฐ€์ง€ ๊ทœ์น™์ด ์žˆ๋‹ค (๋‹จ์ผ ์Šคํ† ์–ด, ์ฝ๊ธฐ ์ „์šฉ ์ƒํƒœ, ์ˆœ์ˆ˜ํ•จ์ˆ˜ ๋ฆฌ๋“€์„œ)

-๋ฆฌ๋•์Šค์—๋Š” 5๊ฐ€์ง€ ํ•ต์‹ฌ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค (Action, Reducer, Store, Dispatch, Subscribe)

๋ฆฌ๋•์Šค์˜ ํ๋ฆ„ ๊ฐ„๋žตํ™” ์„ค๋ช…

 

โ— ๋งˆ๋ฌด๋ฆฌ

๋ฆฌ์•กํŠธ์™€ ๋ฆฌ๋•์Šค๋Š” ๋ณ„๊ฐœ๋‹ค

๋ฆฌ๋•์Šค๋Š” ๋ฆฌ์•กํŠธ์˜ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ js, vue, angular ๋“ฑ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์ด๋‹ค

ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ์—์„œ ๋ฆฌ๋•์Šค ๊ฐ™์€ ๊ฐœ๋…์€ ๊ผญ ํ•„์š”ํ•˜๋‹ค (๋ฐ์ดํ„ฐ์˜ ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„ ๋•Œ๋ฌธ)

์ฆ‰, ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฆฌ์•กํŠธ์—์„œ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ๋ถˆํŽธํ•จ์„ ๊ฐœ์„ ์‹œํ‚ค๊ณ 

๊ฐœ๋ฐœ์— ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์—์„œ ์ƒํƒœ๊ด€๋ฆฌ ๋„๊ตฌ๋Š” ํ•„์ˆ˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ฐธ๊ณ 

https://react.vlpt.us/redux/01-keywords.html

https://ko.redux.js.org/introduction/getting-started