SQLite를 in-memory DB로 쓰기

회사에서 같이 일하는 분이 테스트 프로그램에서 실제 데이터베이스 대신에 SQLite를 쓰는데 문제가 있다는 얘길 하시더라. (실제 데이터베이스에 비해) 너무 느려서, 데이터베이스 쪽과 연동된 코드들이 원하는대로 동작하지 않는다는 것.

그래서 어느 부분이 병목인지 시험해볼 수 있는 팁을 하나 알려드렸다. (SQLite 자체가 문제인지, 아니면 주변 로직이 문제인지 검사하는 팁이라고 좀 더 정확하겠다) SQLite 연결을 생성할 때 파일 경로 대신에 :memory: 를 주는 것. 이러면 in-memory DB 처럼 동작한다.

다만 여기엔 거대한 문제가 있다. 이런 식으로 데이터베이스를 만들면 persistency가 없다. 해당 연결을 닫아버리면 끝이다. SQLite의 .dump 명령어를 구현하면 얘기가 좀 다르겠지만 프로그램이 크래시할 때 데이터가 날아갈 수 있다면 데이터베이스라고 부르기는 좀 뭣해지니. 1


  1. .dump transaction 안에서 모든 테이블과 인덱스를 내보내는 명령이라 데이터가 크다면 곤란하다. ↩︎