동기: 왜 Redux인가

동기: 왜 Redux인가 (Motivation)

자바스크립트 단일 페이지 애플리케이션의 요구사항이 점점 복잡해지면서, 코드가 관리해야 하는 상태가 그 어느 때보다 많아졌어요. 이 상태에는 서버 응답과 캐시된 데이터, 아직 서버에 저장되지 않은 로컬 생성 데이터가 포함돼요. UI 상태도 활성 라우트, 선택된 탭, 로딩 스피너, 페이징 컨트롤 등을 관리해야 해서 복잡도가 커지고 있어요.

출처: Redux — Motivation

언제, 왜, 어떻게 바뀌는지 통제가 사라진다

이렇게 끊임없이 변하는 상태를 관리하는 일은 어려워요. 모델 하나가 다른 모델을 업데이트하고, 뷰가 모델을 업데이트하고, 그 모델이 또 다른 모델을, 그리고 그것이 다시 다른 뷰를 업데이트할 수 있어요. 어느 순간 앱에서 무슨 일이 벌어지는지 더 이상 이해할 수 없게 되고, 상태의 언제(when)·왜(why)·어떻게(how)에 대한 통제를 잃게 돼요. 시스템이 불투명하고 비결정적이면 버그를 재현하거나 새 기능을 추가하기가 어려워져요.

프런트엔드 개발의 새로운 요구

여기에 더해 프런트엔드 제품 개발에서는 낙관적 업데이트, 서버사이드 렌더링, 라우트 전환 전 데이터 페칭 같은 새로운 요구가 보편화됐어요. 이전에는 감당할 필요가 없던 복잡성을 관리하게 된 거죠. 주어진 시간에 능숙하게 처리해야 하는 일이 부쩍 늘어났어요.

이런 복잡성은 인간의 머리로 추론하기 어려운 두 가지 개념을 섞고 있기 때문에 더 다루기 힘들어요. 즉 상태의 변화와 비동기 흐름이 서로 뒤엉키면서, 예측 가능한 방식으로 관리하기가 어려워지죠. Redux는 이런 상태 변화를 하나의 예측 가능한 흐름으로 통제하는 데 초점을 맞춘 라이브러리예요.

더 알아보기