AICosmus

Where tech meets the everyday — AI, fintech, swimming, and cars.
Close-up view of colorful programming code on a screen, ideal for tech and development themes.

RAG 입문 – AI에게 내 문서를 학습시켜 맞춤 비서 만드는 법

RAG 입문 – AI에게 내 문서를 학습시켜 맞춤 비서 만드는 법

내 자료를 아는 AI, RAG로 만들 수 있습니다

ChatGPT나 Claude 같은 AI 챗봇을 쓰다 보면 한 가지 아쉬운 점을 느끼게 됩니다. 아무리 똑똑해도 내가 가진 자료는 모른다는 것이죠. 회사 내부 문서, 개인 메모, 논문 PDF, 계약서 등 나만의 자료에 대해 질문하면 엉뚱한 답변을 하거나 ‘해당 정보가 없다’고 말합니다.

이 문제를 해결하는 기술이 바로 RAG(Retrieval-Augmented Generation, 검색 증강 생성)입니다. RAG는 AI가 답변을 생성하기 전에 먼저 관련 문서를 검색하고, 그 내용을 바탕으로 답변하도록 만드는 기술입니다. 쉽게 말해, AI에게 ‘오픈북 시험’을 치르게 하는 것과 같습니다.

2026년 현재, RAG는 더 이상 대기업이나 전문 개발자만의 기술이 아닙니다. 무료 오픈소스 도구들이 충분히 성숙해져서 일반 사용자도 자신만의 AI 지식 비서를 구축할 수 있게 되었습니다. 이 글에서는 RAG의 개념부터 실제로 내 PC에서 구축하는 방법까지, 초보자도 따라 할 수 있도록 단계별로 안내해 드리겠습니다.

RAG란 무엇이고 왜 필요한가

기존 AI의 한계: 학습 데이터의 벽

일반적인 대형 언어모델(LLM)은 훈련 과정에서 학습한 데이터만을 기반으로 답변합니다. 이로 인해 몇 가지 근본적인 한계가 있습니다.

  • 지식 단절(Knowledge Cutoff): 학습 시점 이후의 정보는 알지 못합니다. 2026년 4월 최신 뉴스나 법령 개정 사항을 물어보면 정확한 답을 기대하기 어렵습니다.
  • 개인·조직 정보 부재: 내 회사의 사내 규정, 프로젝트 문서, 개인 일기 등 공개되지 않은 정보는 전혀 알 수 없습니다.
  • 환각(Hallucination): 모르는 내용도 그럴듯하게 지어내는 현상이 있습니다. 특히 구체적인 수치나 날짜를 물어볼 때 잘못된 정보를 자신 있게 말하는 경우가 많습니다.

RAG의 핵심 원리

RAG는 이런 한계를 우회하는 매우 실용적인 접근법입니다. 작동 원리를 간단히 정리하면 다음과 같습니다.

  • 1단계 – 문서 준비(Indexing): 내 문서들을 작은 조각(chunk)으로 나누고, 각 조각을 숫자 벡터(임베딩)로 변환하여 벡터 데이터베이스에 저장합니다.
  • 2단계 – 검색(Retrieval): 사용자가 질문하면, 질문도 벡터로 변환한 뒤 가장 관련성 높은 문서 조각들을 데이터베이스에서 찾아옵니다.
  • 3단계 – 생성(Generation): 검색된 문서 조각들을 AI의 프롬프트에 함께 넣어주면, AI가 해당 자료를 참고하여 정확한 답변을 생성합니다.

핵심은 AI 모델 자체를 재훈련(파인튜닝)하지 않고, 필요할 때마다 관련 정보를 찾아서 제공한다는 점입니다. 마치 도서관 사서가 질문에 맞는 책을 찾아서 펼쳐주면, 독자가 그 내용을 읽고 답하는 것과 비슷합니다.

RAG vs 파인튜닝, 어떤 차이가 있을까

AI를 맞춤화하는 방법으로 파인튜닝도 많이 언급됩니다. 두 방법의 차이를 정리해 보겠습니다.

  • 파인튜닝: 모델 자체를 추가 데이터로 재훈련합니다. 비용이 높고 시간이 오래 걸리며, 데이터가 바뀔 때마다 다시 훈련해야 합니다. 모델의 전반적인 톤이나 스타일을 바꾸는 데 적합합니다.
  • RAG: 모델은 그대로 두고 외부 지식을 연결합니다. 비용이 낮고, 문서를 추가하거나 수정하기 쉽습니다. 최신 정보나 자주 바뀌는 데이터를 다루는 데 적합합니다.

