React에서 상태 관리 라이브러리란?
정의: 애플리케이션의 여러 컴포넌트들이 공유하는 데이터를 저장하고 관리할 수 있도록 도와주는 도구.
쉽게 말해, 애플리케이션 전반에서 공유해야 하는 중요한 정보를 한 곳에 모아놓고, 각 컴포넌트가 이 정보를 편리하게 불러오고 수정할 수 있도록 하는 일종의 "중앙 창고" 같은 역할을 한다.
상태 관리 라이브러리를 사용하는 이유
- 복잡한 컴포넌트 구조에서의 상태 전달 문제 해결 (props drilling)
React는 컴포넌트 트리 구조로 이루어져 있어, 자식 컴포넌트에 데이터를 전달하려면 props를 통해 상위에서 하위로 상태를 내려주어야 한다. 하지만 트리가 깊어질수록 props를 계속해서 전달해야 하므로 코드가 복잡해지고 관리하기 어려워지는 문제점이 있다. 이 문제를 상태 관리 라이브러리가 해결해 주는데, 전역 상태를 한 곳에서 관리하고 필요한 컴포넌트들이 쉽게 접근할 수 있도록 해준다.
- 상태 관리의 일관성 및 재사용성
- 전역 상태를 사용할 경우, 애플리케이션 전체에서 동일한 상태에 접근할 수 있어 컴포넌트 간 상태 일관성이 유지된다다. 또한 상태 관리 라이브러리를 사용하면, 특정 상태 로직을 여러 컴포넌트에서 재사용할 수 있어 개발 효율성이 높아진다.
- 상태 변화에 따른 효율적인 렌더링 관리
- React의 주요 목표 중 하나는 필요한 경우에만 UI를 렌더링하여 성능을 최적화하는 것이다. 상태 관리 라이브러리는 특정 상태가 변할 때만 필요한 컴포넌트가 리렌더링되도록 돕기 때문에, 불필요한 리렌더링을 줄이고 성능을 높일 수 있다.
- 확장성과 유지 보수 용이성
- 작은 애플리케이션에서는 상태 관리가 비교적 간단하지만, 애플리케이션이 커질수록 상태 관리를 체계적으로 하지 않으면 코드가 복잡해지고 유지 보수하기 어려워진다. Redux, MobX, Recoil, Zustand 등의 상태 관리 라이브러리를 사용하면, 애플리케이션이 확장되더라도 상태 관리가 체계적이고 명확해지기 때문에 유지 보수가 훨씬 용이하다.
- 서버 상태 및 비동기 데이터 관리
- 상태 관리 라이브러리는 단순한 로컬 상태뿐만 아니라 서버로부터 받아오는 비동기 데이터도 효과적으로 관리할 수 있다. 예를 들어, Redux Toolkit이나 React Query 같은 라이브러리는 서버 상태 관리에 최적화된 기능을 제공해 API 호출과 캐싱, 데이터 동기화 등을 손쉽게 처리할 수 있도록 도와준다.
상태 관리 라이브러리 단점은 없을까?
1. 컴포넌트가 너무 큰 권한을 가지게 되어 버그가 발생하기 쉽다
전역 상태를 이용하면 모든 컴포넌트가 모든 전역 상태에 접근할 수 있게 된다. 라이브러리와 무관하게, 항상 그럴 수밖에 없다. 당장 접근하려면 추가적인 import 문 등이 필요하더라도, 파일 자체에는 모든 전역 상태에 접근하는 권한이 있다.
이 때문에 누군가의 실수로 다른 컴포넌트에 영향이 생길 수 있고, 이로 인해 의도치 않은 버그가 발생할 수 있다.
2. 복잡성 증가
상태 관리 라이브러리를 도입하면 기본적으로 추가적인 설정과 코드 구조가 필요하다. 예를 들어, Redux를 사용할 경우 스토어와 리듀서, 액션 등의 개념을 따로 정의해야 하고. 이로 인해 처음 React만 사용했던 것보다 구조가 복잡해지고, 학습 비용도 증가한다. 특히 애플리케이션 규모가 크지 않은 경우, 오히려 상태 관리 라이브러리가 불필요하게 복잡함을 추가할 수 있다.
3. 오버헤드 발생
상태 관리 라이브러리를 도입하는 것은 일종의 추가 코드와 라이브러리 로딩 부담을 의미한다다. 예를 들어, 작은 규모의 애플리케이션에서는 전역 상태 관리가 필요 없을 수 있는데, 이 경우 단순한 상태 관리를 위해 불필요한 코드와 라이브러리가 추가되어 성능에 악영향을 줄 수 있다.
4. 리렌더링 이슈
상태 관리 라이브러리는 상태 변화 시 이를 반영하기 위해 리렌더링을 유발한다다. 상태를 전역으로 관리하면 특정 데이터가 업데이트될 때 해당 상태를 사용하는 모든 컴포넌트가 리렌더링될 가능성이 있어, 불필요한 리렌더링이 발생할 수 있다.
5. 의존성 증가 및 유지 보수 부담
상태 관리 라이브러리에 의존하면 라이브러리 업데이트에 따라 코드가 영향을 받을 수 있다. 특히 라이브러리의 주요 업데이트가 있을 경우, 코드 호환성 문제나 새로운 버전 학습이 필요해질 수 있다. 또한, 라이브러리가 중단되거나 새로운 대안이 등장하면 이를 교체하는 작업이 필요할 수도 있다.
상태관리 라이브러리를 변경하지 않으면 된다고 생각할 수 있지만, 생각보다 개발자들은 유행에 민감하고 항상 더 좋은 도구를 원한다.
결론
- 상태 관리 라이브러리는 전역 상태를 효율적으로 관리하고, 컴포넌트 간의 데이터 전달을 간소화하는 데 큰 도움을 준다다.
- 장점: 복잡한 컴포넌트 구조에서 props drilling 문제를 해결하고, 상태 일관성 및 재사용성을 높여주며, 서버 상태와 비동기 데이터 관리도 수월하게 해준다.
- 단점: 복잡성 증가와 성능 오버헤드, 리렌더링 이슈 등 단점도 있어 애플리케이션의 규모와 요구 사항을 고려하여 신중하게 선택해야 한다.
- 작은 프로젝트에는 오히려 불필요하게 복잡함을 추가할 수 있다.
- 복잡하고 대규모 애플리케이션에서는 체계적인 상태 관리가 유지 보수와 성능 최적화에 매우 중요하기 때문에 상태 관리 라이브러리를 활용하는 것이 바람직하다.
참고
'박치기 공룡' 카테고리의 다른 글
CSR, SSR, SSG 뭐가 다르냐~~? (0) | 2025.04.22 |
---|---|
RDBMS의 한계와 NoSQL을 사용하는 이유 (0) | 2025.04.22 |
OAuth 2.0 카카오 로그인 구현하기 (Express) (0) | 2025.02.01 |
k8s에서 데이터 영속성을 보장하는 방법 (0) | 2025.01.23 |