포스트

SQLite의 단점, 그럼에도 사용하는 이유

SQLite는 다른 db들에 비해 중요한 단점이 있습니다.

그러나 그럼에도 편리함 때문에 개발단계나 로컬 db용으로는 사용해도 좋습니다.

단점:

SQLite는 파일 기반 DB라서 “쓰기”는 동시 지원 못함 (쓰기 1개만 가능). 두 요청이 동시에 들어오면 하나가 파일 락을 걸고 씀. 그래서 병렬 작업도 안되고, 백그라운드 워커와 api 서버가 동시에 .db에 접근해도 충돌함.

락을 걸고 쓴다는 점때문에 다중 쓰기가 불가능하다는 점으로부터 여러 중요한 단점들이 파생됩니다.

그런 단점들이 드러나게 될 때는 서비스에서 다른 db로의 전환을 고려해보아야 할 때입니다.

항목설명
🔒 동시성 처리 약함동시에 한 프로세스만 쓰기 가능 → 여러 요청이 동시에 write 시 database is locked 오류 발생
🌐 서버용 기능 부족사용자 권한, 복제(replication), 트랜잭션 격리 수준 등 서버용 DB의 고급 기능 부족
📁 파일 기반.db 파일 하나에 모든 데이터가 들어 있어 백업 중 충돌 위험, 파일 손상 시 전체 손실 가능성
📊 대용량 비효율수천/수만 개 테이블, 수 GB 이상 데이터에선 성능 저하 → 적당한 크기까지만 유리
🚫 No 병렬 작업백그라운드 워커(Celery 등)와 API 서버가 동시에 .db에 접근하면 충돌
🧪 테스트-운영 차이개발/테스트에서는 잘 되지만, 운영에선 동시접속, 트래픽 증가 시 문제 터짐
📈 인덱싱 제한일부 고급 인덱스 기능 (e.g. partial, expression index 등) 은 PostgreSQL보다 제한적
기타ALTER COLUMN 지원 안 함.Enum 타입 없음.복잡한 제약조건 변경 시 테이블 재생성 필요

그럼 그 전까지는 SQLite를 왜 쓸까요?

다음과 같은 장점이 있습니다.

항목설명
⚡ 매우 가벼움설치/서버 필요 없음 → .db 파일 하나로 끝
📦 배포 간편단일 실행 파일로 만들기 쉬움 (PyInstaller 등과 궁합 좋음)
🚀 빠른 SELECT읽기 위주의 앱에선 속도 빠름 (단일 사용자 기준)
🧪 테스트에 유리CI, 단위 테스트에서 PostgreSQL 없이 빠른 테스트 가능

sticker

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.