๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

[Chllange/TIL] Flux Architecture - Redux & Redux Toolkit

Dana10 2025. 2. 3. 23:52

 

Flux Architecture๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๊ทธ์ „์— Architecture(์•„ํ‚คํ…์ฒ˜)์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด์ž.

 

์•„ํ‚คํ…์ฒ˜๋ž€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ์–ด๋–ค ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ• ์ง€ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด Flux๋Š” ๋ญ˜๊นŒ? 

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

์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ์€ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ํ๋ฆ„์ด๋ผ๋Š” ๊ฒƒ์ธ๋ฐ

์ฆ‰ Flux Architexture๋ž€, ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ํ๋ฆ„์„ ๊ฐ–๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋งํ•œ๋‹ค.


๊ทธ๋Ÿผ Flux Architecture์˜ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€ ๋ณด์ž.

  1. Action์ด ์ด๋ฒคํŠธ ๋ฐœ์ƒ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ผ์ข…์˜ ํ—ˆ๋ธŒ์—ญํ• ์„ ํ•˜๋Š”  Dispatcher์— Action์„ ์ „๋‹ฌ
  2. Dispatcher๋Š” state๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” Store์— Action์„ ์ „๋‹ฌ
  3. Store๋Š” ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋‹ค์‹œ state๋ฅผ ์ €์žฅ
  4. ํ•ด๋‹น Store๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋˜ View๋Š” state์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๋ฆฌ๋ Œ๋”๋งํ•จ
  5. ๋˜๋‹ค์‹œ Action์ด ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด Dispatcher์—๊ฒŒ ์ „๋‹ฌ 
  6. ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„ ๋ฐ˜๋ณต

์ด๋ฒˆ์—๋Š”  Reducer + Flux๋กœ, Flux Architecture๋ฅผ ๊ตฌํ˜„ํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Redux์˜ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€ ๋ณด์ž.

 

  1. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•ก์…˜ ๊ฐ์ฒด๋ฅผ dispatch๋ฅผ ํ†ตํ•ด reducer์— ์ „๋‹ฌ
  2. reducer๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ, ์ธ์ž๋กœ ๋ฐ›์€ ์•ก์…˜ ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜์—ฌ state ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ์‹œํ‚ค๊ณ  ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์Šคํ† ์–ด์— ์ „๋‹ฌ
  3. store๋Š” ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ์ €์žฅํ•จ
  4. store๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋˜ ์ปดํฌ๋„ŒํŠธ๋Š” state์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๋ฆฌ๋ Œ๋”๋ง์„ ํ•จ
  5. ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋จ

<Flux์™€์˜ ์ฃผ์š” ์ฐจ์ด>

  1. Store์˜ ์—ญํ•  ์ฐจ์ด: Flux์—์„œ๋Š” Store๊ฐ€ ์ƒํƒœ์™€ ์ƒํƒœ ๊ฐฑ์‹  ๋กœ์ง์„ ๋ชจ๋‘ ๋‹ด๊ณ  ์žˆ์ง€๋งŒ, Redux์—์„œ๋Š” Store๋Š” ๋‹จ์ˆœํžˆ ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๋ฉฐ, ๊ฐฑ์‹  ๋กœ์ง์€ ๋ฆฌ๋“€์„œ์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. Dispatcher ์‚ญ์ œ: reducer ํ•จ์ˆ˜๊ฐ€ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Redux๋Š” ๋‹จ์ผ Store๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, Dispatcher๊ฐ€ ๋”ฐ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
  3. ๋ถˆ๋ณ€์„ฑ ์ค€์ˆ˜: Redux๋Š” ์ƒํƒœ์˜ ๋ถˆ๋ณ€์„ฑ์„ ๊ผญ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค.

 

Redux๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด, ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์ƒ๋‹นํžˆ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ฒŒ ๋œ๋‹ค.

์ด๋Ÿฐ ๋ณต์žก์„ฑ์„ ํ•ด์†Œํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด Redux Toolkit (RTK)๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

Redux์—์„œ๋Š”

  • reducer๋ฅผ ์ง์ ‘ ์ •์˜ํ•˜๊ณ ,
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ reducer๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ combineReducers๋ฅผ ํ†ตํ•ด ํ•ฉ์นœ ๋’ค,
  • createStore๋ฅผ ์‚ฌ์šฉํ•ด store๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ–ˆ๋‹ค.

 

๋ฐ˜๋ฉด Redux Toolkit์—์„œ๋Š”

  • createSlice๋ฅผ ํ†ตํ•ด reducer ๋กœ์ง๊ณผ ์•ก์…˜ ํ•จ์ˆ˜๋ฅผ ํ•œ ๊ณณ์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
  • configureStore๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด combineReducers๋ฅผ ๋”ฐ๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„
  • ์—ฌ๋Ÿฌ reducer๋ฅผ ์ž๋™์œผ๋กœ ํ•ฉ์ณ store๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Redux Toolkit์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค.

  • ์ฝ”๋“œ๋ฅผ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ Immer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆ๋ณ€์„ฑ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด ์ค€๋‹ค.
  • ์ถ”๊ฐ€ ์„ค์ • ์—†์ด Redux ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.