# SQLite와의 First Contact

> Clean Markdown view of GeekNews topic #15816. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15816](https://news.hada.io/topic?id=15816)
- GeekNews Markdown: [https://news.hada.io/topic/15816.md](https://news.hada.io/topic/15816.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-07-13T10:03:01+09:00
- Updated: 2024-07-13T10:03:01+09:00
- Original source: [brandur.org](https://brandur.org/atoms/gubk5w2)
- Points: 10
- Comments: 6

## Summary

SQLite를 써보고 알게 된 몇 가지 놀라운 단점들을 이야기 합니다. ALTER COLUMN, DROP CONSTRAINT 등이 없고, 컬럼에 데이터 유형이 없어서 생기는 다양한 문제들을 설명하면서 작성자는 Postgres가 최고라고 하지만, 사과와 오렌지 비교 같은 느낌적 느낌.

## Topic Body

- 며칠간 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가 최고야**

## Comments



### Comment 27308

- Author: tested
- Created: 2024-07-16T16:54:55+09:00
- Points: 1

SQLite가 아니라 SQLHeavy를 원하는 느낌이네요.

### Comment 27279

- Author: princox
- Created: 2024-07-15T18:05:48+09:00
- Points: 1

이런 DB도 있고 저런 DB도 있죠. SQLite는 그것대로 철학으로 운영된다는 생각을 했습니다.

### Comment 27203

- Author: regentag
- Created: 2024-07-13T12:01:07+09:00
- Points: 3

왜 SQLite를 Postgres처럼 쓰려고 한걸까요?  
  
마치 리눅스를 처음 써본사람이 “한컴오피스도 잘 안돼고 내가 하는 게임도 안 돌아가요. 역시 운영체제는 윈도우야!” 라고 하는 느낌이에요.

### Comment 27209

- Author: savvykang
- Created: 2024-07-13T16:20:16+09:00
- Points: 1
- Parent comment: 27203
- Depth: 1

해커뉴스에 올라오는 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  
  
그외: https://hn.algolia.com/?dateEnd=1720854657&dateRange=custom&dateStart=1640995200&page=0&prefix=true&query=sqlite&sort=byPopularity&type=story

### Comment 27213

- Author: eajrezz
- Created: 2024-07-13T23:04:21+09:00
- Points: 1
- Parent comment: 27209
- Depth: 2

Postgres나 MySQL 등의 데이터베이스 제품군을 사용하기가 오버킬이라고 느껴지는 경우에는 SQLite가 충분히 매력적인 대안이 될 수 있다고 생각합니다.   
  
예를 들어 작은 서비스의 경우에 매니지드 DB의 비용이 배보다 배꼽이 큰 경우로 작용하고, 직접 운용하기에는 또 부담이 있죠.  
  
반면 SQLite의 경우 어느정도 규모까지는 성능상에 부족함이 없다고 하고 특히 Litestream과 같은 도구를 사용하면 운용에 부담도 거의 없어서 장점이 있는 것 같아요.

### Comment 27216

- Author: savvykang
- Created: 2024-07-14T00:17:36+09:00
- Points: 1
- Parent comment: 27213
- Depth: 3

복제기능까지 갈 것도 없이 sqlite가 백업도 간편하고 서비스 데몬 상태만 관리만 하면 되니까 참 좋은데, JPA에 붙이려면 이것저것 해줘야돼서 남에게 인수인계해줘야 하는 프로젝트에선 못쓰겠더라구요. 원글과 같이 데이터 스키마를 좀더 엄격하게 다루고자 하는 의지가 있다면 그런 용도에는 맞지 않구요  
  
제가 앞 댓글을 적다 말았는데 sqlite에 대한 뜬소문이 마치 sqlite가 만능인것처럼 착시를 불러일으킨다는 얘기를 하고 싶었습니다
