SQLite

  • 운영이 간단. 서버가 필요없음. 서버 프로세스에 링크되는 그냥 라이브러리.

  • 파이썬 기본에서 지원하기에, 추가로 필요한 라이브러리가 없습니다.

  • 데이터가 단일 파일에 저장되므로 백업과 이전이 간편 (그냥 복사)

  • 동시성이 부족하지만, 완화를 위한 옵션 지원 : WAL (Write-Ahead Logging), 읽기 전용 연결 등

  • Litestream, LiteFS : 데이터베이스 실시간 복제 및 외부 스토리지로의 지속적인 백업 지원

SQLite 확장

sqlite-vec와 같은 SQLite 확장을 사용할려면, 파이썬/장고 프로젝트에서 사용할려면 파이썬에서도 SQLite 확장 지원이 필요합니다. 윈도우 배포판에서는 SQLite 확장이 지원되며, 맥/리눅스에서는 파이썬을 직접 빌드했을 경우 SQLite 확장 지원이 누락되었을 수 있습니다.

SQLite 확장 지원 여부 확인 및 파이썬 재설치에 대해서는 파이썬 설치 가이드 문서를 참고해주세요.

장고 settings 설정

ENGINE 설정으로 "django.db.backends.sqlite3"를 지정하고, NAME 설정으로 데이터베이스 파일 경로를 지정합니다. 데이터베이스 파일 경로에 지정한 파일이 없으면, 오류없이 빈 파일이 생성되고, 새로운 데이터베이스 경로로 사용합니다. 새로운 경로의 데이터베이스에서 테이블이 없으므로 데이터베이스에 접근할 경우 OperationalError 오류가 발생할 수 있습니다.

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    }
}

경고

데이터베이스 파일 경로 지정이 잘못되어 엉뚱한 경로로 데이터베이스를 지정하여, 기존의 데이터베이스를 참조하지 못하는 경우가 종종 발생합니다. 특히 settings 파일을 여러 깊이로 조정할 때 BASE_DIR 경로 계산 부분을 조정해줘야하는 데 이 부분이 누락되어 실수가 자주 발생합니다.

env.db("DATABASE_URL", default=f"sqlite:///{BASE_DIR / 'db.sqlite3'}")

WAL 설정

SQLite 데이터베이스에서 쓰기 작업이 발생할 때 전체 데이터베이스가 잠기게 됩니다. 이는 동시성이 필요한 웹 애플리케이션에서 성능 병목이 될 수 있습니다. WAL(Write-Ahead Logging) 모드는 이러한 문제를 완화하여 데이터베이스 쓰기 성능을 향상시킬 수 있습니다.

추천 영상