대부분의 개인 사용 시나리오에서는 RAG가 훨씬 실용적입니다. 내 메모가 늘어나면 단순히 벡터 DB에 새 문서를 추가하면 되니까요.

RAG 시스템 구축에 필요한 핵심 구성요소

임베딩 모델: 텍스트를 숫자로 바꾸는 번역기

RAG의 첫 번째 핵심 요소는 임베딩 모델(Embedding Model)입니다. 임베딩이란 텍스트를 수백~수천 차원의 숫자 벡터로 변환하는 과정입니다. 의미가 비슷한 문장은 비슷한 벡터 값을 가지게 되어, 나중에 ‘의미 기반 검색’이 가능해집니다.

예를 들어 ‘강아지 산책 시키는 법’과 ‘반려견 외출 방법’은 단어는 다르지만 의미가 비슷하므로, 임베딩 벡터도 서로 가까운 위치에 놓이게 됩니다. 이것이 키워드 검색과 벡터 검색의 근본적인 차이입니다.

인기 있는 임베딩 모델은 다음과 같습니다.

  • OpenAI text-embedding-3-small: 가성비가 좋고 성능이 안정적입니다. API 호출 방식이라 인터넷 연결이 필요합니다.
  • BGE-M3: 다국어를 매우 잘 지원하며, 한국어 임베딩 성능이 우수합니다. 로컬에서 실행할 수 있어 개인정보 보호에 유리합니다.
  • nomic-embed-text: Ollama에서 바로 사용할 수 있어 설치가 간편합니다. 영어 중심이지만 한국어도 꽤 잘 처리합니다.

한국어 문서를 주로 다룬다면 BGE-M3이나 multilingual-e5-large를 추천합니다. Ollama를 이미 사용 중이라면 nomic-embed-text가 가장 간편한 선택입니다.

벡터 데이터베이스: 임베딩을 저장하고 검색하는 창고

임베딩으로 변환된 벡터들을 저장하고, 질문이 들어왔을 때 가장 유사한 벡터를 빠르게 찾아주는 것이 벡터 데이터베이스(Vector Database)의 역할입니다.

  • ChromaDB: Python 기반으로 설치가 매우 쉽고, 소규모 프로젝트에 딱 적합합니다. pip 한 줄이면 설치 끝입니다.
  • FAISS: Meta(구 Facebook)에서 만든 벡터 검색 라이브러리입니다. 대규모 데이터에서 빠른 검색이 필요할 때 좋습니다.
  • Qdrant: 필터링 기능이 강력하고 REST API를 제공해서 다양한 환경에서 연동하기 좋습니다.
  • Weaviate: 하이브리드 검색(벡터+키워드)을 기본 지원하며, 클라우드 호스팅도 가능합니다.

개인 용도로 시작한다면 ChromaDB가 가장 진입장벽이 낮습니다. 문서가 수만 건 이상으로 늘어나면 Qdrant나 Weaviate로 전환하는 것을 고려하면 됩니다.

LLM: 검색된 정보를 바탕으로 답변하는 두뇌

검색된 문서 조각과 사용자 질문을 받아서 최종 답변을 생성하는 것은 LLM의 역할입니다. 로컬에서 실행하느냐, 클라우드 API를 사용하느냐에 따라 선택지가 달라집니다.

  • 로컬 LLM (Ollama 활용): Llama 3, Gemma 2, Mistral 등을 내 PC에서 실행합니다. 개인정보가 외부로 나가지 않아 보안에 유리합니다. 다만 GPU 사양에 따라 응답 속도가 다릅니다.
  • 클라우드 API: OpenAI GPT-4o, Anthropic Claude, Google Gemini 등을 API로 호출합니다. 응답 품질이 높고 빠르지만 사용량에 따른 비용이 발생합니다.

