React
λ₯Ό μ¬μ©νλ€λ³΄λ©΄ μμ°μ€λ½κ² μνκ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ³ λ €νκ² λκ³ μ΄λ―Έ λ€μν μνκ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ€μ΄ μ‘΄μ¬νλκ²μ κΉ¨λ«κ² λλ€. λλΆλΆμ κ°λ°μλ€μ κ°μ₯ 보νΈμ μΈ redux
λ₯Ό μ¬μ©ν κ²μ΄λ©°, μ΄ redux
λ₯Ό
μ’ λ νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ ν΄μ£Όλ λΆκ°μ μΈ λΌμ΄λΈλ¬λ¦¬/νλ μμν¬λ₯Ό λμ
ν΄μ μ¬μ©νκ² λλ€.
κ·Έ μ€ μ΄ ν¬μ€νΈμμλ redux-saga
μ λν΄ μμλ³΄λ €κ³ νλ€.
Why Redux ?
Redux-saga
λ₯Ό μ¬μ©νκΈ°μ μμ Redux
λ₯Ό μ μ¬μ©νλμ§μ λν΄μ λ¨Όμ μκ°ν΄λ³΄μ.
μλ React
λ₯Ό μ°λ©΄μ state
λ₯Ό μ¬μ©νλλ° λΆλ΄μ λλΌκ±°λ, props drilling
μ΄ λλλλ©΄μ μ μμ μΌλ‘ ν¨μ¨μ μΈ state management
κ° νμν΄μ‘κ³ , κ·Έμ λν ν΄κ²°μ±
μΌλ‘ Redux
κ° λ±μ₯νλ€. Redux
λ₯Ό λ§μ κ°λ°μλ€μ΄ μ¬μ©νκ² λλ©΄μ κ·Έλ§νΌ λ¨μ λ λλλκ² λμλλ°, νκ²½μ€μ μ΄ λ³΅μ‘νλ€λκ°, boilerplate
κ° λ무 λ§μ΄ μꡬλκ³ , λΉλκΈ° μμ
μ λν λν
μΌνκ³ νΈν 컨νΈλ‘€μ΄ μ΄λ ΅λ€λ λ¬Έμ μ λ€ μ΄μλ€. μ΄λ¬ν λ¬Έμ μ μ μ‘°κΈμ΄λλ§ ν΄κ²°ν΄μ€ Redux
μ ν¨κ» μ¬μ©ν μ μλ middleware
κ° λ±μ₯νκ² λμκ³ , κ·Έμ€ νλκ° Redux-saga
μ΄λ€.
What is Redux-saga?

