상태관리 라이브러리

권세원·2023년 5월 27일
0

상태관리 라이브러리

리덕스 공부하면서 상태관리 라이브러리에 대해서도 정리하게 되었다.
상태관리 라이브러리에 대해 알아보자


What - 상태관리 라이브러리란 무엇인가

이름 그대로 상태를 관리하는, 즉 state 관리를 목적으로 하는 라이브러리이다.


Why - 상태관리 라이브러리란 왜 필요한가

프로젝트의 규모가 커질수록 관리해야하는 state가 많아지게 된다.
이를 체계적이고 효율적으로 관리하기위해 고안된게 상태관리 라이브러리이다.

더욱 근본적인 이유!

그렇다면 우리는 어째서 state를 관리해야 하는가?

먼저 우리가 리액트 스타일의 웹 개발에 대해 생각해보자

  • 우리는 화면을 구성하기 위해 html파일에 컴포넌트들을 넣어 사용한다.
  • 그 컴포넌트들은 props 형태를 통해 서로 상태를 공유한다.

여기서 잠깐!
이러한 props 전달 방식의 특성이자 단점이 바로 우리가 상태관리와 상태관리 라이브러리를 사용해야하는 이유이다.

props 는 단방향 데이터 전달방식이다.

즉, 부모 -> 자식 컴포넌트로만 상태를 전달할 수 있다.
여기서 발생하는 문제점들이

  • 자식 컴포넌트에서는 상태 변경이 불가능하다.(setState를 통해 접근이 가능하지만 비효율적)
  • 자식 컴포넌트간에는 상태 공유가 불가능하다.(부모 컴포넌트를 통해서만 접근 가능)
  • 컴포넌트 계층이 많아지면 props 하나를 전달하는데에 거쳐야할 컴포넌트가 많아진다.
    즉, 중간단계의 컴포넌트들은 사용하지도 않는 props를 들고 있어야 한다.
    => props drilling 발생

이며,
이러한 문제점들은 프로젝트의 규모가 커질수록 심각해지고 이것이 우리가 상태관리 라이브러리를 사용해야 하는 핵심적인 이유이다.


Which - 상태관리 라이브러리의 종류

  • Redux
  • Recoil
  • MobX
  • React Context API

각각의 특성

Redux

장점

  • 과정이 로그로 남아 디버깅하기 좋다.
  • 전역 상태관리에 용이하다.
  • Js 기반의 많은 환경에서 사용이 가능하다.
  • 오래되고 사용도가 높아 참고자료가 많다.(꽤나 중요)
  • 사전에 정의된 동작만 이행한다.(예측 가능, 디버깅 용이)
  • 다양한 미들웨어(리덕스의 꽃)
  • 최적화

단점

  • 코드량이 상당해진다.
  • 코드가 복잡하다.(처음 접해보면 이게 뭔가 싶다)
  • 초기 세팅 과정이 길다.
  • 불변성 유지를 위해 매번 새로운 상태 객체를 만들 반환해주어야 한다.(장점이기도 함)
  • 보일러 플레이트 코드가 많다.

공부해야 할게 너무 많다...

Recoil

장점

  • 비동기 처리가 쉽다.
  • 만만하다.(상당히 쉽다. 볼것도 없다.)
  • 가볍다.
  • React 전용이라 친근하다.(문법이 거기서 거기)

단점

  • 전역 상태 관리(쉬운 전역상태 관리는 리코일의 장점이지만 단점이기도 하다)
  • 상태 변경 예측이 힘들다(프로젝트가 커질수록 상태 변경을 예측하기 힘들어진다)

MobX

장점

  • 간단하다(리덕스에 비해)
  • 객체 지향적이다.
  • 불변성을 고려하지 않아도 된다.

단점

  • 레퍼런스가 없다.(참조할 자료가 그리 많지 않다.)
  • 버전과 브라우저에 따른 차이가 크다.
  • 안정성이 그리 높진 않다.
    (리덕스와 달리 액션 단에서 바로 상태를 변경한다. 이는 추후에 유지보수 및 디버깅에서 문제가 생길 수도 있다.

Context API

상태관리 라이브러리라고 할 수 있는지는 모르겠다.

이 표현에는 두가지 이유가 있다.

  • Context API 자체는 라이브러리가 아니다. 그저 React 라이브러리에 포함되어 있을 뿐
  • 성능이 미쳤다. 전역 상태 관리로서는 적절치 못하다.

장점

  • 사용이 쉽다(?) react 라이브러리에서 그냥 import 만 하면 된다.

단점

  • 성능이 미쳤다.(상태값 하나만 변경해도 provider로 감싼 모든 자식 컴포넌트들이 리렌더링 된다.)
  • 이러면 props drilling 을 회피하여 얻는 장점보다 잃는게 더 많다.

물웅덩이 피하려다가 똥 밟는꼴

결론

리덕스는 든든하고,
리코일은 친근하다.

MobX와 Context API는 써보질 않아서 확실한 결론은 못내겠다.

profile
rnsjtpdnjs

0개의 댓글