민감한 개인 문서를 다룬다면 로컬 LLM을, 빠르고 정확한 답변이 중요하다면 클라우드 API를 추천합니다. 최근에는 Llama 3 8B 모델도 일반 PC에서 충분히 실행 가능한 수준이 되었으므로, 로컬 환경에서 시작해보는 것도 좋은 선택입니다.

실전: 내 PC에서 RAG 시스템 직접 구축하기

방법 1: AnythingLLM으로 5분 만에 시작하기 (초보자 추천)

코딩 없이 RAG를 체험하고 싶다면 AnythingLLM이 최적의 선택입니다. 데스크톱 앱 하나로 문서 업로드, 임베딩, 벡터 DB, 챗봇까지 모든 것이 통합되어 있습니다.

설치 및 설정 과정:

  • AnythingLLM 공식 사이트에서 Windows/Mac/Linux용 설치 파일을 다운로드합니다.
  • 설치 후 실행하면 초기 설정 마법사가 나타납니다. LLM 선택 화면에서 Ollama(로컬)나 OpenAI(클라우드) 중 원하는 것을 선택합니다.
  • 임베딩 모델도 같은 방식으로 선택합니다. Ollama를 사용 중이라면 nomic-embed-text를 추천합니다.
  • 벡터 데이터베이스는 기본 내장된 LanceDB를 그대로 사용하면 됩니다.

문서 업로드 및 질문하기:

  • 왼쪽 메뉴에서 새 워크스페이스(Workspace)를 만듭니다. 예를 들어 ‘업무 매뉴얼’이라고 이름을 붙입니다.
  • 워크스페이스 설정에서 문서 업로드 버튼을 클릭하고, PDF, TXT, DOCX, MD 등의 파일을 드래그 앤 드롭합니다.
  • 업로드가 완료되면 자동으로 청킹(문서 분할)과 임베딩이 진행됩니다. 파일 크기에 따라 수초에서 수분 정도 걸립니다.
  • 채팅 화면에서 질문을 입력하면, 업로드한 문서 내용을 기반으로 AI가 답변합니다. 답변 아래에는 어떤 문서에서 정보를 가져왔는지 출처도 함께 표시됩니다.

AnythingLLM의 가장 큰 장점은 모든 데이터가 내 PC에서만 처리된다는 점입니다. 회사 기밀 문서나 개인 일기를 올려도 외부로 유출될 걱정이 없습니다.

방법 2: Python + LangChain으로 직접 만들기 (개발자 추천)

더 세밀한 제어가 필요하거나 커스터마이징을 원한다면 Python과 LangChain 프레임워크를 사용해 직접 구축할 수 있습니다. 아래는 최소한의 코드로 RAG 시스템을 만드는 예시입니다.

환경 준비:

먼저 필요한 패키지를 설치합니다. 터미널에서 다음 명령을 실행합니다.

pip install langchain langchain-community chromadb sentence-transformers

Ollama가 설치되어 있다면 임베딩 모델도 받아둡니다.

ollama pull nomic-embed-text

문서 로드 및 분할:

LangChain의 문서 로더를 사용하면 다양한 형식의 파일을 쉽게 불러올 수 있습니다. PDF라면 PyPDFLoader, 텍스트 파일이라면 TextLoader를 사용합니다. 문서를 불러온 후에는 RecursiveCharacterTextSplitter로 적절한 크기의 조각으로 나눕니다.

청크 크기(chunk_size)는 보통 500~1000자 사이가 적당합니다. 너무 작으면 맥락이 끊기고, 너무 크면 검색 정확도가 떨어집니다. 문서의 성격에 따라 조절해 보세요. 겹침(chunk_overlap)은 청크 크기의 10~20% 정도로 설정하면 조각 사이의 문맥 손실을 줄일 수 있습니다.

벡터 저장소 생성:

분할된 문서 조각들을 임베딩하여 ChromaDB에 저장합니다. LangChain에서는 Chroma.from_documents() 한 줄이면 임베딩 생성과 저장이 동시에 이루어집니다. persist_directory를 지정하면 프로그램을 종료해도 데이터가 유지됩니다.

질의응답 체인 구성:

RetrievalQA 체인을 구성하면, 질문 입력 시 자동으로 관련 문서를 검색하고 LLM에게 전달하여 답변을 생성합니다. retriever의 search_kwargs에서 k 값을 조절하면 참조할 문서 조각의 수를 정할 수 있습니다. 보통 k=3~5가 적당합니다.

