AI에게 기억력을 부여했습니다. 모든 것이 바뀌었습니다.
요약
LLM의 컨텍스트 윈도우 한계를 극복하기 위해 로컬 환경에서 작동하는 RAG 기반 메모리 시스템 구축 방법을 소개합니다. Ollama, Chroma, Python을 활용하여 개인 문서와 코드베이스를 인덱싱하고 지속적인 작업 맥락을 유지하는 워크플로우를 제안합니다.
핵심 포인트
- LLM의 휘발성 컨텍스트 문제를 해결하기 위한 로컬 메모리 시스템 구축
- Ollama와 Chroma를 활용한 클라우드 없는 완전 로컬 RAG 스택 구성
- 프로젝트 문서, 코드 스니펫, 개인 노트를 포함한 효율적인 인덱싱 전략
- 설정 마찰을 최소화한 40줄 내외의 간단한 Python 스크립트 구현
AI에게 기억력을 부여했습니다. 모든 것이 바뀌었습니다.
매 세션마다 AI에게 제 코드베이스를 설명하는 것에 지쳤습니다.
"여기 아키텍처가 있습니다. 여기 README가 있습니다. 지난번에 시도했던 것과 왜 안 됐는지에 대한 내용입니다." 매.번. 그랬습니다.
6개월이 지난 후, 저는 제가 비서와 대화하고 있는 것이 아니라, 대화가 끝날 때마다 그만두고 완전한 기억상실증 상태로 돌아오는 새로운 인턴을 온보딩(onboarding)하고 있다는 사실을 깨달았습니다.
그래서 저는 메모리 시스템을 구축했습니다. 로컬(Local) 방식이며, 무료입니다. 그리고 솔직히 말해서, 제가 해온 AI 업그레이드 중 가장 유용한 단 하나의 업그레이드입니다.
아무도 말하지 않는 문제
LLM(Large Language Models)은 당신을 기억하지 못합니다. 당신의 프로젝트를 기억하지 못합니다. 당신이 지난주에 asyncio.gather를 시도했다가 데드락(deadlock)이 걸렸다는 사실도, 당신의 Garmin 워치 페이스가 엄격한 64KB 메모리 제한을 가지고 있다는 사실도, 혹은 당신이 항상 Telegram 봇의 속도 제한(rate limits) 처리 방식을 잊어버린다는 사실도 기억하지 못합니다.
그들이 가진 것은 컨텍스트 윈도우(context window)입니다. 이는 대화가 끝나면 지워지는 임시 메모장과 같습니다. 코딩 워크플로우(coding workflows)에서 이는 설계부터 잘못되었습니다. 당신은 단순히 채팅을 하는 것이 아닙니다. 당신은 몇 달에 걸쳐 이어지는 코드베이스 위에서 지속적인 작업을 수행하고 있는 것입니다.
저는 뻔한 해결책들을 시도해 보았습니다:
- 매번 거대한 컨텍스트 조각들을 붙여넣기. 토큰 제한(token limits)을 다 써버리고, 응답이 잘리는 현상이 발생했습니다.
- 텍스트 파일에 "프로젝트 브리프(project briefs)"를 작성해 두고 붙여넣기. 프로젝트가 10개가 될 때까지는 작동했습니다.
- 클라우드 메모리 기능 사용하기. 또 다른 구독료와 또 다른 개인정보 보호 문제가 발생할 때까지는 작동했습니다.
그 어떤 것도 제대로 된 느낌이 아니었습니다. 제가 원한 것은 간단했습니다. 설정 마찰(setup friction) 없이, 나의 자료에 대해 질문하고, 나의 문서에 기반한 답변을 얻는 것이었습니다.
설정: 실제로 로컬에서 실행되는 RAG
RAG(Retrieval-Augmented Generation, 검색 증강 생성)는 새로운 것이 아닙니다. 새로운 점은 임베딩 모델(embedding model), 벡터 데이터베이스(vector database), 그리고 LLM 전체 스택을 단 하나의 클라우드 API도 건드리지 않고 Mac Mini에서 실행할 수 있다는 것입니다.
제가 최종적으로 구축한 결과물은 다음과 같습니다:
내 문서 (markdown, 코드, 노트, PDF)
→ 약 400토큰 단위로 청킹(Chunked)
→ nomic-embed-text (Ollama)로 임베딩(Embedded)
...
전체 스택: Ollama + Chroma + 40줄짜리 Python 스크립트. Docker 없음. 클라우드 없음. API 키 없음.
실제로 인덱싱(Indexed)한 것들
인터넷 전체가 아닙니다. 제가 실제로 필요한 것들뿐입니다:
- 프로젝트 문서 (Project docs) — README, 아키텍처 결정 사항 (architecture decisions), API 명세서 (API specs)
- 내 노트 (My notes) — Obsidian 보관함 (vault), 메모장 (scratchpads), 디버깅 로그 (debugging logs)
- 코드 스니펫 (Code snippets) — 계속 재사용하는 함수들, 설정 템플릿 (config templates)
- 북마크된 해결책 (Bookmarked solutions) — 항상 까먹게 되는 Stack Overflow 답변들
- 배포 노트 (Deployment notes) — "VPS를 어떻게 설정했었지?"
총 약 4,800개의 청크 (chunks). 쿼리 시간 (Query time): Mac Mini에서 2초 미만, Windows PC의 RTX 3060을 통해 라우팅할 경우 500ms 미만.
코드 (부끄러울 정도로 간단합니다)
인덱싱 (Indexing):
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import DirectoryLoader
from langchain_community.embeddings import OllamaEmbeddings
...
쿼리 (Querying):
import ollama
def ask(question: str) -> str:
...
그게 전부입니다. LangChain 체인 (chains)도 없습니다. 에이전트 (agents)도 없습니다. 설정하는 데 박사 학위가 필요한 프레임워크 (frameworks)도 없습니다.
변화된 점
이전: "내 Garmin 워치 페이스가 주식 데이터를 어떻게 가져오지?" → 200줄의 코드를 붙여넣기 → 기다림 → 모델이 환각 (hallucinate)하지 않기를 기도함.
이후: ask("How does my Garmin watch face fetch stock data?") → "백그라운드 서비스에 64KB 메모리 제한이 있기 때문에, Background.exit()를 사용하여 티커(ticker)와 가격이 담긴 딕셔너리를 앱 측 뷰(app-side view)로 전달합니다." — 1.8초 만에. 정확함. 구체적임. 환각(hallucination) 제로.
이전: "크립토 봇의 속도 제한 (rate limit)이 뭐야?" → 파일들을 뒤지기 → 아무것도 못 찾음 → 추측함.
이후: "bot/utils.py의 throttle() 데코레이터 (decorator)에 의해 강제되는, 호출 간 1.5초의 쿨다운 (cooldown)을 포함한 초당 3회의 요청입니다." — 제 코드 주석에서 직접 가져옴.
AI는 온보딩 (onboarding)이 필요한 일반론자(generalist)에서, 이미 내 것을 알고 있는 전문가(specialist)가 되었습니다.
솔직한 단점들
솔직한 단점들
인덱싱 속도가 느립니다. Mac Mini CPU에서 4,800개의 청크(chunk)를 임베딩하는 데 약 20분이 걸립니다. RTX 3060에서는 약 4분입니다. 자주 하는 작업은 아니어서 저는 매시간 cron을 통해 증분 업데이트를 실행하지만, 첫 실행은 고통스럽습니다.
청킹(Chunking)은 예술입니다. 너무 작게 설정하면(100 토큰) 문맥을 잃고, 너무 크게 설정하면(1000 토큰) 검색 제한에 너무 빨리 도달합니다. 저는 너무 많은 시행착오 끝에 400 토큰 크기에 50 토큰의 오버랩(overlap)으로 결정했습니다.
검색 기능을 대체하지 못합니다.
기술적인 설정은 깔끔합니다. 하지만 진짜 변화는 정신적인 면에서 일어납니다.
이전에는 모든 AI 세션이 컨텍스트 구축(context-building)으로 시작되었습니다: "제가 작업 중인 내용은 이렇고, 시도해 본 것은 이것이며, 제약 사항은 다음과 같습니다." 이제 저는 그냥 질문만 합니다. 시스템이 이미 제 문서들을 읽었기 때문에 제약 사항을 이미 알고 있기 때문입니다.
이것은 컨설턴트에게 전화를 거는 것과, 회의에 참석했던 팀원에게 전화를 거는 것의 차이와 같습니다.
그 격차 — "질문에 답하는 AI"와 "당신의 업무를 아는 AI" 사이의 격차 — 는 제가 예상했던 것보다 더 큽니다. 그리고 이 격차를 좁히는 데 드는 비용은 정확히 0달러입니다.
Sam Hartley는 3대의 장비로 구성된 홈 랩(home lab)에서 로컬 AI 도구를 만드는 1인 개발자입니다. AI를 실제 업무에 정말 유용하게 만드는 인프라에 대해 글을 씁니다.
→ Fiverr의 커스텀 자동화 설정
→ Telegram에서 CelebiBots 팔로우하기
ai #rag #ollama #selfhosted #productivity #buildinginpublic
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기