2025. 4. 28. 15:46ㆍProgramming/Server
문제 상황
프로젝트에서 새로운 컬럼을 추가하려고 했습니다. youtubeTitle
이라는 컬럼을 추가하고 아무 생각없이 코드를 작성하던 중, 문특 yotubeTitle
이라는 이름으로 오타가 발생한 것을 확인했습니다. 종종 발생하던 오타라서 별 생각없이 컬럼명을 youtubeTitle
으로 수정한 뒤, generate
후 migrate
를 실행했습니다.
npx prisma generate
npx prisma migrate
하지만 편집기로 돌아오자 여전히 youtubeTitle
을 찾을 수 없다는 에러가 발생하고 있었습니다. 어라? 대체 뭘 잘못한거지. 결국은 ChatGPT에게 도움을 요청하고야 맙니다.
개체 리터럴은 알려진 속성만 지정할 수 있으며 '(Without<YoutubeAudioDownloadUpdateInput, YoutubeAudioDownloadUncheckedUpdateInput> & YoutubeAudioDownloadUncheckedUpdateInput) | (Without<...> & YoutubeAudioDownloadUpdateInput)' 형식에 'youtubeTitle'이(가) 없습니다.
원인 분석
이러한 문제가 발생하는 주요 원인은 다음과 같습니다.
Prisma 클라이언트 캐시 문제
node_modules/.prisma
디렉토리에 캐시된 이전 버전의 타입 정의가 남아있을 수 있습니다.- 이 캐시는 때로는
npx prisma generate
명령어로도 완전히 갱신되지 않을 수 있습니다.
TypeScript 타입 캐시 문제
- TypeScript 컴파일러가 이전에 생성된 타입 정의를 캐시하고 있을 수 있습니다.
.next
폴더나 TypeScript의 캐시 디렉토리에 오래된 타입 정보가 남아있을 수 있습니다.
의존성 버전 불일치
package-lock.json
이나yarn.lock
에 캐시된 의존성 버전이 실제 필요한 버전과 다를 수 있습니다.- 특히 Prisma 관련 패키지들(
@prisma/client
,prisma
)의 버전이 서로 맞지 않을 수 있습니다.
다만 여기서 prisma의 버전은 변경되지 않았으니 의존성 버전 불일치 문제는 아닐테니, 캐시로 인해 발생하는 문제일 가능성이 높았습니다.
해결 방법
ChatGPT가 제시해준 해결방법은 다음과 같...지는 않고, node_modules
경로를 통으로 날리라고 제시해주더군요. 아무튼 해결은 됐지만, 이런 경우에 매번 node_modules
를 날려버린 뒤 npm install
을 하는 것도 생각보다 시간이 걸려서... 다른 방법을 제시해달라고 부탁해봤습니다.
1. Prisma 캐시만 삭제하기 (가장 빠른 방법)
rm -rf node_modules/.prisma
rm -rf node_modules/@prisma/client
2. Prisma 캐시와 생성된 클라이언트 재생성
npx prisma generate --force
3. TypeScript 캐시도 함께 삭제
rm -rf .next
rm -rf node_modules/.prisma
rm -rf node_modules/@prisma/client
npx prisma generate
4. Windows의 경우 추가로 다음 디렉토리도 삭제
rm -rf node_modules/@prisma/cli/node_modules/.cache
권장 사항
가장 일반적인 해결 방법
rm -rf node_modules/.prisma npx prisma generate
문제가 지속될 경우 확인할 사항
- Prisma 버전과
@prisma/client
버전이 일치하는지 확인 - TypeScript 버전이 Prisma와 호환되는지 확인
- 개발 서버가 오래 실행되어 캐시가 오래된 경우 서버 재시작
- Prisma 버전과
예방 조치
package.json
에서 Prisma 관련 패키지들의 버전을 정기적으로 확인하고 업데이트- 개발 중에는 주기적으로 Prisma 캐시를 초기화하는 습관 가지기
결론
Prisma의 캐시 문제는 개발 과정에서 자주 발생할 수 있는 문제입니다. 물론 깔끔하게 문제가 발생할때마다 node_modules
전체를 삭제해서 해결할수도 있습니다. 하지만 매번 패지기들을 설치하는 것도 시간이 소모되니, 간단하게 Prisma 관련 캐시만 선택적으로 삭제하여 문제를 해결할 수 있습니다.
'Programming > Server' 카테고리의 다른 글
[Python] AIOAPNS를 사용한 APNs 푸시 메시지 전송 (0) | 2025.02.24 |
---|---|
[Python] PyFCM을 사용한 Push Notification 전송시 예외 처리를 사용한 FCM 토큰 관리 (1) | 2025.02.18 |
NGINX에서 TLSv1, TLSv1.1을 비활성화해보자. (0) | 2022.12.20 |
OpenResty/NGINX의 크로스 컴파일 (0) | 2021.12.21 |
Lighttpd와 Cross-Origin Resource Sharing와 Access-Control-Allow-Origin (0) | 2021.01.13 |