두 개를 이렇게 분리를 하고 나니 확실히 api 호출부가 간단해졌다.
하지만 이대로 두면 안된다.
다음과 같은 문제가 발생하기 때문이다.
생각해보면 당연한 것인데
이제 axiosInstance에서 intercepter.request에 토큰 유효성 검사만 추가하면 간단하고 완벽한 axiosInstance가 완성이 되겠다고 생각했다.
그런데 생각해보니 참 당연하게도 axiosInstance에 토큰 유효성 검사를 넣는 것은 옳지 않다. axiosInstance를 호출한다는 것은 이미 페이지 접근 여부가 정해졌다는 것이기 때문이다.
토큰 유효성 검사는 axiosInstance를 호출하기 전에 해야 한다. 따라서, 로그인/비로그인 여부를 담당하는 전역 상태 관리 툴을 따로 사용해야 한다.
이 프로젝트에는 zustand를 사용하기로 했다.
이유는 다음과 같다.
1. redux를 사용할 만큼 복잡한 상태가 아니다. zustand는 설정이 간단하고, 사용법도 직관적이라는 이야기를 들어서 로그인/비로그인 상태 관리에 적합하다고 판단했다.
2. zustand는 상태 변경 시 불필요한 리렌더링을 줄임으로써 리렌더링을 최적화하여 성능 향상을 돕는다. 본 프로젝트는 많은 양의 브랜드 데이터와 향수 데이터를 담고 있어서 최적화가 중요하다.
3. zustand는 애플리케이션 번들 크기를 줄이는 데에 도움이 된다.
zustand는 api 모듈화 먼저 끝내고 할 예정이다.