DB
SQLite 문제를 빠르게 좁히기
데이터베이스 에러는 스키마, 환경 변수, 마이그레이션 상태를 이 순서로 확인해야 한다. 추측하지 말고 명령으로 확인하자.
로컬에서는 쿼리가 잘 되는데 배포한 서버에서는 "table not found" 에러가 난다. 로컬 개발용과 서버용 데이터베이스가 다른 상태라는 뜻이다.
스키마 검증
Prisma를 쓰면 스키마 파일이 유효한지 먼저 확인하자:
npx prisma validate
문법 에러가 있으면 여기서 잡힌다.
마이그레이션 상태 확인
데이터베이스에 최신 스키마가 적용되어 있는지 확인:
npx prisma migrate status
이 명령으로 다음을 알 수 있다:
- 적용되지 않은 마이그레이션이 있는가?
- 데이터베이스와 코드의 스키마가 일치하는가?
- 마이그레이션 중 실패한 게 있는가?
환경 변수 확인
Prisma가 데이터베이스를 찾으려면 DATABASE_URL이 제대로 설정되어야 한다:
echo $DATABASE_URL # 값이 출력되는지 확인
빈 문자열이면 기본값(보통 ./prisma/dev.db)를 사용한다. 서버에서는 절대경로를 명시해야 한다.
데이터베이스 파일 확인
SQLite는 파일 기반 데이터베이스다. 파일이 있는지 확인하자:
ls -la /path/to/database.db
없으면 마이그레이션을 실행해서 생성해야 한다:
npx prisma migrate deploy
권한 확인
SQLite 파일의 소유자와 권한도 중요하다:
ls -la /path/to/database.db
app이 실행되는 사용자가 읽기/쓰기 권한이 있는지 확인하자. 필요하면:
chmod 644 /path/to/database.db
chown app:app /path/to/database.db
백업은 필수
프로덕션 데이터베이스에는 항상 백업이 있어야 한다. 마이그레이션 전에:
cp /path/to/database.db /path/to/database.db.bak
순서대로 확인
- 스키마는 유효한가? (prisma validate)
- 마이그레이션은 적용되었나? (prisma migrate status)
- DATABASE_URL은 제대로 설정되었나?
- 데이터베이스 파일은 존재하는가?
- 권한은 충분한가?
이 순서대로 확인하면 대부분의 SQLite 문제를 빠르게 해결할 수 있다. 한 번에 여러 개를 동시에 고치면 뭐가 문제였는지 알 수 없으니 하나씩만.