이 방식의 장점은 각 단계를 원하는 대로 교체하고 조합할 수 있다는 것입니다. 임베딩 모델만 바꾸거나, 검색 방식을 하이브리드로 변경하거나, 프롬프트 템플릿을 세밀하게 조정할 수 있습니다.

방법 3: Open WebUI + Ollama 조합 (웹 인터페이스 선호자 추천)

Open WebUI는 Ollama와 연동되는 오픈소스 웹 인터페이스로, RAG 기능이 기본 내장되어 있습니다. ChatGPT와 비슷한 깔끔한 UI에서 문서를 업로드하고 대화할 수 있어, 기술적 배경이 없는 가족이나 동료와 공유하기에도 좋습니다.

  • Docker로 Open WebUI를 설치합니다. docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway ghcr.io/open-webui/open-webui:main 한 줄이면 됩니다.
  • 브라우저에서 localhost:3000에 접속한 뒤 계정을 생성합니다.
  • 좌측 메뉴의 Knowledge 탭에서 새 컬렉션을 만들고 문서를 업로드합니다.
  • 채팅 시 ‘#’ 기호를 입력하면 Knowledge 컬렉션을 선택할 수 있고, 해당 문서를 참조하여 AI가 답변합니다.

Open WebUI는 다중 사용자 지원도 되므로, 가정이나 소규모 팀에서 공용 AI 비서로 활용하기에 매우 적합합니다.

RAG 성능을 높이는 실전 최적화 팁

청킹 전략: 문서를 어떻게 나눌 것인가

RAG 시스템의 성능은 청킹(Chunking) 전략에 크게 좌우됩니다. 같은 문서라도 어떻게 나누느냐에 따라 검색 품질이 달라집니다.

  • 고정 길이 분할: 가장 단순한 방법으로, 500자 또는 1000자 단위로 기계적으로 자릅니다. 구현이 쉽지만 문맥이 중간에 끊길 수 있습니다.
  • 의미 단위 분할(Semantic Chunking): 문단이나 섹션 제목 기준으로 나눕니다. 문맥 보존이 좋지만 조각 크기가 불균일할 수 있습니다.
  • 재귀적 분할(Recursive Splitting): LangChain의 기본 방식으로, 먼저 문단 단위로 나누되 너무 큰 조각은 다시 문장 단위로 나눕니다. 실전에서 가장 균형 잡힌 결과를 보여줍니다.

한국어 문서의 경우 500~800자 청크에 100자 오버랩이 경험적으로 좋은 출발점입니다. 표나 목록이 많은 문서는 조금 더 큰 청크가 유리하고, 짧은 Q&A 형식의 문서는 작은 청크가 효과적입니다.

하이브리드 검색: 벡터 + 키워드의 조합

벡터 검색만으로는 한계가 있는 경우가 있습니다. 예를 들어 ‘제품 코드 ABC-1234의 스펙’을 찾을 때, 벡터 검색은 의미적으로 비슷한 문서를 잘 찾지만 정확한 코드 번호를 매칭하는 데는 약할 수 있습니다.

이때 하이브리드 검색이 효과적입니다. 벡터 유사도 검색과 전통적인 키워드(BM25) 검색을 동시에 수행하고, 두 결과를 합쳐서 최종 순위를 매깁니다. 의미적 유사성과 키워드 정확성을 모두 잡을 수 있는 방법입니다.

LangChain의 EnsembleRetriever를 사용하면 BM25Retriever와 벡터 검색을 쉽게 결합할 수 있습니다. 두 검색기의 가중치를 조절해가며 최적의 비율을 찾아보세요. 일반적으로는 벡터 검색 70%, 키워드 검색 30% 비율이 좋은 시작점입니다.

프롬프트 엔지니어링: AI에게 올바른 지시 내리기

