← 전체 글로 돌아가기

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

순서대로 확인

  1. 스키마는 유효한가? (prisma validate)
  2. 마이그레이션은 적용되었나? (prisma migrate status)
  3. DATABASE_URL은 제대로 설정되었나?
  4. 데이터베이스 파일은 존재하는가?
  5. 권한은 충분한가?

이 순서대로 확인하면 대부분의 SQLite 문제를 빠르게 해결할 수 있다. 한 번에 여러 개를 동시에 고치면 뭐가 문제였는지 알 수 없으니 하나씩만.