Immer, MobX와의 비교: Valtio의 독자성은?
제16화
발행일: 2025년 06월 02일
Valtio가 특정 시나리오에서 강력한 힘을 발휘한다는 사실이 알려지자, 커뮤니티의 시선은 자연스럽게 또 다른 지점으로 옮겨갔다. 바로 기존에 존재하던, '직접 변경' 스타일을 지원하는 다른 강자들과의 비교였다. 마치 신흥 강호가 등장하자, 오랫동안 자리를 지켜온 고수들과의 비교를 통해 그 실력을 가늠하려는 움직임과 같았다.
가장 먼저 소환된 이름은 Immer였다. 이미 Redux Toolkit이나 Zustand 등 많은 라이브러리에서 불변성 업데이트의 번거로움을 해결하기 위해 널리 사용되고 있는 실용적인 도구였다.
"잠깐, Valtio에서 state.items.push(...)
쓰는 거, Immer의 produce
안에서 draft.items.push(...)
쓰는 거랑 뭐가 다른 거죠?"
"결국 둘 다 '겉으로는 직접 변경하는 것처럼' 보이게 해주는 거 아닌가요? Immer 쓰면 되는 거 아니에요?"
날카로운 질문들이었다. Immer 역시 Proxy 혹은 ES5 폴백을 사용하여 개발자가 '가짜' 가변 객체인 draft를 직접 수정하면, 내부적으로 변경 사항을 추적하여 최종적으로 새로운 불변 객체를 생성해주는 영리한 라이브러리였다. Valtio의 경험과 언뜻 비슷해 보일 수 있었다.
다음 타자는 상태 관리계의 오랜 강자, MobX였다. MobX 역시 '관찰 가능한(Observable)' 상태를 만들고, 그 상태의 변경이 감지되면 자동으로 파생된 값(Computed values)이나 부수 효과(Reactions, 예: React 컴포넌트 리렌더링)를 실행하는 반응형 시스템의 대가였다. 특히 MobX 5 버전 이후로는 Proxy를 적극적으로 활용하여 더욱 투명한 반응성을 구현하고 있었다.
"Valtio의 proxy()
로 감싸는 거, MobX의 observable()
이랑 비슷한 거 아닌가요?"
"상태 변경하면 알아서 반응하는 거, MobX가 원조격인데, Valtio만의 차별점이 뭔가요?"
"MobX는 액션(Action), 컴퓨티드(Computed) 같은 개념도 있고 더 기능이 풍부한 것 같은데요?"
이러한 비교들은 Valtio의 정체성에 대한 본질적인 질문을 던졌다. 이미 존재하는 강력한 도구들과 비교했을 때, Valtio가 설 자리는 어디인가? 다이시 카토는 이 질문들에 답해야 했다. 그는 다시 한번 키보드 앞에 앉아, Valtio만의 독자성을 명확히 설명하기 시작했다.
"Valtio는 Immer나 MobX와 영감을 주고받았을지언정, 추구하는 철학과 설계에서 명백한 차이가 있습니다."
그의 설명은 명료했다.
-
Immer와의 차이: '보일러플레이트 제로'를 향한 집념
"Immer는 훌륭한 도구입니다. 하지만 여전히 개발자는 상태 업데이트 로직을produce
함수로 감싸야 합니다. Immer는 불변성 업데이트 '작성'의 편의성을 높여주지만, Valtio는 한 걸음 더 나아갑니다. Valtio는 업데이트 로직 자체에서 어떠한 래퍼(wrapper) 함수도 요구하지 않습니다.state.count++
이면 끝입니다. 이 미세하지만 결정적인 차이가 개발 흐름의 자연스러움을 극대화합니다. Valtio의 목표는 Immer가 제공하는 편리함을 넘어, 상태 변경에 대한 인지적 부담 자체를 없애는 것입니다." -
MobX와의 차이: '극도의 미니멀리즘'과 'React 중심 설계'
"MobX는 강력하고 성숙한 상태 관리 솔루션입니다. 하지만 그만큼 Observable, Action, Computed, Reaction 등 배워야 할 개념이 많고, API 표면적도 넓습니다. Valtio는 의도적으로 극도의 미니멀리즘을 추구합니다. 핵심 API는proxy()
와useSnapshot
단 두 개뿐입니다. 복잡한 설정이나 데코레이터 없이도 즉시 사용할 수 있습니다. 또한, Valtio는 처음부터 현대적인 React(Hooks, Suspense 등)와의 완벽한 통합을 염두에 두고 설계되었습니다.useSnapshot
훅은 React 컴포넌트가 Valtio 상태를 소비하는 가장 자연스럽고 최적화된 방법을 제공합니다. MobX의 반응성이 프레임워크에 구애받지 않는 범용성을 지향한다면, Valtio는 React 생태계 안에서의 최적 경험에 집중합니다." -
'Proxy 네이티브'와 '타입스크립트 친화성'
"Valtio는 그 심장부부터 ES Proxy를 기반으로 구축되었습니다. 이를 통해 별도의 설정 없이도 객체와 배열의 변경을 매우 효율적으로 감지합니다. 또한, Proxy의 이러한 특성은 타입스크립트와의 환상적인 궁합을 자랑합니다. 복잡한 타입 정의나 데코레이터 설정 없이도, 개발자는 프록시 상태 객체에 대해 완벽한 타입 추론과 자동 완성의 혜택을 누릴 수 있습니다. 이는 개발 생산성과 코드 안정성을 크게 높여줍니다."
카토는 Valtio가 Immer나 MobX를 대체하려는 것이 아님을 다시 한번 강조했다. 오히려 각 라이브러리가 가진 고유한 강점을 인정하며, Valtio만의 '틈새시장' 혹은 '독자적인 영역'이 있음을 보여주려 했다.
- Immer: 불변성 업데이트 보일러플레이트 제거에 집중하는 유틸리티.
- MobX: 풍부한 기능과 검증된 안정성을 갖춘, 완전한 반응형 상태 관리 프레임워크.
- Valtio: React 환경에서, 최소한의 API와 설정으로, 가장 직관적인 '직접 변경' 경험을 제공하는 초경량 상태 관리 솔루션.
그의 명확한 설명은 커뮤니티의 이해를 도왔다. Valtio는 단순히 MobX의 아류작이나 Immer의 확장판이 아니었다. 그것은 다이시 카토가 추구하는 '궁극의 개발자 경험'이라는 철학 아래, Proxy라는 기술을 활용하여 React 생태계에 최적화된 형태로 빚어낸, 독창적인 창조물이었다.
이제 Valtio는 다른 라이브러리들과의 비교를 통해 자신의 정체성을 더욱 공고히 했다. 커뮤니티에서는 Valtio의 가능성을 보고 기여하려는 움직임이 생겨나기 시작했고, Valtio를 중심으로 한 새로운 생태계가 태동할 조짐을 보이고 있었다. 다이시 카토의 세 번째 항해는 이제 막 순풍을 타기 시작한 듯 보였다.