검색된 문서를 AI에게 전달할 때의 프롬프트도 중요합니다. 단순히 문서와 질문을 나열하는 것보다, 명확한 지시를 포함하면 답변 품질이 크게 향상됩니다.

  • 역할 부여: ‘당신은 [분야] 전문가입니다. 제공된 문서를 기반으로 정확하게 답변하세요.’와 같이 역할을 명시합니다.
  • 출처 명시 지시: ‘답변의 근거가 되는 문서의 제목이나 페이지를 함께 언급하세요.’라고 지시하면 할루시네이션(환각)을 줄일 수 있습니다.
  • 모르면 모른다고 하기: ‘제공된 문서에 해당 정보가 없다면 모른다고 말하세요.’라는 지시를 반드시 포함합니다. 이것이 없으면 AI가 문서에 없는 내용을 지어낼 수 있습니다.
  • 답변 형식 지정: 표 형식, 단계별 설명, 요약 등 원하는 출력 형식을 미리 지정하면 일관된 답변을 받을 수 있습니다.

리랭킹(Re-ranking): 검색 결과 품질 높이기

벡터 검색으로 가져온 문서 중에는 관련성이 낮은 것도 섞여 있을 수 있습니다. 리랭킹은 초기 검색 결과를 다시 한 번 정밀하게 평가하여 순서를 재배치하는 과정입니다.

Cohere의 Rerank API나 오픈소스 cross-encoder 모델을 사용할 수 있습니다. 검색 결과 중 상위 k개만 가져온 뒤, 리랭커가 질문과의 관련성을 0~1 점수로 다시 매기고, 점수가 높은 문서만 LLM에 전달합니다.

리랭킹을 추가하면 체감 답변 정확도가 20~30% 이상 향상되는 경우가 많습니다. 특히 문서 수가 많아질수록 효과가 두드러집니다.

실생활에서 RAG를 활용하는 구체적인 사례

개인 지식 관리 시스템

그동안 모아둔 메모, 북마크, 스크랩 자료들을 RAG 시스템에 넣으면 나만의 두 번째 뇌(Second Brain)가 됩니다. ‘지난달에 읽었던 투자 관련 기사에서 PER 기준이 뭐였지?’처럼 기억이 흐릿한 정보도 자연어로 질문하면 바로 찾을 수 있습니다.

Obsidian이나 Notion에 쌓아둔 노트를 마크다운으로 내보내서 RAG 시스템에 넣어두면, 수백 개의 노트를 일일이 검색하지 않아도 AI가 관련 내용을 종합해서 답변해 줍니다. 특히 노트 사이의 연결 고리를 AI가 발견해주는 경험은 꽤 놀랍습니다.

업무 매뉴얼 및 사내 FAQ 챗봇

소규모 팀이나 스타트업에서 사내 문서를 RAG로 구축하면, 신입 사원이 선배에게 물어볼 필요 없이 AI 챗봇에게 질문할 수 있습니다. 휴가 신청 절차, 경비 처리 방법, 코딩 컨벤션 등 반복적으로 묻는 질문에 대해 항상 일관된 최신 답변을 제공할 수 있습니다.

특히 문서가 수정될 때마다 벡터 DB를 업데이트하면 되므로, 위키나 매뉴얼이 최신 상태를 유지하는 한 챗봇도 자동으로 최신 정보를 반영합니다.

학습 및 시험 준비 도우미

자격증 시험이나 어학 공부를 위한 교재, 기출문제, 강의 노트 등을 RAG 시스템에 넣으면 개인 과외 선생님처럼 활용할 수 있습니다. ‘민법 제750조의 요건과 판례를 정리해줘’라고 질문하면, 교재 내용을 기반으로 체계적인 설명을 해줍니다.

특히 시험 준비 중 틀린 문제의 해설을 정리해서 넣어두면, ‘내가 자주 틀리는 유형이 뭐야?’라는 질문에도 패턴을 분석해서 답변할 수 있습니다.

계약서 및 법률 문서 분석

임대차 계약서, 근로 계약서, 이용 약관 등 긴 법률 문서를 RAG 시스템에 넣고 핵심 조항을 질문하면, 전체를 다 읽지 않아도 필요한 부분만 빠르게 파악할 수 있습니다. ‘중도 해지 시 위약금 조건이 뭐야?’, ‘자동 갱신 조항이 있어?’ 같은 질문에 정확한 답변을 받을 수 있습니다.

다만 법률적 판단은 전문가의 자문이 필요하므로, RAG 시스템의 답변은 참고 자료로만 활용하는 것이 바람직합니다.

RAG 구축 시 자주 만나는 문제와 해결법

한국어 처리의 함정

