웹 개발
데이터베이스 쿼리 디버깅
로컬에서 잘 돌던 쿼리가 배포 환경에서 안 될 때 체크해야 할 것들.
데이터베이스 문제는 겉으로는 API 에러로 보이지만, 실제로는 DB 계층에서 일어난다. 특히 로컬 환경과 배포 환경의 DB 버전/인코딩이 다르면 같은 쿼리도 다르게 동작한다.
연결 확인부터
# Prisma 스키마 검증
npx prisma validate
# DATABASE_URL이 제대로 설정됐는지 확인
echo $DATABASE_URL
# 마이그레이션 상태 확인
npx prisma migrate status
DATABASE_URL이 없으면 로컬 .env 파일에서만 읽고 배포 환경에서는 동작하지 않는다. 환경변수로 명시적으로 넘겨줘야 한다.
마이그레이션 확인
데이터베이스 스키마가 최신 상태인지 확인한다. 배포 후 마이그레이션이 실행되지 않았다면, 앱이 기대하는 컬럼이 없어서 쿼리가 실패한다.
npx prisma migrate deploy
권한과 백업 상태
로컬에서는 superuser 권한으로 돌지만, 프로덕션에서는 제한된 권한의 사용자로 접속한다. 어떤 테이블에 대한 SELECT 권한이 없으면 조용히 실패한다. 또한 최근 백업이 됐는지 확인하면 데이터 손상을 조기에 발견할 수 있다.
타입 불일치와 인코딩
PostgreSQL과 MySQL은 같은 타입도 다르게 동작한다. BIGINT, VARCHAR 길이, 타임스탬프 형식이 맞는지 확인한다. 특히 이모지나 한글이 포함된 데이터는 인코딩(UTF-8, LATIN1)에 따라 저장/조회가 실패할 수 있다.
체계적인 확인 순서
- DATABASE_URL 설정 확인 (로컬/배포 환경 모두)
- 스키마 검증 및 마이그레이션 상태 확인
- 테이블 권한 확인 (특히 배포 환경의 DB 사용자)
- 인코딩과 데이터 타입 일치성 확인
- 백업 상태 확인
한 가지씩 고정하고 테스트하면, 다음에 같은 문제가 나올 때 훨씬 빠르게 해결한다.