React에서 상태 관리를 할 때 기본적으로는 props
를 이용하여 상위 컴포넌트에서 하위 컴포넌트로 데이터를 전달한다. 컴포넌트의 depth가 깊지 않다면 props
를 이용해도 큰 불편함이나 어려움은 느끼지 않을 수 있다.
하지만 개발 스케일이 커진다면 필히 컴포넌트의 depth도 깊어지게 된다. 아래 사진을 한 번 보자.
최상위 컴포넌트에서 최하위 컴포넌트로 데이터를 전달하려면 2 -> 5 -> 8 -> 11 순서로 접근을 해야한다. 만약 여기서 depth가 더 깊어진다면? 아주 복잡하고 또한 유지 보수가 어려워지게 된다. 이렇게 데이터를 전달하기 위해서 중간 컴포넌트를 다수 거쳐야 하는 상황을 props drilling
이라고 하는데, 우린 이걸 방지하기 위해 상태 관리 라이브러리를 사용하게 된다.
이 불편함 속에서 등장한 것이 Redux
이다. Redux
는 상태 관리 라이브러리로 이 props
없이 상태값을 보다 편리하게 관리할 수 있게 된다.
위 사진을 보면 대충 예상이 갈 것이다. 간단하게 표현을 하자면, 저 사진에 보이는 store
라는 매체에 상태값을 저장해두고 상태를 업데이트하고 업데이트 된 상태를 전달 받을 수 있는 거다. 즉, 상태값이 컴포넌트에 종속이 되는 것이 아니라 상태 관리를 바깥에서 바깥에서 할 수 있게 된다.
먼저 Redux의 기본적인 흐름은 위와 같다.
여기서 언급된 키워드에 대해서 설명을 하자면,
Action
const increaseCounter = {
type: 'INCREASE_COUNTER',
};
const setUser = {
type: 'SET_USER',
data: { id: 1, name: 'John Kim' },
};
Reducer
const counterReducer = (state = 0, action) => {
switch (action.type) {
case 'INCREASE_COUNTER':
return state + 1;
default:
return state;
}
};
Store
: 컴포넌트 외부에 있는 상태 저장소이다. 현 state들과 Reducer, 그리고 몇 가지 내장 함수들이 포함되어 있다.
Dispatch
: Action을 발생시키는 함수이다. Dispatch로 호출을 하면 Action 객체가 생성이 되고, 그 후 Reducer가 호출이 된다. 그리고 Reducer에서 반환된 값으로 액션을 처리해서 새로운 상태가 만들어지는 것이다.
Subscribe
: Subscribe라는 개념도 있는데, 단어에서 보면 알 수 있듯이 말 그대로 Store를 구독을 하고 있다가 Dispatch가 이루어질 때마다 전달한 함수를 호출해준다.
지금까지 설명을 보면 알 수 있듯 과정이 꽤나 복잡하다. 그렇기에 Redux를 사용할 때 통용되는 규칙이 세 가지가 있다.
Store는 하나만 사용하기
: 하나의 어플리케이션에서는 하나의 Store만 사용하는 것을 권장한다. 상태가 예측 가능하며 디버깅이 용이해지고 데이터 흐름이 단순화된다는 장점이 있다.
상태는 읽기 전용
: Redux에서 상태는 불변해야 한다. 상태를 직접 수정하는 것이 아니라 기존 상태를 변경하지 않고 새로운 상태를 반환하는 방식으로 상태를 업데이트해야 한다. 이는 상태 변화를 추적하고 예측 가능한 방식으로 관리하는 데 도움이 된다.
Reducer는 순수 함수여야 한다
: Reducer는 현재 상태와 액션을 파라미터로 받아 새로운 상태를 반환하는 함수다. 이 함수는 동일한 파라미터를 입력할 시 항상 동일한 결과를 반환하는 순수 함수여야 한다. 이는 상태 변화를 예측 가능하게 만들어주고 디버깅이 용이하게 만들어준다.
이제 마지막으로 Redux의 장점과 단점에 대해 알아보자.
다만 위의 단점들을 해결하기 위해 Redux Toolkit
이라는 것이 나왔다. 상세하게 들어간다면 너무 길어지기 때문에 몇 가지만 가볍게 짚고 넘어가자면,
즉, Redux
의 복잡성을 낮추고 사용성을 높이기 위해 만들어진 것이 바로 Redux Toolkit
이다.
React 입문자들이 알아야할 Redux 쉽게설명 (8분컷)
이미 알 사람들이라면 전부 알겠지만 코딩 유튜버이신 코딩애플 님이시다. Redux
에 대해서 정말 쉽게 설명을 해주시는데 영상 길이가 길지도 않으니 꼭 한 번 쯤 봐보는 걸 추천한다.
벨로그에 올라온 Redux
정리글이다. 위 영상이 Redux
에 대해서 간단한 개념을 잡아준다면 이건 좀 더 상세한 내용을 짚어준다. 설명이 굉장히 잘 되어 있으니 위 벨로그 글을 읽어보는 것도 추천한다!