SQLite
한 줄 정의
파일 하나가 통째로 데이터베이스인, 가장 가벼운 저장 창고
1. 비유로 이해하기
보통의 데이터베이스는 은행과 비슷하다. 건물이 따로 있고, 직원이 상주하고, 돈을 넣거나 빼려면 거기까지 가야 한다. 이걸 “서버가 필요하다”고 말한다.
SQLite는 책가방 속 저금통이다. 어디 갈 필요 없이 내 가방 안에 있고, 그냥 열어서 넣고 빼면 끝이다. 저금통 하나만 챙기면 돈도 같이 따라온다.
실제로 SQLite로 만든 데이터베이스는 todo.db 같은 파일 딱 하나다. 이 파일을 USB에 복사하면 데이터 전체가 복사된다.
2. 왜 필요한가
에이전트는 대화가 끝나면 머릿속이 하얘진다. 그래서 기억을 어딘가에 적어 둬야 한다. 그 첫 번째 집으로 가장 많이 쓰이는 게 SQLite다.
| 용도 | 설명 |
|---|---|
| 기억 저장 | 이전 대화, 사용자가 알려준 선호도를 표에 저장했다가 나중에 꺼내 쓴다 |
| 체크포인트 | “몇 번째 단계까지 진행했는지”를 저장한다. 중간에 멈춰도 이어서 실행할 수 있다 |
| 작업 기록 | 어떤 도구를 언제 썼고 결과가 뭐였는지 남긴다 |
| 에이전트가 다루는 도구 | “지난달 매출 뽑아줘” → 에이전트가 직접 질의문을 짜서 물어본다 |
마지막 용도가 특히 중요하다. 표 형태 데이터를 AI에게 통째로 던져 주면 토큰이 폭발하는데, SQLite에 넣어 두고 필요한 것만 물어보게 하면 훨씬 싸게 끝난다.
코드로 보면
import sqlite3
# 파일 하나를 만들면 그게 데이터베이스다 (없으면 자동 생성)
conn = sqlite3.connect("agent_memory.db")
# 표 만들기 — 스키마를 정하는 순간
conn.execute("""
CREATE TABLE IF NOT EXISTS memory (
id INTEGER PRIMARY KEY,
user TEXT,
fact TEXT
)
""")
# 기억 저장하기
conn.execute("INSERT INTO memory (user, fact) VALUES (?, ?)",
("민수", "고양이를 키운다"))
conn.commit()
# 나중에 꺼내오기
result = conn.execute(
"SELECT fact FROM memory WHERE user = ?", ("민수",)
).fetchall()
# → [('고양이를 키운다',)]
CREATE TABLE 부분이 스키마다. “이 표는 id, user, fact 세 칸이고 각각 이런 자료형이다”라고 미리 정하는 것이다.
좋은 점과 아쉬운 점
| 좋은 점 | 아쉬운 점 |
|---|---|
| 설치가 필요 없다 (파이썬에 기본 내장) | 여러 명이 동시에 쓰기엔 약하다 |
| 파일 하나라 복사와 이동이 쉽다 | 데이터가 아주 커지면 버겁다 |
| 빠르고 가볍다 | 여러 서버에 나눠 담기 어렵다 |
그래서 흐름은 대개 이렇다. 프로토타입이나 개인용 에이전트는 SQLite로 시작하고, 사용자가 늘어 동시 접속이 많아지면 PostgreSQL 같은 서버형으로 갈아탄다. 확장 기능을 붙이면 임베딩 기반 검색까지 SQLite 하나로 해결할 수도 있어서, 초기 단계에서는 이걸로 충분한 경우가 많다.
3. 어디서 만났나
6회차에서 무료 데이터베이스를 고르는 자리에 나왔다. “설치도 서버도 없다. DB 전체가 파일 하나다. 가장 가볍게 시작하기 좋다”로 소개됐고, 그 자리에서 Todo 앱을 로컬 SQLite 파일 하나(todo.db)로 만든 뒤 같은 앱을 Supabase로 옮겨 보는 과제로 이어졌다. 저금통으로 시작해서 은행으로 옮기는 연습이었던 셈이다.
6회차 — 데이터베이스, 서비스의 기억을 어디에 어떤 모양으로 둘까
4. 헷갈리는 개념
| 이 용어 | 비슷하지만 다른 것 | 차이 |
|---|---|---|
| SQLite | SQL | SQL은 언어, SQLite는 그 언어를 알아듣는 프로그램. 이름이 비슷해서 가장 많이 헷갈린다 |
| SQLite | MySQL · PostgreSQL | 같은 SQL 계열이지만 저쪽은 서버형이다. 따로 띄워 두고 접속해서 쓴다 |
| SQLite | Supabase | Supabase는 클라우드에 있는 PostgreSQL에 로그인·파일 저장·API까지 얹은 서비스. SQLite는 내 폴더 안의 파일 하나 |
| SQLite | 엑셀 파일 | 둘 다 파일 하나지만, 엑셀은 통째로 열어야 하고 SQLite는 필요한 줄만 골라서 꺼낼 수 있다 |
5. 많이들 오해하는 지점
ㄱ. “SQLite는 SQL의 가벼운 버전이다”
이름 때문에 생기는 가장 흔한 오해다. 둘은 종류가 다르다.
- SQL — 데이터베이스에게 말을 거는 언어
- SQLite — 그 언어를 알아듣는 프로그램 중 하나
“한국어”와 “한국어를 쓰는 사람”만큼 다르다. SQLite는 SQL을 줄인 게 아니라, SQL을 쓰는 작은 프로그램이다. 이름의 Lite는 언어가 아니라 프로그램이 가볍다는 뜻이다.
ㄴ. “장난감이라 진짜 서비스에는 못 쓴다”
아마 세상에서 가장 많이 설치된 데이터베이스일 것이다. 스마트폰 한 대 안에서도 수십 개가 돌아가고 있다. 한계는 작다가 아니라 여러 명이 동시에 쓰기다. 읽기만 많은 서비스라면 꽤 큰 규모까지도 버틴다.
ㄷ. “파일 하나니까 그냥 복사하면 백업이다”
대체로 맞지만 조건이 있다. 쓰는 중에 복사하면 깨질 수 있다. 절반쯤 쓰인 상태가 그대로 복사되기 때문이다. 안전하게 뜨려면 전용 명령을 쓴다.
sqlite3 agent_memory.db "VACUUM INTO 'backup.db'"
파일 하나라는 장점이 백업이 공짜라는 뜻은 아니라는 것. 6회차에서 백업을 따로 배운 이유이기도 하다.