프론트엔드 상태 관리의 네 가지 난제

55 minutes ago 1
  • 프론트엔드 생태계에는 다양한 상태관리 도구들이 존재하지만 아직 제대로 조명받지 못하는 난제들이 있음
    1. 상태의 공유 범위를 바꾸기 어려움
      • 우리는 흔히 지역 상태와 전역 상태만을 이야기 해왔지만,
        사실 그 두가지 개념만으로는 깔끔하게 분류되지 않는 상태들이 있음
      • 이를 공유 상태라고 부르겠음
      • 공유 상태의 범위라는것은 애플리케이션을 작성하면서 점점 변화하는데,
        기존 상태관리 도구들에서는 이를 다룰 방법이 마땅히 없음
    2. 공유 상태의 수명을 표현하기 어려움
      • 위 문제를 해결하겠다고 지역상태를 단순히 전역상태로 바꿔버리면
        상태가 실제로 필요한 기간보다 훨씬 오래 살아버리게 되는 문제가 발생함
      • 지역상태일 때는 작성할 필요가 없었던 reset, clean 등의 로직들이 나타나게 됨
    3. 파생 상태를 효율적으로 공유하기 어려움
      • hook은 같은 파생 상태에 대한 계산을 재사용할 방법을 제공하지 않음
      • useMemo, useContext는 이 문제를 해결하려고 존재하는 도구가 아니기 때문에
        이걸로 덮으려고 하면 다른 문제를 발생시킴
      • 순수한 계산일 경우는 중복 계산의 비효율만 감수하면 되지만
        부수효과가 함께하는 경우에는 기존의 도구들로는 제대로 해결할 방법이 없음
    4. 상태를 기능 단위로 응집시키기 어려움
      • 하나의 기능을 구현하는데 필요한 코드는 하나의 파일 안에서 작성되는게 이상적일 것임
        • 파일을 나누더라도 그 파일들이 서로 가까이 있어야 할 것임
      • hook 추상화를 이용해 하나의 훅에서 하나의 기능을 다루는 것처럼 보이게 만들어도,
        실제 계산 모델에서는 여러곳에서 실행됐을 때 같은 인스턴스로 작동하지 않기 때문에
        부수효과가 필요한 곳에서는 그런 접근을 사용할 수 없음
      • useContext, useEffect 등은 같은 기능과 관련된 코드들을 서로 멀리 떨어진 파일로 흩뿌림
  • 이 문제들은 사실 별개의 문제가 아니고 서로 긴밀하게 연결돼있는 하나의 문제이며 다음과 같이 표현할 수 있음
    • 공유 범위가 바뀌면 표현 방법이 바뀌고, 공유 상태에는 자연스러운 수명이 없으며, 파생 상태의 유일성을 보장하기 어렵고, 그 결과 상태를 기능 단위로 응집시키기도 어렵다.
  • 곧 작성하게 될 글에서 이 문제를 제대로 해결하는 방법을 다루려고 함
Read Entire Article