<aside> 💡
패키지 매니저는 pnpm을 사용하면 좋을 것 같습니다. 모든 패키지를 병렬로 몰아서 설치해 빠르고 용량 절감도 가능합니다. 게다가 특정 패키지를 여러 곳에서 사용해도, 직접적으로 의존하는 패키지만 참조하므로 이 역시 용량 절감이 가능합니다.
</aside>
기술 | 장점 | 단점 | 추천 여부 |
---|---|---|---|
Vite | 빠른 개발 서버, HMR, 최신 번들러 (esbuild) | 일부 구형 브라우저는 polyfill 필요 | ✅ 적극 추천 |
CRA | 전통적인 React CLI | 느린 빌드, Vite보다 성능 낮음 | ❌ 사용 지양 |
✅ 추천: Vite + React + TypeScript (빠른 빌드, DX 우수)
기술 | 장점 | 단점 | 추천 여부 |
---|---|---|---|
TypeScript | 타입 안전성, 협업 효율 향상 | 러닝 커브 | ✅ 반드시 사용 |
✅ 추천: 타입 안정성 필수인 협업 프로젝트에 적합
기술 | 장점 | 단점 | 추천 여부 |
---|---|---|---|
React Router v6 | 선언적 라우팅, 동적 라우트, Nested Routes | SSR 미지원 (Next.js와 비교 시) | ✅ 기본 선택 |
✅ 추천: 커뮤니티 서비스의 다양한 페이지 구성에 적합
기술 | 장점 | 단점 | 추천 여부 |
---|---|---|---|
Zustand | 가볍고 간단, Redux보다 코드 간결 | 상태 변경 추적 어려울 수 있음 | ✅ 소규모 상태에 적합 |
⇒ Zustand를 선택한 이유
결제 서비스, 커뮤니티 서비스 도입 전인 지금은 프로젝트의 규모가 엄청 크지도, 로직이 엄청 복잡하지도 않으니 간단하고 빠르게(가볍게) 사용할 수 있는 Zustand가 적합하리라 생각되었습니다.
조금 로직이 복잡해질 경우, Immer를 도입하여 가변적으로(실제로는 불변성을 유지) 코드를 짜면 가독성도 높아지고 코드의 양은 줄어서 좋을 것입니다.
실시간 알림 서비스도 서버 또는 소켓을 통하여 하게 될 것이고, Zustand는 그 데이터를 받아 화면에 반영만 하면 되기 때문에 문제될 것은 없을 것 같습니다.
나중에 복잡한 기능 추가로 인하여 더 복잡한 로직을 필요하게 되거나 사용자가 현저히 늘어 성능 면에서 부담이 될 경우, 그때 Redux로 마이그레이션을 고려하면 될 것 같습니다.
⇒ 전역적으로 거의 값이 바뀌지 않는 값의 경우, 필요에 따라 추가로 Context API를 사용하면 좋을 것 같습니다.(ex: 로그인 상태 여부)
———————————————————————
그런데 React Query를 사용할 경우 상태 관리를 사용할 일이 많이 없을 것으로 보입니다. | | Redux Toolkit | 확장성/툴링 뛰어남 | 설정 무거움, boilerplate | ⚠️ 규모 커질 경우 고려 | | Recoil | React 친화적, atom 기반 | 커뮤니티 성장 더딤 | ⚠️ 실험적 요소 존재
⇒ Recoil VS Zustand = Zustand인 이유
Recoil도 사용하기 쉽고 간편한 전역 상태 관리 라이브러리지만, Zustand가 store 하나만 관리하면 될 뿐더러, React 훅처럼 사용이 가능해 좀 더 간단합니다.
persist, devtools 등 미들웨어도 제공합니다.
Recoil은 persist 등 미들웨어 부분에서 제공하는 플러그인이 많지 않습니다.
Recoil은 Zustand에 비해서는 러닝 커브가 높고 아예 다른 패러다임이기 때문에 나중에 Redux로 확장하기도 어렵고 불편합니다.
모임, 후기, 댓글, 신청자 목록, 로그인 상태, 알림 등 단순한 리스트/객체 중심의 상태들이 많아 이런 상태를 도메인별로 쪼개서 관리하기 좋습니다.
무엇보다 비동기 코드와 결합하기가 쉽습니다.
Recoil은 비동기 데이터를 처리하기 위하여 selectorFamily, useRecoilCallback 등을 필요로 합니다. |
✅ 추천: Zustand (초기에는 적합, 확장성 필요 시 Redux 전환 고려)