🤖
1209 in / 2351 out / 3560 total tokens
🔥 핫 토픽
Simon Willison의 sqlite-AGENTS.md: LLM 에이전트와 SQLite의 만남
Simon Willison이 SQLite를 LLM 에이전트의 컨텍스트 저장소로 활용하는 패턴을 정리한 글이 화제다. 핵심은 간단하다. LLM 에이전트가 작업을 수행하면서 생성하는 모든 중간 결과, 결정 내역, 외부 API 호출 결과를 SQLite에 저장하고, 필요할 때 SQL 쿼리로 가져와서 컨텍스트를 구성하는 방식이다. 이게 왜 혁신적이냐면, 기존에는 에이전트의 "기억"을 관리하기 위해 벡터 데이터베이스나 복잡한 메모리 시스템을 구축해야 했는데, SQLite 하나로 대부분의 문제가 해결된다는 거다.
게임 개발자 입장에서 이건 은근히 친숙한 패턴이다. UE5에서 게임 세이브 데이터를 관리할 때 복잡한 직렬화 시스템 대신 SQLite를 백엔드로 쓰는 경우가 많다. 아이템 인벤토리, 퀘스트 진행 상태, NPC 대화 기록 같은 게임 상태를 구조화된 쿼리로 검색하고 필터링할 수 있으니까. Simon이 제안하는 방식도 본질적으로 같다. 에이전트의 "게임 상태"를 SQLite에 저장하고, SQL로 필요한 "세이브 데이터"를 불러와서 다음 행동을 결정하는 구조다.
특히 주목할 점은 AGENTS.md라는 파일 포맷이다. 이건 에이전트에게 "네가 어떤 DB 스키마를 쓰고, 어떤 테이블에 어떤 데이터를 저장해야 하는지"를 알려주는 일종의 설계도 역할을 한다. 마치 UE5에서 UCLASS 매크로로 액터의 프로퍼티를 정의하는 것과 비슷하다. 스키마가 명확하니까 에이전트가 데이터를 넣고 빼는 실수가 줄어들고, 디버깅도 쿼리 하나면 된다. 개인적으로 AI 사이드 프로젝트 할 때 가장 골치 아팠던 게 에이전트가 맥락을 잃어버리는 문제였는데, 이 접근법이 꽤 우아한 해결책 같다.
실무적인 영향도 크다. Claude 같은 LLM API를 호출할 때 토큰 비용은 컨텍스트 길이에 비례한다. 모든 대화 기록을 매번 보내면 비용이 폭발하는데, SQLite에 저장된 요약본이나 핵심 데이터만 SELECT해서 보내면 토큰 사용량을 극적으로 줄일 수 있다. 서버 아키텍처 관점에서도 매력적이다. Redis나 PostgreSQL 같은 외부 의존성 없이 파일 하나로 되니까, 에이전트 배포가 단순해진다. Docker 이미지 하나에 SQLite 파일만 볼륨 마운트하면 끝이다.
물론 한계도 있다. 동시 쓰기 문제라든가, 대규모 에이전트 클러스터에서 SQLite 파일 동기화 문제 같은 건 여전히 남아있다. 하지만 Simon이 강조하듯, 90%의 에이전트 사용 사례는 싱글 인스턴스나 소규모 병렬 실행이니까 실용적으로는 충분하다. 완벽한 분산 시스템을 설계하는 것보다, SQLite로 빠르게 프로토타입을 만들고 필요할 때만 PostgreSQL로 마이그레이션하는 접근이 더 현명해 보인다.
출처: Simon Willison - sqlite-AGENTS.md
이 패턴이 특히 Claude와 잘 맞는 이유가 있다. Claude는 긴 컨텍스트 처리에 강점이 있지만, 그렇다고 해서 무한정 넣을 수 있는 건 아니다. 200K 토큰도 금방 찬다. SQLite를 중간에 두면 Claude에게 "이건 컨텍스트에 넣고, 이건 DB에만 저장해"라고 지시하는 체계가 잡힌다. AGENTS.md 파일에 이 규칙을 명시해두면, Claude가 스스로 판단해서 데이터를 분산 저장하는 에이전트를 만들 수 있다. 이건 단순한 팁이 아니라 에이전트 아키텍처의 패러다임 전환에 가깝다.
"에이전트의 기억은 벡터 DB가 아니라 SQLite가 해결한다. SQL은 이미 충분히 좋은 의미 검색 언어다."