클라이언트 상태 관리 라이브러리에 대한 선택 #5
Replies: 6 comments 1 reply
-
|
제 블로그 글을 다시 확인해보니, Ducks 패턴이란?Redux의 보일러플레이트 문제를 해결하기 위해 등장한 Ducks 패턴은, 액션 타입, 액션 생성자, 리듀서를 별도의 파일이나 폴더에 분리하지 않고 하나의 모듈처럼 한 파일 내에 통합하여 작성하는 디자인 패턴입니다. Ducks 패턴 등장 배경기존의 Redux 방식은 액션 타입, 액션 생성자, 리듀서 등 관련 코드를 각각의 파일로 분리해 작성해야 했습니다. 이로 인해 프로젝트의 구조가 복잡해지고, 유지보수 및 관리 측면에서 어려움이 있었습니다. 이러한 문제를 해결하기 위해, 모든 Redux 관련 코드를 하나의 모듈로 관리하는 Ducks 패턴이 제안되었습니다. Ducks 패턴의 기본 규칙Ducks 패턴을 올바르게 적용하기 위해서는 다음의 규칙을 따라야 합니다.
코드 예시아래는 Ducks 패턴을 적용한 코드 예시입니다. // 액션 타입 (Action Types)
const SET_COUNT = 'my-app/counter/SET_COUNT';
const INCREASE_COUNT = 'my-app/counter/INCREASE_COUNT';
const DECREASE_COUNT = 'my-app/counter/DECREASE_COUNT';
// 리듀서 (Reducer)
export default function reducer(state = 0, action = {}) {
switch (action.type) {
case SET_COUNT:
return action.count;
case INCREASE_COUNT:
return state + 1;
case DECREASE_COUNT:
return state - 1;
default:
return state;
}
}
// 액션 생성자 (Action Creators)
export function setCount(count) {
return { type: SET_COUNT, count };
}
export function increaseCounter() {
return { type: INCREASE_COUNT };
}
export function decreaseCounter() {
return { type: DECREASE_COUNT };
}
// Side Effects (예: redux-thunk 미들웨어 사용)
export function getCount() {
return dispatch => get('/count').then(count => dispatch(setCount(count)));
}Ducks 패턴의 장점코드 통합성: 관련된 Redux 로직을 하나의 파일로 모아두어, 파일 간 분산으로 인한 복잡함을 줄일 수 있습니다. 구조 단순화: 별도의 액션, 리듀서 파일을 유지할 필요가 없어 프로젝트 구조가 단순해집니다. 유지보수 용이: 모든 관련 코드가 한 곳에 있어 수정 및 확장이 쉬워집니다. 이와 같이 Ducks 패턴을 적용하면 Redux 관련 보일러플레이트를 크게 줄일 수 있으며, 프로젝트 관리 및 유지보수 측면에서 많은 이점을 얻을 수 있습니다. |
Beta Was this translation helpful? Give feedback.
-
|
저희가 어떤 부분을 상태 관리로 가져가면 좋을 지 숙지하신 후에 조사하시면 더 편하실 것 같아 답글 남깁니다~!
현재 저희 프로젝트 기획이 확정나지 않아 예시인 점 양해 부탁드립니다! |
Beta Was this translation helpful? Give feedback.
-
|
제가 담당한 mobX에 대해 코멘트를 남기겠습니다.
아래는 좀 더 자세한 설명입니다. mobX는 Redux와 달리 보일러플레이트 코드가 적고 counter store를 예시로 들어보겠습니다. @observable은 상태를 나타내고, 물론 class 대신 아래와 같이 객체와 함수를 사용해서 상태를 만들 수도 있습니다. MobX에서 제공하는 makeAutoObservable을 사용하여 this를 자동으로 바인딩해 줄 수 있지만, 이는 객체 리터럴 방식으로 함수형 패러다임과는 여전히 거리가 있습니다. 또한 mobX를 React 컴포넌트에서 사용하려면 observer는 함수형 컴포넌트를 감싸서 MobX 상태 변화를 추적하고 리렌더링을 트리거합니다. 따라서 우리 프로젝트에는 함수형 패러다임에 더 적합한 Zustand와 같은 상태 관리 라이브러리를 사용하는 것이 코드 일관성과 개발 효율성 측면에서 더 나은 선택이라고 판단됩니다. [참고자료]https://techblog.woowahan.com/2599/ |
Beta Was this translation helpful? Give feedback.
-
|
장점: 상태를 세밀하게 분리하고, 읽기와 쓰기 권한을 세분화할 수 있습니다. 단점: 상태가 많아지면, 상태 간 의존 관계를 관리하기가 복잡해질 수 있습니다. 상태를 독립적으로 분리하는 만큼, 여러 Atom이 상호작용해야 할 때 상태 로직을 다시 구성해야 할 수 있습니다. --> 장점과 단점은 말로만 들으면 헷갈리실 것 같아 정리해놓은 Notion 주소 함께 보내드립니다! 물론 Jotai에서도 여러 개의 상태를 하나로 묶어 관리를 할 수 있지만 독립적인 상태를 관리한다는 이점을 포기한다면 굳이 Jotai를 사용해야 하나? 라는 의문점이 듭니다. |
Beta Was this translation helpful? Give feedback.
-
|
기획을 조금 더 구체화 해봐야 알 것 같지만, ✚ 현재 서버 상태 관리 라이브러리는 React Query를 사용하기로 했습니다. 그런데 Redux로 가게 된다면 RTK Query도 존재하기 때문에, RTK Query에 대해 생각해봐야된다는 점도 있습니다. 하하 Redux에 대해 조사한 내용입니다. Redux 언제 쓰면 좋을까?
Redux의 핵심 원칙
장점
단점
|
Beta Was this translation helpful? Give feedback.
-
|
저희는 결과적으로
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
저희 프로젝트에서 클라이언트의 상태 관리를 위한 라이브러리를
Zustand로 진행하고자 얘기를 했었지만현재 해당 라이브러리의 특징과 기획에 대한 적합성 측면을 고려하지 않아서 반려된 사실이 있습니다!
그렇기 때문에 여러 상태 관리 라이브러리를 찾아보고 그 내용들을 정리하면서 문서로 남기면 좋을 것 같아서 해당 discussion을 열었습니다!
상태 관리 분석글
Zquery 라이브러리
위에 두 가지 참고자료가 제가 진행했었던 상태 관리 라이브러리에서 사용됐던 내용들입니다! (진짜 참고만 하세용...)
블로그 글에
Zotai나Valtio에 대한 글들도 있으니 확인하시고 의견 공유해 주세요!!Beta Was this translation helpful? Give feedback.
All reactions