action-creators

1 개의 포스트

Redux-Doghouse: Creating reusable React-Redux components through scoping (새 탭에서 열림)

Redux-Doghouse는 단일 Redux 애플리케이션 내에서 동일한 컴포넌트를 여러 번 재사용할 때 발생하는 상태 충돌 문제를 해결하기 위해 개발된 라이브러리입니다. 각 컴포넌트 인스턴스에 고유한 '스코프(Scope)'를 부여함으로써 액션과 리듀서가 특정 인스턴스에만 독립적으로 작용하도록 격리합니다. 이를 통해 개발자는 기존의 Redux 로직을 대대적으로 수정하지 않고도 복잡한 UI 구성 요소를 모듈화하고 재사용할 수 있습니다. **재사용 가능한 컴포넌트와 Redux의 충돌** * Redux는 전역 상태 관리에는 탁월하지만, 동일한 로직을 가진 컴포넌트를 한 페이지에 여러 개 배치할 경우 문제가 발생합니다. * 특정 액션 타입(예: `MY_ACTION`)이 발행되면, 해당 타입을 구독하는 모든 리듀서가 동시에 반응하기 때문에 한 인스턴스의 버튼 클릭이 모든 인스턴스에 영향을 주게 됩니다. * 이를 해결하기 위해 기존 코드를 리팩토링하는 대신, 각 인스턴스를 독립된 영역(Doghouse)에 격리하는 방식이 필요해졌습니다. **스코프 기반의 액션과 리듀서 작동 방식** * Redux-Doghouse는 `actionCreators`와 `reducers`에 고유한 스코프(식별자)를 결합합니다. * 액션이 발행될 때 메타데이터로 스코프 정보를 포함하며, 래핑된 리듀서는 자신에게 할당된 스코프와 일치하는 액션만을 처리합니다. * 이 방식의 장점은 하위 컴포넌트가 자신이 거대한 애플리케이션의 일부라는 사실을 모른 채 독립적으로 작동할 수 있다는 점입니다. * 상위 레벨에서는 여전히 모든 인스턴스의 내부 상태에 접근하거나 특정 액션에 반응할 수 있어, 상호 연결된 Redux의 장점을 그대로 유지합니다. **데이터독(Datadog)의 실제 적용 사례: 쿼리 에디터** * 데이터독의 '익스프레션 에디터(Expression Editor)'는 여러 개의 '쿼리 에디터'를 포함하며, 각 쿼리는 A, B, C 등의 식별자를 가집니다. * 각 쿼리 에디터에서 발생하는 `SET_GROUP` 액션은 해당 쿼리 인스턴스에만 영향을 주어야 하지만, 동시에 상위 에디터는 모든 쿼리의 그룹 규칙이 일치하는지 검사해야 합니다. * Redux-Doghouse를 통해 각 쿼리 에디터는 부모의 존재를 모른 채 독립적으로 동작하고, 상위 에디터는 스코프가 부여된 액션을 통해 전체적인 비즈니스 로직을 조율합니다. **모듈화와 개발 생산성 측면의 이점** * UI 구성 요소(React)와 상태 로직(Redux)을 동일한 단위로 묶어 모듈화할 수 있어 코드 관리가 용이해집니다. * 뷰(View) 코드와 모델(Model) 코드가 서로 다른 방식으로 분리되는 혼란을 방지하고, 컴포넌트 중심으로 사고할 수 있게 돕습니다. * 기존에 독립적으로 작성된 Redux 컴포넌트를 더 큰 시스템에 통합할 때 코드 수정 기능을 최소화할 수 있습니다. 복잡한 대시보드나 도구 모음처럼 동일한 UI 패턴이 한 화면에 반복적으로 나타나면서도 각각 독립적인 상태를 유지해야 하는 프로젝트라면, Redux-Doghouse는 구조적인 일관성을 지키며 확장성을 확보할 수 있는 훌륭한 대안이 될 것입니다.