← 전체 글로 돌아가기

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는 파일 기반이라 권한과 경로를 명확히 하는 것이 가장 중요하다.