SQLite

8 posts
SQLite FTS5로 전문 검색 구현하기

SQLite FTS5로 전문 검색 구현하기

블로그나 문서 앱을 만들다 보면 처음에는 검색 기능을 아주 단순하게 시작하게 됩니다. 제목이나 본문에 검색어가 들어 있는지 LIKE '%검색어%'로 확인하면 되니까요. 데이터가 몇십 개일 때는 이것만으로도 충분합니다. 그런데 글이 수백 개, 수천 개로 늘어나면 느낌이 달라집니다. 검색 속도가 느려지고, 관련도 순 정렬도 어렵고, 검색 결과에서 어느 부분이 매칭됐는지 보여주기도 번거로워요. "검색"이라는 단어가 한 번 들어간 글과 본문 전체가 검색에 관한 글을 같은 수준으로 다루게 되는 것도 아쉽습니다. 이럴 때 SQLite만 쓰고

Drizzle ORM으로 타입 안전한 데이터베이스 다루기

Drizzle ORM으로 타입 안전한 데이터베이스 다루기

Prisma가 자체 스키마 언어와 코드 생성기를 통해 ORM의 새로운 기준을 만들었다면 Drizzle ORM은 다른 방향에서 출발합니다. "SQL을 알면 Drizzle도 안다(If you know SQL — you know Drizzle ORM)"가 공식 슬로건인데요. 스키마도 TypeScript, 쿼리도 TypeScript, 그리고 그 결과 타입도 TypeScript에서 자동으로 추론됩니다. 별도의 코드 생성 단계 없이요. 번들 크기도 가볍고 서버리스 환경에도 잘 맞아서 요즘 Cloudflare D1이나 Turso 같은 엣지 데이

Cloudflare D1으로 서버리스 데이터베이스 시작하기

Cloudflare D1으로 서버리스 데이터베이스 시작하기

Cloudflare Workers로 서버리스 API를 만들다 보면 결국 데이터를 어딘가에 저장해야 하는 순간이 옵니다. KV는 단순한 키-값 저장에는 좋지만 관계형 쿼리가 필요해지면 한계가 드러나죠. 그렇다고 외부 데이터베이스를 연결하면 엣지에서 실행되는 Workers의 속도 이점이 사라집니다. D1은 이 문제를 해결하기 위해 Cloudflare가 만든 서버리스 SQL 데이터베이스예요. SQLite를 기반으로 Workers에서 바인딩 하나로 바로 접근할 수 있고, 별도의 서버 관리나 연결 풀링 없이 SQL 쿼리를 실행할 수 있습니다

인덱스를 걸었는데 왜 안 탈까?

인덱스를 걸었는데 왜 안 탈까?

데이터베이스 인덱스는 어떻게 조회를 빠르게 만들까?에서 인덱스가 빠른 이유를, 복합 인덱스는 왜 컬럼 순서가 중요할까?에서 컬럼 순서 규칙을 확인했는데요. 그런데 실무에서 더 자주 마주치는 건 이런 상황입니다. 인덱스를 분명히 걸었고 컬럼 순서도 맞췄는데 쿼리가 여전히 느린 경우요. 인덱스는 만들어 두는 것만으로 일하지 않습니다. 쿼리를 어떻게 쓰느냐에 따라 멀쩡한 인덱스가 통째로 무시되기도 하거든요. 이번 글에서는 인덱스가 있는데도 안 타는 경우를 하나씩 재현해 보겠습니다. 실험 준비 실습 데이터는 지난 글에서 쓰던 50만 명짜리

복합 인덱스는 왜 컬럼 순서가 중요할까?

복합 인덱스는 왜 컬럼 순서가 중요할까?

데이터베이스 인덱스는 어떻게 조회를 빠르게 만들까?에서 이메일 하나로 회원을 찾을 때 22ms가 0.002ms로 줄어드는 걸 확인했는데요. 그런데 실무에서 만나는 쿼리는 조건이 하나뿐인 경우가 오히려 드뭅니다. "서울에 사는 30세 회원", "결제 완료된 이번 달 주문"처럼 조건 두세 개가 AND로 엮이는 게 보통이죠. 조건이 여러 개면 인덱스도 여러 개 걸면 될 것 같은데, 실제로는 컬럼을 하나로 묶은 복합 인덱스(composite index)를 만듭니다. 그리고 이때 컬럼을 어떤 순서로 묶느냐에 따라 결과가 크게 달라집니다. 같

데이터베이스 인덱스는 어떻게 조회를 빠르게 만들까?

데이터베이스 인덱스는 어떻게 조회를 빠르게 만들까?

조회가 느리다고 하면 일단 인덱스부터 걸어보게 되는데요. 그런데 막상 "인덱스를 걸면 왜 빨라지나요?"라는 질문을 받으면 말문이 막힙니다. "음... 책 뒤에 있는 색인 같은 거라서요?" 비유는 맞습니다. 다만 비유에서 멈추면 인덱스를 걸었는데도 안 빨라지는 상황을 만났을 때 손을 쓸 수가 없어요. 왜 빨라지는지를 알아야 왜 안 빨라지는지도 알 수 있으니까요. 이번 글에서는 50만 행짜리 데이터베이스를 직접 만들어놓고, 인덱스를 걸기 전과 후에 그 안에서 실제로 무슨 일이 벌어지는지 눈으로 확인해 보겠습니다. 실습은 SQLite로

자바스크립트에서 SQLite 데이터베이스 사용하기

자바스크립트에서 SQLite 데이터베이스 사용하기

이번 포스팅에서는 자바스크립트에서 경량화 데이터베이스 SQLite를 사용하는 기본적인 방법에 대해서 알아보겠습니다. 파이썬에서 SQLite 데이터베이스를 사용하는 방법에 대해서는 관련 게시물을 참고 바랍니다. SQLite란? SQLite는 전 세계에서 가장 많이 사용되는 경량화 데이터베이스입니다. 알게 모르게 우리가 쓰고 있는 대부분의 전자기기에서 SQLite가 사용되고 있기 때문이죠. SQLite는 다른 데이터베이스와는 달리 클라이언트와 서버 간에 데이터를 송수신하지 않고, 모든 데이터를 로컬 컴퓨터에 저장하는데요. SQLite는

[파이썬] sqlite3 모듈 사용법

[파이썬] sqlite3 모듈 사용법

파이썬에 기본적으로 내장되어 있는 데이터베이스인 sqlite3 모듈를 사용하는 방법에 대해서 알아보겠습니다. 자바스크립트에서 SQLite 데이터베이스를 사용하는 방법에 대해서는 관련 게시물을 참고 바랍니다. 데이터베이스 접속 sqlite3 내장 모듈을 임포트 후에 connect 메서드를 통해 커넥션 객체를 생성합니다. 메모리 DB 접속 (일회성) 파일 DB 접속 테이블 생성 커서 객체를 받아와서 execute 메서드로 CREATE TABLE 쿼리를 전송합니다. 데이터 삽입 마찬가지로 커서 객체로 작업합니다. 기본 String Que

Discord