Redux

์™œ Flux๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์„๊นŒ?

๊ธฐ์กด์˜ MVC ์•„ํ‚คํ…์ฒ˜

  • Model
  • Viewxxs
    • ๋ชจ๋ธ์˜ ๋ณ€ํ™”๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœํ•˜๋Š” ์—ญํ• 
  • Controller
    • ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์—ญํ• 

๊ธฐ์กด์˜ MVC์˜ ํ•œ๊ณ„์ ์€ ์–ด๋–ค๊ฒŒ ์žˆ์„๊นŒ?

  • ํŽ˜์ด์Šค๋ถ๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” MVC๊ฐ€ ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ, ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๋Š” ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ์กฐ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ธฐ์— ์ƒˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ์— ํฌ๊ณ  ์ž‘์€ ๋ฌธ์ œ ๋ฐœ์ƒ.
  • ๋Œ€ํ‘œ์ ์ธ ์˜ˆ
    • ํŽ˜์ด์Šค๋ถ ์•ˆ ์ฝ์€ ๊ฐœ์ˆ˜ ํ‘œ์‹œ
    • ์ฝ์Œ โ†’ ๊ธ€์„ ๋‹ค๋ฃจ๋Š” Thread ๋ชจ๋ธ Update
    • ๋™์‹œ์— โ†’ unRead Count ๋ชจ๋ธ Update

์ฆ‰ ํ•˜๋‚˜์˜ Action์ด ๋‹ค์–‘ํ•œ ๋ชจ๋ธ์— ๋ณ€ํ™”๋ฅผ ์ฃผ๋Š” ์ƒํ™ฉ์—์„œ ๊ธฐ์กด์˜ MVC๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Flux๋ž€?

  • ๊ธฐ์กด์˜ MVC์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค.

Flux ๋ฐ์ดํ„ฐ ํ๋ฆ„

  • ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์™œ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด ์•„๋‹๊นŒ?

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

Flux ๊ตฌ์„ฑ์š”์†Œ

Dispatcher

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋Š” ํ—ˆ๋ธŒ ์—ญํ• 
  • ์•ก์…˜์ด ๋ฐœ์ƒํ•˜๋ฉด Dispathcher๋กœ ๋ฉ”์‹œ์ง€(์•ก์…˜ ๊ฐ์ฒด)๊ฐ€ ์ „๋‹ฌ โ†’ ๋“ฑ๋ก๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์Šคํ† ์–ด ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๊ตฌ์„ฑ์š”์†Œ์™€ ๋‹ฌ๋ฆฌ Dispathcher๋Š” ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•œ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Action

  • Dispathcher์˜ ํŠน์ • Method๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์Šคํ† ์–ด์— ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, Action(๋ฐ์ดํ„ฐ ๋ฌถ์Œ)์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • ๋ณดํ†ต ์•ก์…˜ ํƒ€์ž… ๋˜๋Š” ์•ก์…˜ ์•„์ด๋””๋ผ ๋ถ€๋ฅด๋Š” ๊ณ ์œ ํ•œ ํ‚ค์™€ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

Store

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๋„๋ฉ”์ธ์— ํ•ด๋‹นํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋‹ค๋ฃฌ๋‹ค๊ณ  ๋ณด๋Š” ํŽธ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • Example
    • TimeStore : ์‹œ๊ฐ„, ์žฌ์ƒ์ƒํƒœ, ์œ„์น˜
    • ImageStore : ์ด๋ฏธ์ง€ ๊ด€๋ จ ์ •๋ณด
  • Dispatcher๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋จผ์ € ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ Dispatcher์— ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

View

  • Store์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” EventListener๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • Store์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฅผ View ๋ฐ˜์˜ํ•˜๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค.

์™œ Redux๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์„๊นŒ?

Component์˜ State๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๊ณ  ๋‹ค๋ฅธ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง„ Component์— ์ด๋ฅผ ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค๋ฉด?

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Redux๋ผ๋Š” ์ƒํƒœ๊ด€๋ฆฌ์ž๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Redux๋ž€?

  • Redux๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•ฑ์„ ์œ„ํ•œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

Redux ๊ตฌ์„ฑ์š”์†Œ

Dispatcher

  • Redux๋Š” Dispatcher๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ Flux๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ Dispatcher๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‹ค์ œ ๋””์ŠคํŒจ์น˜ ๋™์ž‘์€ ์Šคํ† ์–ด์˜ dispatch ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.

Action

  • Redux์—์„œ ์•ก์…˜์€ ์•ก์…˜ ํƒ€์ž…(๋˜๋Š” ์•ก์…˜ ์•„์ด๋””)์„ ์ƒ์ˆ˜๋กœ ์ž‘์„ฑํ•œ ํ›„ ์•ก์…˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

Reducer

  • ๋ฆฌ๋“€์„œ(Reducer)๋Š” Flux์—๋Š” ์—†๋Š”, Redux์—์„œ๋งŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์šฉ์–ด์ด๋‹ค.
  • ์•ก์…˜์€ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€๋Š” ์•Œ๋ ค์ฃผ์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ์–ด์•ผ ํ• ์ง€๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š”๋ฐ, Redux ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ๋ฆฌ๋“€์„œ๊ฐ€ ์ด ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • Flux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์Šคํ† ์–ด ๊ฐ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜์™€ ํ•˜๋Š” ์—ญํ• ์€ ๋น„์Šทํ•˜๋‹ค.
  • ์ฃผ์˜ํ•  ์ .
    • ๊ธฐ์กด์˜ state๋Š” ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
    • ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ Object.assign ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.
    • default ์ผ€์ด์Šค์—์„œ ๊ธฐ์กด state๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

Reference