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λ€μ΄μ€λ λͺ¨λactionrequestμ λν΄taskλ₯Ό μ€ννλ€ (requestμ μ΄λ―Έ μ΄μ taskκ° μ€νμ€μ΄λΌλ©΄ μ΄μ taskλ μλμΌλ‘ μ·¨μλλ€)forkλ°±κ·ΈλΌμ΄λμμtaskλ₯Ό μ€ννλ€cancelforkλtaskλ₯Ό μ·¨μμν¨λ€allgeneratorν¨μλ₯Ό λ°°μ΄ ννλ‘ λ£μ΄μ£Όλ©΄ λ³λ ¬μ μΌλ‘ ν΄λΉ ν¨μλ€μ΄ λμ μ€νλκ³ μ λΆ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