SQLite와의 First Contact
(brandur.org)- 며칠간 SQLite를 만져보고 알게된 몇가지 놀라운 단점들
-
ALTER COLUMN
은 지원되지 않음. 컬럼을 변경하기 위한 공식적인 권장 사항 "새 테이블 생성" -
DROP CONSTRAINT
는 지원되지 않음. 제약 조건을 제거하기 위한 공식적인 권장 사항 "새 테이블 생성" - SQLite는 컬럼에 데이터 유형이 없음. 데이터 유형(5가지만 있음)은 값에만 있으므로 어디에나 모든 것이 들어갈 수 있음
- 지원되지 않거나 존재하지 않는 유형의 열을 요청하면 경고나 오류 없이 잘못된 작업을 수행함.
CREATE TABLE my_table (id bigserial, messages jsonb[])
와 같은 스키마를 올리는 것이 작동하는 것처럼 보여서 처음 하루 동안 SQLite가 serial과 배열을 지원한다고 잘못 생각함 -
CREATE TABLE my_table (...) STRICT
를 사용하여 지원되는 5가지 유형인integer
,real
,text
,blob
,any
중 하나만 허용할 수 있음 - SQLite의 새로운
jsonb
지원에 대해 최근 많은 관심이 있었음. Postgres와 달리jsonb
는 실제로 데이터 유형이 아니라 내장jsonb*
함수에 입출력되는 형식임. 영구 저장될 때는 5대 기본 유형 중 하나인blob
임 -
timestamptz
와 같은 다른 매우 중요한 유형도 누락되어 있음. 날짜/시간을 원하면 Unix 타임스탬프integer
또는 ISO8601 형식의string
으로 저장하고 이러한 작업을 위한 여러 내장 함수가 제공됨 - SQLite에는 스트리밍과 관련된 인상적인 기능이 있어 사용해 보고 싶지만, 초기 DX 경험은 확실히 조금 불편했음
- 어떤 이야기에 너무 강하게 사로잡혀 있는지 궁금할 때가 있음. 예를 들어, Postgres가 정말 세계 최고의 데이터베이스인가? 이러한 경험은 확실히 나의 확신을 굳혀줌. Yes, Postgres가 최고야
왜 SQLite를 Postgres처럼 쓰려고 한걸까요?
마치 리눅스를 처음 써본사람이 “한컴오피스도 잘 안돼고 내가 하는 게임도 안 돌아가요. 역시 운영체제는 윈도우야!” 라고 하는 느낌이에요.
해커뉴스에 올라오는 sqlite 뜬소문(hype)이 과한거 아닐까요? sqlite가 별도로 운영하는 RDBMS를 대체할수 있다는 주장이 2022년부터 해커뉴스에 많이 올라왔습니다.
1: https://news.ycombinator.com/item?id=31318708
2. https://news.ycombinator.com/item?id=31152490
3. https://news.ycombinator.com/item?id=34812527
4. https://news.ycombinator.com/item?id=36208568
Postgres나 MySQL 등의 데이터베이스 제품군을 사용하기가 오버킬이라고 느껴지는 경우에는 SQLite가 충분히 매력적인 대안이 될 수 있다고 생각합니다.
예를 들어 작은 서비스의 경우에 매니지드 DB의 비용이 배보다 배꼽이 큰 경우로 작용하고, 직접 운용하기에는 또 부담이 있죠.
반면 SQLite의 경우 어느정도 규모까지는 성능상에 부족함이 없다고 하고 특히 Litestream과 같은 도구를 사용하면 운용에 부담도 거의 없어서 장점이 있는 것 같아요.
복제기능까지 갈 것도 없이 sqlite가 백업도 간편하고 서비스 데몬 상태만 관리만 하면 되니까 참 좋은데, JPA에 붙이려면 이것저것 해줘야돼서 남에게 인수인계해줘야 하는 프로젝트에선 못쓰겠더라구요. 원글과 같이 데이터 스키마를 좀더 엄격하게 다루고자 하는 의지가 있다면 그런 용도에는 맞지 않구요
제가 앞 댓글을 적다 말았는데 sqlite에 대한 뜬소문이 마치 sqlite가 만능인것처럼 착시를 불러일으킨다는 얘기를 하고 싶었습니다