동기: 왜 Redux인가
동기: 왜 Redux인가 (Motivation)
자바스크립트 단일 페이지 애플리케이션의 요구사항이 점점 복잡해지면서, 코드가 관리해야 하는 상태가 그 어느 때보다 많아졌어요. 이 상태에는 서버 응답과 캐시된 데이터, 아직 서버에 저장되지 않은 로컬 생성 데이터가 포함돼요. UI 상태도 활성 라우트, 선택된 탭, 로딩 스피너, 페이징 컨트롤 등을 관리해야 해서 복잡도가 커지고 있어요.
언제, 왜, 어떻게 바뀌는지 통제가 사라진다
이렇게 끊임없이 변하는 상태를 관리하는 일은 어려워요. 모델 하나가 다른 모델을 업데이트하고, 뷰가 모델을 업데이트하고, 그 모델이 또 다른 모델을, 그리고 그것이 다시 다른 뷰를 업데이트할 수 있어요. 어느 순간 앱에서 무슨 일이 벌어지는지 더 이상 이해할 수 없게 되고, 상태의 언제(when)·왜(why)·어떻게(how)에 대한 통제를 잃게 돼요. 시스템이 불투명하고 비결정적이면 버그를 재현하거나 새 기능을 추가하기가 어려워져요.
프런트엔드 개발의 새로운 요구
여기에 더해 프런트엔드 제품 개발에서는 낙관적 업데이트, 서버사이드 렌더링, 라우트 전환 전 데이터 페칭 같은 새로운 요구가 보편화됐어요. 이전에는 감당할 필요가 없던 복잡성을 관리하게 된 거죠. 주어진 시간에 능숙하게 처리해야 하는 일이 부쩍 늘어났어요.
이런 복잡성은 인간의 머리로 추론하기 어려운 두 가지 개념을 섞고 있기 때문에 더 다루기 힘들어요. 즉 상태의 변화와 비동기 흐름이 서로 뒤엉키면서, 예측 가능한 방식으로 관리하기가 어려워지죠. Redux는 이런 상태 변화를 하나의 예측 가능한 흐름으로 통제하는 데 초점을 맞춘 라이브러리예요.