Redux와의 비교, Zustand의 정체성을 논하다

15

발행일: 2025년 05월 13일

Zustand 커뮤니티는 활기를 띠기 시작했다. 이슈 트래커는 단순한 버그 신고 창구를 넘어, 새로운 아이디어와 열띤 토론이 오가는 용광로처럼 달아올랐다. 다이시 카토는 이 변화가 반가우면서도, 한편으로는 새로운 종류의 폭풍이 몰려오고 있음을 직감했다.

예상대로였다. 사용자가 늘고 인지도가 높아지자, 필연적인 질문이 수면 위로 떠오르기 시작했다. 그것은 바로 오랫동안 React 상태 관리의 왕좌를 지켜온 거인, Redux와의 비교였다.

“Zustand… 이거 완전 Redux 킬러 아니냐?”
“드디어 Redux의 복잡함에서 해방될 수 있는 건가!”
“아니, 그래도 Redux만큼 안정적이고 예측 가능할까? 너무 가벼운 건 불안한데.”
“그래서, Redux 버리고 Zustand로 갈아타야 하는 건가요?”

트위터, 레딧, 개발자 커뮤니티 할 것 없이, ‘Zustand vs Redux’라는 제목의 글들이 심심치 않게 올라오기 시작했다. 마치 새로운 도전자와 노련한 챔피언의 대결을 지켜보는 관중처럼, 개발자들은 뜨거운 논쟁을 벌였다.

어떤 이들은 Zustand의 간결함과 최소한의 보일러플레이트를 극찬하며 Redux 시대의 종말을 선언했다. 마치 무거운 갑옷을 벗어 던지고 날렵한 기동성을 얻은 기사처럼, Zustand가 새로운 표준이 될 것이라 예견했다.

반면, 다른 이들은 Redux의 엄격한 구조와 예측 가능성, 방대한 미들웨어 생태계를 옹호하며 Zustand의 가벼움을 ‘미숙함’으로 치부했다. 복잡한 대규모 애플리케이션에서는 여전히 Redux의 철저한 통제가 필요하며, Zustand는 그저 간단한 프로젝트에나 어울리는 장난감일 뿐이라고 평가절하하기도 했다.

카토는 이 모든 논쟁을 착잡한 심정으로 지켜보았다. 그의 의도는 결코 Redux를 ‘죽이는’ 것이 아니었다. 그 역시 Redux의 강력함과 철학을 존중했다. 다만, 자신이 겪었던 문제들 – Context의 비효율, useReducer의 번거로움 – 을 해결하기 위한, 좀 더 가볍고 유연한 ‘대안’을 만들고 싶었을 뿐이었다.

‘마치… 모든 길을 로마로 통하게 만들려는 것 같군.’

개발자들은 종종 새로운 기술이 등장하면 기존의 것을 완전히 대체해야 한다고 생각하는 경향이 있었다. 하지만 기술 생태계는 그렇게 단순하지 않았다. 각기 다른 문제와 상황에 맞는 다양한 도구들이 공존하며 서로의 빈틈을 메워주는 것이 더 건강한 모습이었다.

이대로 논쟁이 과열되도록 내버려 두면, Zustand의 본질이 왜곡될 수 있다는 생각이 들었다. 사용자들에게 잘못된 기대를 심어주거나, 불필요한 오해를 낳을 수도 있었다.

“정리가 필요해.”

카토는 결심했다. Zustand가 무엇이고, 무엇이 아닌지에 대해 명확하게 선을 그어야 할 때였다. 그는 직접 커뮤니티의 논쟁에 뛰어들기로 마음먹었다. 단순히 댓글로 의견을 피력하는 것을 넘어, 자신의 블로그나 GitHub 저장소의 공식 문서에 Zustand의 정체성에 대한 글을 작성하기로 했다.

그는 신중하게 단어를 골라가며 글을 써 내려갔다.

“Zustand는 Redux를 대체하기 위해 만들어진 것이 아닙니다.”

그는 서두에 명확히 밝혔다.

“Redux는 여전히 강력하고 훌륭한 상태 관리 라이브러리이며, 특히 매우 복잡하고 예측 가능성이 중요한 대규모 애플리케이션에서 그 가치를 발휘합니다. Zustand는 Redux의 모든 기능을 대체하려 하지 않습니다.”

그렇다면 Zustand는 무엇인가?

“Zustand는 React 개발자들이 겪는 특정한 문제들, 즉 Context API의 불필요한 리렌더링과 useReducer의 보일러플레이트를 해결하기 위한 더 간단하고 유연한 대안을 제공하는 데 목적이 있습니다.”

그는 Zustand의 핵심 철학을 강조했다.

“Zustand는 ‘Unopinionated(언오피니언에이티드)’ 합니다. 즉, 특정한 상태 관리 방식이나 구조를 강요하지 않습니다. 개발자는 Zustand라는 작고 유연한 도구를 사용하여 자신에게 맞는 방식으로 상태를 관리할 수 있습니다. 최소한의 API로 시작하여, 필요에 따라 미들웨어를 통해 점진적으로 기능을 확장할 수 있습니다.”

마치 잘 갖춰진 공방과 같았다. Redux가 이미 완성된 웅장한 건축물이라면, Zustand는 다양한 작업을 수행할 수 있는 잘 벼려진 도구들이 담긴 상자였다. 사용자는 그 도구들을 이용해 자신이 원하는 크기와 형태의 구조물을 자유롭게 만들 수 있었다.

그는 글의 말미에 다시 한번 강조했다.

“Zustand와 Redux는 경쟁 관계라기보다는, 서로 다른 문제 영역을 해결하는 상호 보완적인 관계에 가깝다고 생각합니다. 여러분의 프로젝트 요구사항과 팀의 선호도에 맞춰 최적의 도구를 선택하는 것이 중요합니다.”

글이 공개되자 커뮤니티의 반응은 뜨거웠다. 창시자가 직접 나서서 명확한 입장을 밝히자, 과열되었던 논쟁은 조금씩 진정되는 분위기였다.

“아, 이제야 이해가 되네. 무조건 바꾸는 게 아니었구나.”
“Unopinionated 철학, 마음에 드는데? 내 프로젝트에는 Zustand가 더 맞을지도.”
“확실히 선을 그어주니 속이 시원하다. 개발자의 입장을 존중하는군.”

물론 모든 논쟁이 사라진 것은 아니었다. 여전히 갑론을박은 이어졌지만, 적어도 Zustand의 ‘정체성’에 대한 혼란은 상당 부분 해소되었다. 개발자들은 이제 Zustand를 ‘Redux의 대체재’가 아닌, ‘독자적인 철학을 가진 새로운 선택지’로 인식하기 시작했다.

카토는 안도의 한숨을 내쉬었다. 자신의 창조물이 세상에 올바르게 이해받기 시작했다는 사실에 기쁨을 느꼈다. 그는 다시 한번 깨달았다. 오픈소스는 단순히 코드를 공개하는 것을 넘어, 끊임없이 소통하고 자신의 철학을 공유하며 커뮤니티와 함께 방향을 만들어나가는 과정이라는 것을.

Zustand의 정체성이 확립되면서, 라이브러리는 더욱 단단한 기반 위에 서게 되었다. 그리고 이 명확해진 정체성은 예상치 못한 새로운 기회를 불러오게 될 터였다. 마치 안개가 걷힌 뒤 더 선명하게 드러난 봉우리처럼, Zustand는 이제 더 넓은 세상의 주목을 받을 준비를 하고 있었다. 그리고 그 주목은, 아주 영향력 있는 인물로부터 시작될 참이었다.