프론트엔드 개발 생태계는 리액트(React) 훅(Hook)과 같은 다양한 상태 관리 도구들로 풍성해졌지만, 여전히 개발자들을 괴롭히는 근본적인 난제들이 존재합니다. 흔히 지역 상태(local state)와 전역 상태(global state)로만 구분하던 방식으로는 설명되지 않는 '공유 상태(shared state)'의 복잡성이 핵심이며, 이로 인해 상태의 공유 범위 변경, 수명 관리, 파생 상태(derived state) 공유, 그리고 기능 단위 응집이라는 네 가지 주요 문제가 발생하고 있습니다.
첫째, 상태의 공유 범위를 유연하게 바꾸기 어렵습니다. 애플리케이션 개발 과정에서 상태의 공유 범위는 계속 변하지만, 기존 도구들은 이를 효과적으로 다루지 못해 불필요하게 전역 상태로 전환하거나 복잡한 로직을 추가하게 만듭니다. 둘째, 공유 상태의 수명(lifecycle)을 명확히 표현하기 어렵습니다. 지역 상태를 전역 상태로 바꾸면 필요 이상으로 오래 살아남아 '리셋(reset)'이나 '클린(clean)' 같은 추가 로직이 생겨 코드 복잡성을 높입니다. 셋째, 파생 상태를 효율적으로 공유하기 어렵습니다. 훅(Hook)은 파생 상태 계산을 재사용하는 데 한계가 있으며, `useMemo`나 `useContext` 같은 도구들은 이 문제를 직접적으로 해결하기보다 다른 문제를 야기할 수 있습니다. 마지막으로, 상태를 기능 단위로 응집시키기 어렵습니다. 하나의 기능을 구현하는 코드는 한곳에 모여 있는 것이 이상적이지만, `useContext`나 `useEffect` 같은 훅들은 관련 코드를 여러 파일에 분산시켜 코드의 응집성을 떨어뜨리고 유지보수를 어렵게 만듭니다.
이러한 문제들은 개별적인 것이 아니라 서로 긴밀하게 연결되어 있으며, 결국 프론트엔드 애플리케이션의 복잡성을 가중시키고 개발 생산성을 저해하는 주요 원인이 됩니다. 상태의 공유 범위가 바뀌면 표현 방식이 달라지고, 자연스러운 수명이 없어지며, 파생 상태의 유일성을 보장하기 어려워지는 악순환이 반복되는 것입니다. 이는 단순히 특정 도구의 문제가 아니라, 프론트엔드 상태 관리 패러다임 자체에 대한 깊이 있는 고민과 새로운 접근 방식이 필요하다는 신호로 해석될 수 있습니다. 앞으로 이러한 난제들을 해결할 새로운 방법론이나 프레임워크의 등장이 기대됩니다.