최근 일주일 동안 인턴 준비를 하기 위해 이사 + 적응이 필요하였습니다.
이번에 학습할 내용은 shadcn UI에서의 캘린더 컴포넌트입니다.
- 이번 게시물은 캘린더 컴포넌트를 학습하면서 마주하였던 빌드 오류들을 위주로 적어보고자 합니다.
🛠 문제 상황
최근 프로젝트에서
React 19을 사용하면서shadcn/ui의 캘린더 컴포넌트를 설치하려고 했는데, 설치와 빌드 과정에서 아래와 같은 peer dependency 충돌이 발생했다.
? How would you like to proceed? » - Use arrow-keys. Return to submit.
> Use --force
Use --legacy-peer-deps
처음에는
--force나--legacy-peer-deps를 사용해서 강제로 설치해도 별 문제가 없겠다 싶어서--legacy-peer-deps를 사용하여 설치를 진행하였다.
🔍 원인 분석
설치, 빌드 중
ERESOLVE오류가 발생하며 아래와 같은 로그가 출력되었다.npm error code ERESOLVE npm error ERESOLVE could not resolve npm error While resolving: react-day-picker@8.10.1 npm error Found: react@19.0.0 npm error peer react@"^16.8.0 || ^17.0.0 || ^18.0.0" from react-day-picker@8.10.1즉,
react-day-picker@8.10.1이React 19을 지원하지 않으며,react@18을 요구하는 것이 원인이었다. 하지만shadcn/ui의 캘린더 컴포넌트는react-day-picker@8.10.1을 사용하기 때문에 다른 버전으로 쉽게 교체할 수도 없는 상황이었다.
또한
date-fns@4.x와의 충돌 문제도 있었다.npm error Found: date-fns@4.1.0 npm error Could not resolve dependency: npm error peer date-fns@"^2.28.0 || ^3.0.0" from react-day-picker@8.10.1즉,
react-day-picker@8.10.1은date-fns@4.x를 지원하지 않고date-fns@3.x까지만 지원하는 문제도 함께 발생했다.
✅ 해결 방법
React 18로 다운그레이드 (shadcn/ui 캘린더 유지)
shadcn/ui의 캘린더를 꼭 사용해야 한다면,
React 18을 사용해야 한다.npm install react@18 react-dom@18 npm install react-day-picker@8.10.1 npm install date-fns@3.6.0이렇게 하면
shadcn/ui의 캘린더가 정상 작동한다. 다만,React 19의 새로운 기능들을 사용하지 못한다는 단점이 있다.
또 다른 해결 방안 : 캘린더 라이브러리 교체 (React 19 유지)
shadcn/ui 캘린더를 고집하지 않는다면, 다른 캘린더 라이브러리를 고려할 수도 있다.
- react-calendar
- @mui/x-date-pickers
react-day-picker@9.x(shadcn/ui와 호환되지 않음)
이 방법을 선택하면React 19을 유지할 수 있지만, shadcn/ui의 스타일을 직접 커스터마이징해야 할 수도 있다.
현재
shadcn/ui의 캘린더는React 19을 공식적으로 지원하지 않으므로 React 18로 다운그레이드하는 것이 가장 쉬운 해결책이라고 생각이 들어 첫번째 방안을 선택하였으며 정상적인 작동을 할 수 있었다.
간편하게 사용할 수 있도록 설명이 잘되어있으며 dialog 컴포넌트를 사용하여 모달로 띄워주도록 만들었음.
화면의 달력이 꽉 채워지지 않는 부분에 대해서는 CSS 수정을 통해 해결할 예정임.
https://shadcn-ui-umber.vercel.app/CalendarPage
위 링크를 들어가보면 직접 확인 가능!
추가적으로 컴포넌트를 통일하여 코드 가독성을 높였습니다! (calendar mode를 props로 받기)