DB
SQLite 파일 권한과 볼륨 마운트 확인하기
Docker나 서버 환경에서 SQLite가 `database is locked` 에러를 내면, 파일 권한과 볼륨 마운트부터 확인해야 한다.
SQLite를 실제 서비스에 쓸 때 가장 흔한 문제가 권한과 볼륨 마운트다. 개발 환경에서는 괜찮지만 배포 후에 갑자기 에러가 난다면, 대부분 이 두 가지 중 하나다.
파일 권한 확인
SQLite 데이터베이스 파일과 그 디렉토리의 권한을 본다:
ls -la /path/to/database/
ls -la /path/to/database/dev.db
권한이 제한적이면 애플리케이션이 쓰기 작업을 할 수 없다. 일반적으로 다음 정도면 충분하다:
chmod 666 dev.db
chmod 755 /path/to/database/
하지만 서버 환경이면 애플리케이션 실행 유저를 명확히 하고 권한을 설정하는 게 낫다.
Docker 볼륨 마운트 확인
Docker에서 SQLite를 쓸 때는 볼륨을 제대로 마운트해야 한다:
VOLUME ["/app/data"]
Docker Compose에서:
services:
app:
volumes:
- ./data:/app/data
이렇게 해야 컨테이너가 재시작돼도 DB 파일이 유지된다.
Prisma와의 호환성
Prisma가 SQLite를 제대로 연결했는지 확인한다:
npx prisma validate
npx prisma migrate status
마이그레이션이 적용되지 않았으면:
npx prisma migrate deploy
백업 고려하기
SQLite는 단순 파일이므로 백업도 간단하다:
cp dev.db dev.db.backup
서버 환경이면 정기적인 백업 스크립트를 만들어두는 게 좋다.
성능 튜닝
SQLite는 동시성 문제가 있을 수 있다. 읽기가 많은 환경이면 WAL 모드를 켜는 게 도움이 된다:
const prisma = new PrismaClient();
// SQLite에서 WAL 모드는 prisma.schema의 datasource에서 설정
요약하면, SQLite는 파일 기반이라 권한과 경로를 명확히 하는 것이 가장 중요하다.