“Redux-Saga”와 “Redux-Thunk” 사용의 장단점

Redux-Saga와 ES6 제너레이터 vs Redux-Thunk와 ES2017 async/await의 장단점 Redux-Saga와 Redux-Thunk 비교 소개 Redux에서 비동기 작업을 처리하기 위해 두 가지 인기 있는 미들웨어 라이브러리가 주목받고 있습니다: Redux-Saga와 Redux-Thunk. 둘 다 부작용 관리를 간소화하기 위해 설계되었지만, 다른 …

title_thumbnail(Redux-Saga와 ES6 제너레이터 vs Redux-Thunk와 ES2017 async/await의 장단점

Redux-Saga와 Redux-Thunk 비교

소개

Redux에서 비동기 작업을 처리하기 위해 두 가지 인기 있는 미들웨어 라이브러리가 주목받고 있습니다: Redux-Saga와 Redux-Thunk. 둘 다 부작용 관리를 간소화하기 위해 설계되었지만, 다른 접근 방식을 사용합니다. 이 글에서는 Redux-Saga와 ES6 제너레이터를 사용한 방법과 Redux-Thunk와 ES2017 async/await를 사용한 방법의 장단점을 탐색해보겠습니다.

Redux-Thunk: Async/Await으로 부작용 처리

Redux-Thunk는 일반적인 액션 외에도 “thunk”라고 불리는 특수한 함수를 디스패치할 수 있게 해줍니다. thunk는 dispatch와 getState 함수를 인수로 받을 수 있으며, 비동기 논리를 포함할 수 있습니다. ES2017에서 도입된 async/await의 등장으로 Redux-Thunk에서 비동기 작업을 다루는 것이 더욱 간편해졌습니다.

Redux-Thunk 사용 장점

  • 단순성: Redux-Thunk는 직관적인 구조를 따르므로 이해하고 구현하기 쉽습니다.
  • 통합성: 기존의 Redux 코드베이스와 원활하게 작동하며, 전체적인 아키텍처에 대한 최소한의 변화를 요구합니다.
  • 테스트 용이성: Thunk는 단순한 동등성 검사로 테스트할 수 있으며, 복잡한 모의 객체 또는 추가적인 설정이 필요하지 않습니다.

Redux-Thunk 사용 단점

  • 콜백 헬: 중첩된 thunk는 콜백 헬을 유발하여 코드를 읽고 유지하기 어렵게 만들 수 있습니다.
  • 분산된 로직: 비동기 로직이 서로 다른 액션 생성자에 흩어져 있어 추적과 관리가 어려워질 수 있습니다.
  • 제어 흐름 제한: Thunk는 액션 생성자가 새로운 액션을 푸시하는 것에 의존하여 액션의 순서와 타이밍에 제한이 있습니다.

Redux-Saga: 제너레이터의 강력함 활용

반면 Redux-Saga는 제너레이터 함수를 사용하여 부작용을 처리합니다. 제너레이터는 비동기 작업을 처리하는 더 구조적인 방법을 제공하며, 액션의 흐름을 더욱 세밀하게 제어할 수 있게 해줍니다. 이는 복잡한 제어 흐름이나 병렬 처리가 필요한 시나리오에서 특히 유용합니다.

Redux-Saga 사용 장점

  • 향상된 테스트 가능성: 사가는 순수 함수이므로 모의 객체나 복잡한 설정 없이 독립적으로 테스트하기 쉽습니다.
  • 구조화된 로직: Redux-Saga는 부작용을 처리하는 중앙 집중화된 장소를 제공하여 코드를 이해하고 유지하기 쉽게 만듭니다.
  • 동시성과 제어: 사가는 경쟁 조건, 병렬 요청, 액션 디스패칭의 정확한 제어와 같이 고급 기능을 제공합니다.

Redux-Saga 사용 단점

  • 학습 곡선: 제너레이터 함수와 사가 개념을 이해하고 익숙해지기 위해서는 초기 학습에 약간의 투자가 필요할 수 있습니다.
  • 복잡성 증가: Redux-Saga는 코드베이스에 추가적인 복잡성을 도입하며, 리듀서와 액션과 함께 사가를 관리하고 유지해야 합니다.
  • 라이브러리 성숙도: Redux-Saga는 강력한 라이브러리이지만, Redux-Thunk와 비교해 덜 업데이트되어 외부 호환성 및 역호환성 지원에 대한 우려가 증가하였습니다.

결론

Redux-Saga와 Redux-Thunk 사이의 선택은 프로젝트 규모, 복잡성 및 개인적인 선호도를 포함한 여러 요소에 따라 다릅니다. 작은 프로젝트이거나 단순성이 선호되는 경우에는 Redux-Thunk와 async/await가 더 나은 선택일 수 있습니다. 그러나 복잡한 비동기 흐름에 대한 세밀한 제어가 필요한 대규모 프로젝트의 경우에는 Redux-Saga의 구조화된 테스트 가능성이 큰 이점을 제공할 수 있습니다.

최종적으로는 프로젝트의 특정 요구 사항을 평가하고 트레이드 오프를 고려하여 필요에 가장 적합한 미들웨어를 선택하는 것이 중요합니다.

참고 자료 : 

reactjs

Leave a Comment