[도발] 200달러짜리 AI 연구원을 내 맥북 깡통에 욱여넣기: Local Deep Research의 민낯과 아키텍처 해부학
Metadata: Essential Resources & Repositories
- LearningCircuit/local-deep-research: 100% 로컬 환경에서 동작하는 Agentic 리서치 프레임워크
- langchain-ai/local-deep-researcher: IterDRAG 기반의 LangGraph 공식 레퍼런스 구현체
- as2811-project/local-deep-research: Jupyter 기반의 경량화된 로컬 Deep Research 실험체
- Tech Stack: Ollama, SearXNG, LangGraph, HyDe, Firecrawl
1. The Hook: 보안팀의 결재 서류, 그리고 API Rate Limit의 늪
솔직히 까놓고 얘기해 봅시다. OpenAI가 Deep Research를 발표했을 때, 혹은 Gemini 2.0의 그라운딩(Grounding) 기반 심층 연구 기능을 처음 써봤을 때 다들 감탄하셨을 겁니다. 저 역시 “이제 진짜 스택오버플로우와 구글링 탭 50개 띄워놓는 짓은 끝났네” 싶었죠. 하지만 우리 현업의 현실은 그렇게 낭만적이지 않습니다.
당장 내일 아침까지 사내 레거시 결제 모듈의 트랜잭션 병목 원인을 외부 최신 논문과 사내 JIRA 티켓을 교차 검증해서 아키텍처 개선 리포트로 써야 합니다. 그런데 사내 보안 정책(DLP) 때문에 회사 코드를 OpenAI API로 한 줄도 쏠 수가 없죠. 결국 보안팀 결재를 피하려고 개인 랩탑에서 구글링을 전전하며 밤을 새우게 됩니다. 운 좋게 쓸 수 있다 해도, 클라우드 API 호출 한도는 또 왜 이리 빨리 닳아 없어지는지, 월초에 결제한 200달러짜리 한도가 3일 만에 바닥나는 걸 보면 헛웃음이 나옵니다.
이런 답답함 속에서 최근 깃허브 트렌딩을 조용히, 그러나 무섭게 장악하고 있는 놈들이 있습니다. 바로 Local Deep Research(LDR) 프로젝트들입니다. “그냥 Ollama에 로컬 LLM 띄워서 RAG 돌리는 거 아냐?”라고 생각하셨다면 완벽한 오산입니다. 이건 단순한 검색 증강이 아닙니다. 모델이 스스로 ‘내가 무엇을 모르는가’를 반추(Reflection)하고, 꼬리에 꼬리를 무는 자율적 탐색 루프를 로컬에서 돈 한 푼 내지 않고 돌려버리는 괴물입니다. 오늘, 이 괴물의 배를 갈라 내부 아키텍처를 밑바닥까지 뜯어보겠습니다.
2. TL;DR: 본질은 ‘단발성 질의’가 아닌 ‘자율적 루프(Autonomous Loop)’다
Local Deep Research는 기존의 수동적 RAG 시스템을 넘어, LangGraph 기반의 상태 머신(State Machine)을 통해 로컬 LLM이 스스로 검색, 스크래핑, 요약, 지식 공백(Knowledge Gap) 인식, 그리고 재검색의 사이클을 목표가 달성될 때까지 무한 반복하게 만드는 프라이빗 에이전틱(Agentic) 워크플로우의 완성형입니다.
3. Deep Dive: Under the Hood (내부에서는 대체 무슨 일이 벌어지는가?)
단순 파이프라인과 이 녀석의 아키텍처적 차이를 뜯어볼까요? 기존 RAG는 유저의 질문을 임베딩해서 Vector DB에서 비슷한 문서를 가져오고 끝입니다. 1차원적이고 수동적이죠. 반면 Local Deep Research는 IterDRAG 논문의 접근법에 강한 영감을 받아, 상태 기반 다중 에이전트 아키텍처(Stateful Multi-Agent Architecture)를 차용합니다.
| 아키텍처 요소 | 기존 RAG (Retrieval-Augmented Gen) | Local Deep Research (Agentic Loop) |
|---|---|---|
| 작동 패러다임 | 단방향 파이프라인 (Retrieve -> Generate) | 순환형 에이전트 루프 (Plan -> Search -> Reflect -> Repeat) |
| 검색 횟수 | 1회 (Top-K 문서 반환으로 종료) | 다수 (목표를 달성하거나 설정된 Iteration 제한에 도달할 때까지) |
| 맥락 이해 & 검색 질 향상 | 유저의 초기 프롬프트에 전적으로 의존 | HyDe(Hypothetical Document Embeddings) 및 자가 교정(Self-correction) 적극 활용 |
| 데이터 수집 소스 | 정적 Vector DB 내 문서 중심 | SearXNG(메타 검색엔진), ArXiv, PubMed, 사내 PDF 동시 동적 스크래핑 |
| 보안 및 운용 비용 | 클라우드 API 사용 시 토큰 비용 폭발, 데이터 유출 | Ollama / vLLM 기반 100% 로컬 구동 (비용 $0, 완벽한 에어갭 보안) |
특히 이 시스템의 핵심 엔진은 ‘Reflection(반추) 노드’에 있습니다. LLM이 1차 검색 결과를 요약한 뒤, 반드시 스스로에게 부족한 점을 묻도록 프로그래밍되어 있습니다. 아래는 Local Deep Research의 동작 과정을 보여주는 전형적인 LangGraph 상태(State) 객체의 JSON 예시입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"query": "Kafka를 활용한 분산 트랜잭션 보상(Saga) 패턴의 최신 사례",
"plan": ["Kafka 트랜잭션 개요", "Saga 패턴의 Choreography vs Orchestration", "2025년 이후 아키텍처 사례"],
"collected_info": ["... (Choreography 패턴의 기본 정의 수집 완료) ..."],
"knowledge_gaps": [
"현재 수집된 문서에는 Choreography 패턴 시 Dead Letter Queue(DLQ) 처리에 대한 구체적인 코드 레벨의 구현 사례가 누락됨."
],
"next_search_queries": [
"Kafka Saga pattern Dead Letter Queue implementation github",
"Kafka DLQ error handling choreography pattern code example"
],
"iteration_count": 2
}
위 JSON 상태를 보시면 아시겠지만, 시스템은 knowledge_gaps를 스스로 찾아내고 이를 메우기 위해 next_search_queries를 생성합니다.
코드 레벨로 더 깊이 들어가 볼까요? 이 과정에서 무턱대고 긁어온 수십 개의 웹페이지 HTML을 LLM의 컨텍스트에 밀어 넣으면 로컬 환경 특성상 바로 OOM(Out of Memory)이 나거나 성능이 폭락합니다. 이를 해결하기 위해 고급 LDR 구현체들은 텍스트를 청크 단위로 자른 뒤, 비지도 학습 기반의 토픽 디스커버리(PCA/KMeans)를 돌려 현재 서브 쿼리와 가장 연관성 높은 ‘엑기스 텍스트’만 군집화하여 LLM에 주입합니다. 동시에 백그라운드에서는 메타 검색엔진인 SearXNG를 로컬 Docker로 띄워 Google, DuckDuckGo 검색을 API 제한 없이 병렬로 수행하며 리서치 속도를 극한으로 끌어올립니다.
4. Pragmatic Use Cases: 현업 시니어의 딥다이브 시나리오
“그래서 이걸로 Hello World 말고 뭘 할 수 있는데?” 라고 물으신다면, 현업 실무자가 당장 써먹을 수 있는 아주 매운맛 시나리오 두 가지를 제안합니다.
시나리오 A: 망분리 환경에서의 레거시 아키텍처 역공학 및 최신화 (RAG + LDR) 대기업 금융권이나 의료 도메인에 계신 분들이라면 공감하실 겁니다. 망분리 때문에 GitHub Copilot조차 제한적으로 쓰죠. 이때 LDR을 사내 로컬 서버에 구축합니다. 로컬 Vector DB에 10년 치 사내 아키텍처 문서와 JIRA 티켓을 전부 밀어 넣고, 외부망과 제한적으로 통신하는 SearXNG 전용 프록시만 열어둡니다. 그리고 프롬프트를 던집니다: “우리 사내 결제 시스템(Vector DB 참조)의 A 모듈이 가진 동시성 문제를 해결하기 위해, 최근 3년간 ArXiv에 올라온 분산 데이터베이스 논문을 검색해서 비교 분석 리포트를 작성해 줘.” 로컬 LLM은 사내 문서를 읽고 병목 지점을 파악한 뒤, 자체적으로 “Distributed Database concurrency control 2024” 같은 검색어를 만들어 냅니다. 이후 SearXNG로 외부 논문을 긁어와 사내 코드와 엮어 20페이지짜리 완벽한 마크다운 리포트를 토해냅니다. 데이터 유출은 단 1바이트도 없습니다.
시나리오 B: 다중 LLM 앙상블을 통한 비용 제로 최적화 GPU VRAM이 부족하시다고요? LDR 프레임워크들은 LangGraph의 각 노드별로 다른 LLM을 할당할 수 있습니다. 수십 번의 웹 스크래핑 텍스트에서 ‘정보의 유무’만 빠르게 판단하고 검색어를 생성하는 노드에는 속도가 미친 듯이 빠른 로컬 Gemma 3 (4B/12B)나 Mistral 7B를 배치합니다. 그리고 최종적으로 이 파편화된 정보들을 엮어서 우아한 종합 리포트를 작성하는 Reflection 및 Synthesis 노드에는 성능이 압도적인 DeepSeek R1 (32B/70B) 양자화 버전을 배치하는 식입니다. 이렇게 이기종 앙상블을 구성하면 24GB VRAM을 가진 로컬 PC 하나로도 엔터프라이즈급 리서처를 가동할 수 있습니다.
5. Honest Review & Trade-offs: 낭만 뒤에 숨겨진 차가운 현실
하지만 산전수전 다 겪은 시니어의 눈으로 봤을 때 무조건 이 기술을 찬양할 수만은 없습니다. 당장 내일 도입을 고려하신다면 다음의 피눈물 나는 트레이드오프를 반드시 각오하셔야 합니다.
- The “Small Model” Trap (환각의 늪): 로컬 랩탑에서 간신히 돌아가는 8B 이하의 모델들(예: Phi-3 3.8B, Llama-3 8B 등)로 딥 리서치를 돌리면 참담한 결과를 마주하게 됩니다. 에이전트 루프가 3~4번만 넘어가도 모델이 자신이 왜 이 검색을 하고 있는지 지시사항(Instructions)을 완전히 잊어버리거나, 엉뚱한 문서를 긁어오며 무한 루프에 빠집니다. 실제로 14B급 이상의 파라미터를 가진 모델(예: Phi-4)이나, 인지 능력이 뛰어난 32B 이상의 모델을 돌릴 수 있는 넉넉한 하드웨어(RAM 64GB 이상의 Mac 또는 다중 GPU)가 필수적입니다.
- 가혹한 스크래핑 환경 (Cloudflare의 철퇴): 로컬에서 검색 루프를 미친 듯이 돌리면 어떻게 될까요? 네, 타겟 웹사이트의 Cloudflare나 DDoS 방어 솔루션이 여러분의 로컬 IP를 봇으로 간주하고 칼같이 차단합니다. LDR을 프로덕션 레벨에서 제대로 쓰려면 로컬 SearXNG 뒤에 다시 고품질 프록시 풀(Proxy Pool)을 붙이거나, Firecrawl 같은 유료 스크래핑 API를 결국 혼용해야 하는 딜레마에 빠집니다. ‘완전 무료’라는 꿈은 인터넷의 현실 앞에 어느 정도 타협이 필요합니다.
- 비동기 인내심 테스트: 클라우드에서 도는 ChatGPT Deep Research의 실시간 렌더링 속도를 기대하시면 안 됩니다. 복잡한 주제의 경우, 로컬에서 5번 이상의 루프를 돌며 병렬 검색을 수행해 20페이지짜리 리포트를 쓰는 데 짧게는 15분에서 길게는 1시간까지 걸립니다. 이건 ‘초고속 검색 엔진’이 아니라, 내 컴퓨터 안에서 혼자 끙끙대며 일하는 ‘주니어 연구원’을 백그라운드에 밤새 돌려놓는다는 마인드로 접근해야 정신 건강에 이롭습니다.
6. Closing Thoughts: 우리는 왜 다시 로컬로 회귀하는가?
IT 기술의 발전은 늘 진자와 같습니다. 모든 것이 무거운 클라우드로 올라갔다가, 컴퓨팅 파워가 임계점을 넘으면 다시 모든 것이 엣지(Edge)와 로컬로 내려오는 시기가 반복되죠. Local Deep Research는 AI 에이전트가 그 반환점을 찍는 매우 중요한 이정표입니다.
거대 IT 기업들이 정해놓은 정제된 샌드박스와 빡빡한 API 과금 체계 안에서만 얌전히 놀 것인지, 아니면 약간의 덜컹거림과 버그, 그리고 하드웨어의 발열을 감수하더라도 내 데이터, 내 하드웨어, 내 규칙으로 움직이는 ‘주권(Sovereign) 있는 완전한 AI 연구원’을 가질 것인지. 그 선택은 온전히 여러분의 몫입니다.
오늘 밤, 쓰지도 않고 방치해둔 남는 데스크탑이나 서버에 Docker와 Ollama를 깔고 이 녀석을 한번 무심코 돌려보시길 권합니다. 시커먼 터미널 창에서 스스로 검색어를 수정해가며 고군분투하는 에이전트의 로그 스크롤을 멍하니 보고 있자면, 단순한 코드가 아니라 묘한 기특함마저 느껴질 겁니다. 진짜 혁신은 항상 이렇게, 누군가의 어두운 로컬 터미널 창에서 시작되니까요.
References
- https://github.com/LearningCircuit/local-deep-research
- https://github.com/langchain-ai/local-deep-researcher
- https://github.com/VladPrytula/DeepResearchHybrid
- https://github.com/as2811-project/local-deep-research
