프론트엔드 개발에서 상태 관리(state management)는 오랫동안 골치 아픈 문제였습니다. 특히 상태의 공유 범위 변경의 어려움, 공유 상태의 수명 관리, 파생 상태(derived state)의 효율적인 공유, 그리고 상태를 기능 단위로 응집시키기 어려운 네 가지 난제가 개발자들을 괴롭혀왔습니다. 이는 주로 코드를 컴포넌트 트리의 어디에 위치시키느냐에 따라 상태를 작성하는 방식 때문에 발생합니다.
새로운 라이브러리 Bunja는 이러한 문제에 대한 해법을 제시합니다. Bunja는 다른 상태 관리 라이브러리와 달리, 상태 인스턴스와 그 인스턴스의 수명을 관리하는 데 초점을 맞춥니다. 예를 들어, Bunja는 공유 범위와 무관하게 `useBunja`라는 통일된 방법으로 상태 인스턴스를 사용할 수 있게 하여 공유 범위 변경의 어려움을 해소합니다. 또한, Bunja 인스턴스는 실제 사용처가 존재하는 동안 유지되고 마지막 사용처가 사라지면 함께 정리되어 자연스러운 수명 관리가 가능합니다. 파생 상태의 경우, Bunja 인스턴스 안에 존재하는 하나의 상태 노드로 만들어 여러 컴포넌트가 같은 파생 상태를 공유할 수 있도록 하며, Bunja 자체가 하나의 기능 인스턴스가 될 수 있어 상태를 기능 단위로 응집시키는 문제도 해결합니다.
Bunja가 제안하는 멘탈 모델은 상태가 어느 컴포넌트에 위치하는지를 관리하는 대신, 상태 인스턴스의 고유성, 의존성, 그리고 수명을 관리하는 것입니다. 이는 React가 UI의 존재 여부를, Bunja가 기능 인스턴스의 활성 여부를, 그리고 Jotai 같은 도구가 인스턴스 안의 값 변화를 담당하도록 책임을 분리함으로써 프론트엔드 상태 관리의 복잡성을 깔끔하게 해결할 수 있습니다. 이처럼 새로운 관점으로 상태 관리에 접근함으로써 개발자들은 더 효율적이고 유지보수하기 쉬운 애플리케이션을 구축할 수 있게 될 것입니다.