현재 프로젝트의 팀원들 중 저 혼자 React 경험이 있었기에 기술 스택 대부분을 제가 정했습니다.
그 중에 전역 상태관리로 Zustand를 선택했고 그 이유는 형편없었습니다.
(물론 다른 라이브러리들도 생각없이 정한것들이 많아서 고생하는 팀원들에게 미안한 마음이 있습니다.)
이전에 Recoil을 사용해봤으니 다른 기술을 사용해보고 싶어
마침 Zustand가 마스코트도 귀엽고 사용자도 점점 많아지네?
Redux보다 훨씬 사용하기도 간편하고 쉬우니까 이거로 하자.
변명을 조금 해보자면 처음 React를 접하는 팀원들을 위해 최대한 러닝커브가 낮은 기술들로 사용하자는 생각도 있었습니다.
하지만 처음 전역 상태 관리를 접하는 팀원들과 저 또한 경험이 부족하고 오남용되는 일들이 생기며, 프로젝트에서는 점점 이상한 냄새가 나기 시작했습니다.
이를 알아챈 팀원 한분이 문제가 있는 것 같다고 얘기해주셔서 해결을 위해 고민해보던 중 마이크로 상태 관리라는 책을 알게되었습니다.
이 책은 다이시 카토라는 분이 지으셨는데, Zustand, Jotai, Valtio의 개발자라고 하셔서 많은 기대감이 있었습니다. 우리가 겪고 있는 문제에 대한 해답을 얻을 수 있을 것 같은 느낌이 들었고 알게된 당일 바로 책을 주문했습니다.
책의 초반 내용은 마이크로 상태 관리가 무엇인지에 대한 설명과 정의가 나옵니다.
마이크로 상태 관리란 리액트의 가벼운 상태 관리라고 정의하였는데, Redux에 비해서 최근 많이 사용되는 전역 상태 관리 라이브러리들은 확실히 가볍다는 생각이 듭니다. 물론 가볍다는 것이 나쁜 것은 아니고, 배우기 쉽고 빠르게 적용할 수 있지만 사용자에게 많은 자유를 주기 때문에 나름 신경을 써주어야한다는 특징이 있는 것이라고 생각합니다.
이후 전역 상태와 지역 상태에 대해서 알아보기 위해 React의 상태 관리 Hook인 useState, useReducer의 사용 방법과 직접 구현해보는 실습이 진행됩니다. 이 과정에서 지연 초기화, 베일아웃이라는 새로운 지식도 얻을 수 있었습니다.
전역 상태와 지역 상태를 언제, 어떻게 효율적으로 사용할 수 있는지에 대한 설명은 그동안 React로 개발해오면서 겪었던 문제들과 그 문제들을 해결하기 위해 고민했던 내용들을 담고 있어서 공감이 많이 되었습니다.
여기서 잠깐 다이시 카토는 React는 개념적으로 상태를 사용자 인터페이스로 변환하는 함수라고 설명합니다. 예전에 면접을 보면 React가 무엇이고 왜 사용하는지에 대해서 항상 어렵게 생각하고 설명했었는데, 이제는 쉽고 간결하게 설명할 수 있을 것 같습니다.
책의 중반부터는 React의 Context를 사용한 상태 공유와 구독을 이용한 모듈 상태 공유라는 패턴에 대해서 설명합니다. 이후 전역 상태 관리의 문제점을 설명하고, 이 공통적인 문제를 해결하기 위해 다양한 라이브러리들이 어떤 접근법과 어떤 패턴으로 해결하였는지 설명합니다. 여기서 Zustand, Jotai, Valito가 등장하고 이러한 라이브러리들이 만들어진 과정을 알 수 있었습니다.
Jotai나 Valtio를 간단하게 사용해보면서 상태를 위치하는 곳과, 리렌더링을 제어하는 방법은 무엇인지 제가 사용했던 Zustand와 비교해볼 수 있었습니다.
저희 회사처럼 레거시가 없고 자주 새로운 프로젝트를 생성하는 환경에서 마이크로 상태 관리는 꽤나 적합한 기술이라고 생각합니다. 이 책은 마이크로 상태 관리에 여러가지 방법이 있다는 것과 현재 상황에 알맞는 도구를 선택하는데 방법을 설명해주고 있습니다.
현재 겪고 있는 문제를 해결해 줄 수 있을 것이란 기대감에 책을 읽기 시작했지만, 책의 마지막장을 보는 순간까지 현재 겪고있는 문제를 해결할 수 있는 해답을 얻지는 못했습니다.
그래도 꾸준히 Zustand공식문서를 읽었고 이제는 어떻게 사용하는게 올바르고 효율적인지 어느 정도 감이 잡히는 것 같습니다.
작은 저희 팀에서 문제를 해결하기 위해 Zustand를 사용하는 규칙을 정하거나 아예 다른 라이브러리로 바꿀 수도 있습니다. 이 과정에서 마이크로 상태 관리 책이 어쩌면 도움이 될 수도 있지 않을까? 생각해봅니다.
처음으로 책에 대한 후기를 정리해보았습니다. 기회가 된다면 책을 다시 읽고 이 글을 읽었을 때 내가 얼마나 성장했는지, 책을 제대로 이해했는지 지표로 사용하기 위한 글입니다.
책에 대한 몇몇 글들을 찾아보았는데, 보통 이 책을 심화 과정으로 추천을 해주더군요. 이 책은 심화 과정이 맞다고 생각합니다. 하지만, 전역 상태 관리 라이브러리를 사용하기 위해서 당장 이 책을 읽어도 도움이 될 것이라고 생각합니다.
이 책에서 다이시 카토는 "제가 만든 다양한 전역 상태 관리 라이브러리가 있는데 이를 비교한 내용을 공유드립니다. 본인들의 프로젝트에 맞는 기술로 잘 선택해보세요."라고 말하는 것 같습니다.