영어 위주로 학습된 임베딩 모델은 한국어에서 성능이 떨어질 수 있습니다. 특히 조사(‘은’, ‘는’, ‘이’, ‘가’)나 어미 변화가 많은 한국어의 특성상, 같은 의미의 문장도 벡터 거리가 멀어지는 경우가 있습니다.

  • 해결법: 다국어 지원 임베딩 모델(BGE-M3, multilingual-e5-large)을 사용합니다. 또는 한국어 특화 모델인 KoSimCSE 등을 고려해 볼 수 있습니다.
  • 청킹 시 한국어 형태소 분석기(Mecab, Kiwi)를 활용하면 더 자연스러운 분할이 가능합니다.

문서가 많아지면 느려지는 문제

문서 수가 수천 건을 넘어가면 검색 속도가 느려질 수 있습니다.

  • 해결법: ChromaDB에서 Qdrant나 Milvus 같은 전문 벡터 DB로 전환합니다. 이들은 인덱싱 최적화가 잘 되어 있어 수백만 건의 벡터도 밀리초 단위로 검색합니다.
  • 문서를 주제별 컬렉션으로 나누는 것도 효과적입니다. 질문의 주제를 먼저 분류하고, 해당 컬렉션에서만 검색하면 속도와 정확도를 모두 높일 수 있습니다.

AI가 문서 내용과 다른 답변을 하는 경우

RAG를 사용해도 AI가 문서에 없는 내용을 지어내는 환각 현상이 완전히 사라지지는 않습니다.

  • 해결법: 프롬프트에 ‘제공된 문서에 있는 내용만으로 답변하세요’라는 지시를 강화합니다.
  • 답변과 함께 참조한 문서 조각을 표시하도록 하여, 사용자가 직접 원본을 확인할 수 있게 합니다.
  • temperature를 낮게 설정(0.1~0.3)하면 창의적인 답변 대신 문서에 충실한 답변을 하는 경향이 강해집니다.

PDF에서 표나 이미지의 텍스트가 깨지는 문제

PDF 파일의 표, 차트, 스캔된 이미지 등은 일반적인 텍스트 추출로는 제대로 가져오지 못하는 경우가 많습니다.

  • 해결법: 단순 PyPDF 대신 Unstructured 라이브러리나 LlamaParse를 사용하면 표 구조를 유지한 채 텍스트를 추출할 수 있습니다.
  • 스캔된 문서는 OCR 처리가 필요합니다. Tesseract OCR이나 네이버 Clova OCR API를 활용할 수 있습니다.
  • 최근에는 멀티모달 LLM을 활용해 이미지 속 텍스트를 직접 읽어내는 방법도 인기를 얻고 있습니다.

마무리: 내 데이터에 AI를 입히는 첫걸음

RAG는 거창한 기술처럼 들리지만, 실제로 해보면 내 문서를 올리고 질문하는 것만으로 충분히 유용한 AI 비서를 만들 수 있습니다. 2026년 현재 AnythingLLM이나 Open WebUI 같은 도구 덕분에, 코딩을 전혀 모르는 분도 30분 안에 자신만의 RAG 시스템을 가동할 수 있게 되었습니다.

처음 시작한다면 이런 순서를 추천합니다. 먼저 AnythingLLM + Ollama 조합으로 몇 개의 문서를 넣어보고 체험합니다. RAG의 가치를 체감한 뒤, 문서가 늘어나고 커스터마이징이 필요해지면 LangChain이나 LlamaIndex로 직접 구축하는 단계로 넘어가면 됩니다.

AI의 진짜 가치는 범용적인 지식이 아니라, 내 상황과 내 데이터에 맞는 답변을 해줄 때 발현됩니다. RAG는 그 가능성을 여는 가장 실용적인 첫걸음입니다. 오늘 당장 평소에 쌓아둔 메모나 문서 몇 개부터 시작해 보세요. 나만의 AI 비서가 얼마나 똑똑해질 수 있는지 직접 경험하게 될 것입니다.

Photo by Leonid Altman on Pexels

답글 남기기

Your email address will not be published. Required fields are marked *.

Warning: Undefined array key "cookies" in /var/www/html/wp-content/themes/personal-cv-resume/class/class-post-related.php on line 212
*
*

최신 댓글