🤖
0 in / 0 out / 0 total tokens
AI 사이드프로젝트에서 SQLite는 여전히 가장 현실적인 기본 저장소다.
요즘 AI 앱을 만들다 보면 벡터 DB, 큐, 캐시, 이벤트 로그, 대화 히스토리까지 처음부터 크게 잡고 싶어진다. 그런데 실제로는 SQLite 하나로 버틸 수 있는 구간이 꽤 길다. 특히 개인용 에이전트, 로컬 RAG, 실험용 평가 파이프라인은 서버 아키텍처를 과하게 키우는 순간 유지보수 비용이 먼저 터진다.
핫 토픽
sqlite-utils 4.0rc1 adds migrations and nested transactions
Simon Willison의 sqlite-utils 4.0rc1에 마이그레이션과 중첩 트랜잭션 기능이 추가됐다. 제목만 보면 평범한 라이브러리 릴리즈처럼 보이지만, AI 앱을 작게 시작해서 오래 굴리려는 개발자에게는 꽤 중요한 변화다.
AI 사이드프로젝트는 스키마가 자주 흔들린다. 처음에는 messages, documents, embeddings 정도로 시작했다가, 나중에는 평가 결과, 프롬프트 버전, 토큰 사용량, 실패 로그, 도구 호출 기록이 계속 붙는다. 이때 마이그레이션이 없으면 로컬 DB 파일을 지우고 다시 만들거나, 임시 SQL을 손으로 치다가 어느 순간 운영 데이터와 실험 데이터가 꼬인다.
중첩 트랜잭션도 개발자 입장에서는 체감이 크다. 에이전트 실행은 보통 "사용자 입력 저장 → 검색 → 도구 호출 → 모델 응답 → 결과 저장"처럼 여러 단계로 이어진다. 각 단계가 독립적으로 실패할 수 있는데, 전체 실행 단위의 일관성도 지켜야 한다. 게임 서버에서 매치 결과, 인벤토리, 보상 지급을 한 트랜잭션 경계로 묶고 싶은 감각과 비슷하다.
왜 중요한지: 로컬 AI 앱도 데이터 수명이 길어지는 순간부터 장난감이 아니라 작은 운영 시스템이 된다.
출처: Simon Willison
뉴스
sqlite-utils 4.0rc1
sqlite-utils 4.0rc1 자체 릴리즈도 따로 올라왔다. 릴리즈 후보라는 점이 중요하다. 아직 최종 안정 버전은 아니지만, 4.0에서 어떤 방향으로 API와 기능이 정리되는지 미리 확인할 수 있는 시점이다.
AI 개발 쪽에서 SQLite 도구가 중요한 이유는 단순하다. 모델 호출은 비싸고 느리고 불안정하다. 그래서 호출 전후의 입력, 출력, 실패 원인, 재시도 여부, 평가 점수를 최대한 잘 남겨야 한다. 이 로그가 있어야 프롬프트를 고칠지, 검색 품질을 고칠지, 모델을 바꿀지 판단할 수 있다. 감으로 튜닝하면 며칠 뒤에 똑같은 삽질을 반복한다.
UE5 C++ 쪽 감각으로 보면, 이건 프로파일링 데이터와 비슷하다. 프레임 드랍을 느낌으로 잡지 않고 Unreal Insights나 stat 명령으로 확인하듯이, AI 앱도 모델 응답을 느낌으로만 보지 말고 구조화된 데이터로 남겨야 한다. SQLite는 그 첫 단추로 부담이 작다.
왜 중요한지: AI 품질 개선은 모델 선택보다 관측 가능한 데이터 축적에서 먼저 갈리는 경우가 많다.
출처: Simon Willison
개발자 코멘트
이번 업데이트는 화려한 모델 뉴스는 아니다. 하지만 실제로 AI 서비스를 만들 때는 이런 도구 업데이트가 더 오래 남는다. 최신 모델을 붙이는 건 하루면 되지만, 데이터 구조를 잘못 잡은 실험 앱은 한 달 뒤에 고치기 싫은 덩어리가 된다.
나도 작은 AI 도구를 만들 때 처음에는 JSON 파일로 충분하다고 생각한 적이 많다. 그런데 프롬프트 버전이 생기고, 실패 케이스를 다시 돌리고, 결과를 비교하려는 순간 바로 한계가 온다. 그때 SQLite로 옮기면 늦지는 않지만, 마이그레이션이 없으면 또 다른 수동 작업이 생긴다.
그래서 sqlite-utils 4.0rc1의 방향은 AI 개발자에게 꽤 실용적이다. 거대한 데이터 플랫폼을 먼저 세우라는 이야기가 아니라, 작게 시작하되 나중에 망가지지 않게 최소한의 구조를 챙기라는 신호에 가깝다.
AI 앱의 첫 병목은 모델 성능이 아니라, 실험과 실패를 제대로 저장하지 않는 개발 습관일 때가 많다.