Redux-saga
λ μ ν리μΌμ΄μ
μ side effect
(data fetching
κ³Ό κ°μ λΉλκΈ°μμ
λλ browser cache access
μ κ°μ μμνμ§ μμ μμ
)λ₯Ό μ½κ² κ΄λ¦¬νκ³ ,
μ€ννκΈ° μ½λλ‘ νκ³ , ν
μ€νΈνκΈ° μ¬μ°λ©°, μ€λ₯λ₯Ό λ μ μ²λ¦¬νλ κ²μ goal
λ‘ νλ λΌμ΄λΈλ¬λ¦¬μ΄λ€.
redux
μ middleware
μ€ νλμΈ redux-saga
λ μ μμ μΈ redux
μμ
μΌλ‘ λ©μΈ μ ν리μΌμ΄μ
μμ μμ, μΌμμ€μ§, μ·¨μ λ±μ μνν μ μκ³ , μ 체 redux
μνμ μ κ·Όν μ μμΌλ©°, redux
μμ
λ dispatch
ν μ μλ€.
ES6μ generator
κΈ°λ₯μ νμ©νμ¬ μ΄λ¬ν λΉλκΈ° λμμ μ½κ² μμ±νκ³ , μ½κ³ , ν
μ€νΈν μ μλ€. λλΆλΆμ λΉλκΈ° middleware
λ‘ redux-thunk
λ₯Ό λ§μ΄ μ¬μ©νμ§λ§, redux-saga
λ λ€μν κ²½μ°λ handling ν μ μλ€
What does Redux-saga consist of?
redux-saga
μμλ generator
λ¬Έλ²μ μ¬μ©νλ€. κ·Έλ¦¬κ³ redux-saga
μμ λ§νλ saga
λ μ΄ generator function
μ΄λ€. saga
λ yield
κ°μ return
νκ³ , middleware
κ° μ΄ κ°μ λ°μμ μ€ννλ μν μ νλ€. saga
λ λ¨μν λ°νλ§ νκΈ° λλ¬Έμ ν
μ€νΈμ λ‘μ§μ΄ ν¨μ¬ μ©μ΄νκ³ κ°νΈν΄μ§λ€.
μ€νν λͺ
λ Ήμ λ΄κ³ μλ javascript
κ°μ²΄
νλμ saga
κ° μ€νλλ κ²
Pros and cons
- Good κΈ°μ‘΄ μμ²μ μ·¨μ νκ±°λ λΆνμν μ€λ³΅ μμ²μ λ°©μ§ν μ μλ€
- Good νΉμ
action
μ λ€λ₯Έaction
μ μ°κ²°ν΄ μμ²νκ±°λ,api
μμ² λ±redux
μ κ΄κ³μλ μ½λλ₯Ό μ€νν λ ν¨κ³Όμ μ΄λ€ - Good λΉλκΈ° μμ μ μ²λ¦¬νλλ° νΈλ¦¬νλ€
- Good μ»΄ν¬λνΈ λ°μμ μ΄λ ν μμ μ μνν λ νΈλ¦¬νλ€
- Not Good λ§μ΄ λ€λ£¨μ§ μλ generator λ¬Έλ²μ μ¬μ©νμ¬ λ¬λ컀λΈκ° μ‘΄μ¬
- Not Good typescript μ§μμ΄ λ―Έν‘
- Not Good μ΅κ·Ό release dateκ° 2019λ μΌλ‘ μ€λμ
Saga-effects
delay
μ€μ λ μκ°μ΄νμresolve
νλpromise
λ₯Ό 리ν΄νλ€put
νΉμ νaction
μdispatch
νλ€call
μ£Όμ΄μ§ ν¨μλ₯Ό μ€ννλ€ (μ£Όλ‘ api νΈμΆμ μ¬μ©)take
λ€μ΄μ€λaction
μ μ²λ¦¬νλ€. νλ² μ€νλκ³event
κ° μμ λλ€takeEvery
λ€μ΄μ€λ λͺ¨λaction
request
μ λν΄task
λ₯Ό μ€ννλ€ (request
μ μ΄λ―Έ μ΄μ task
κ° μ€νμ€μ΄λΌλ©΄ μ΄μ task
λ μλμΌλ‘ μ·¨μλλ€)fork
λ°±κ·ΈλΌμ΄λμμtask
λ₯Ό μ€ννλ€cancel
fork
λtask
λ₯Ό μ·¨μμν¨λ€all
generator
ν¨μλ₯Ό λ°°μ΄ ννλ‘ λ£μ΄μ£Όλ©΄ λ³λ ¬μ μΌλ‘ ν΄λΉ ν¨μλ€μ΄ λμ μ€νλκ³ μ λΆresolve
λ λκΉμ§ κΈ°λ€λ¦°λ€
Review
μ€μ Redux-saga
λ₯Ό μ
무μμ λͺλ
μ§Έ μ¬μ©νκ³ μλ€. μμͺ½μμ μΈκΈνλ λ€μν effects
μ λ€μ©κ³Ό, λΉλκΈ° μμ
μ μ²λ¦¬νλλ° νΈλ¦¬νλ€ λ±μ μ₯μ λ€μ νμ€ν λ€λ₯Έ middleware
λ³΄λ€ redux-saga
μ λ§€λ ₯μ λμ¬μ£Όλ μμλ€μ΄λ€. νμ§λ§ μ€μ μ¬μ©νλ©΄μ κ°μ₯ ν¬κ² λ€κ°μλ λ¨μ μ€ νλκ° λ°λ‘ μ μ§λ³΄μκ° νμ¬κΉμ§ μ λλ‘ μ΄λ£¨μ΄μ§μ§ μκ³ μκ³ , νΉνλ typescript
λ₯Ό νλ‘μ νΈμ μΈν
νκ³ μ¬μ©νλ μ§κΈ μλΉμ€μμ redux-saga
κ° typescript
λ₯Ό μ λλ‘ μ§μν΄μ£Όμ§ μλλ€λ κ²μ΄ ν° κΈ°μ λΆμ±κ° λκ³ μλ€. (λ€λ₯Έ μνκ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ κ²ν μ€μ΄λ€) μμΌλ‘ redux-saga
μ λ―Έλμ μ‘΄μ¬μ¬λΆκ° μ΄λ»κ² λ μ§λ μ λͺ¨λ₯΄κ² μ§λ§, μΆ©λΆν μ¬μ©ν λ§νκ³ μ΄κΈ° generator
κ΄λ ¨λ λ¬Έλ²λ€λ§ μ μ΅νλ€λ©΄ κ·Έν μ¬μ©νλλ° μμ£Ό νΈλ¦¬ν middleware
μ΄λΌκ³ μκ°νλ€.
κ°μΈμ μΌλ‘λ 빨리 μ μ§λ³΄μμ typescript
μ§μμ λ°νν΄μ€¬μΌλ©΄ μ’κ² λ€λΌλ λ°λμ΄ μλ€ π
- https://redux-saga.js.org
- https://itnext.io/scalable-redux-architecture-for-react-projects-with-redux-saga-and-typescript-f6afe1dece9b