ODW #5: 벡터 DB와 에이전트 스킬로 RAG 시스템 만들기

5 hours ago 1

안녕하세요! 모바일 개발자 경험 팀의 @giginet입니다. 평소에는 LINE iOS 앱을 중심으로 빌드 시스템과 개발 환경을 정비하고, 개발자 경험을 향상하기 위한 업무를 하고 있습니다.

최근 LY Corporation에서 사내 임직원을 대상으로 진행하고 있는 Orchestration Development Workshop의 다섯 번째 워크숍에서 대량의 마크다운 문서를 검색하는 간단한 RAG(retrieval-augmented generation) 시스템을 구축하고 에이전트 스킬을 활용해 검색 경험을 향상하는 워크숍을 맡아 진행했습니다. 이번 글에서는 이 워크숍 내용을 소개하겠습니다.

왜 RAG 기반이 필요한가

RAG는 AI 에이전트가 참조할 수 있는 별도 지식을 제공해 보다 정확하고 신뢰할 수 있는 응답을 생성하도록 만드는 기법입니다.

대규모 애플리케이션을 개발할 때에는 다양한 문제가 늘 발생합니다. 예를 들어 새로운 의존성을 도입하고 싶거나 빌드 에러가 발생했을 때 혹은 아키텍처를 어떻게 준수해야 할지 모르는 등의 문제가 발생합니다. 이런 문제를 해결하기 위해 현재 LINE 앱 개발 팀에는 개발자를 위한 문서와 가이드라인을 다수 보유하고 있지만 문서를 읽고 규칙을 파악하거나 정보를 검색하는 데 많은 시간이 소요됩니다. 관련 전문 지식을 가진 팀원에게 질문해 해결할 수도 있겠지만 이런 경우 질문하는 쪽과 답변하는 쪽 모두 시간과 노력이 소모됩니다. 따라서 대량의 데이터를 자연어로 검색하거나 AI 에이전트가 효율적으로 활용할 수 있는 구조가 필요했습니다.

이번 워크숍에서는 이러한 상황을 가정하고 자연어로 작성한 대량의 문서를 AI 에이전트가 효율적으로 참조하는 방법을 모색했습니다.

ChromaDB를 활용해 간단한 RAG 시스템 구축하기

이번 워크숍에서는 RAG 시스템을 구축하기 위해 ChromaDB라는 오픈소스 벡터 DB를 사용했습니다. ChromaDB는 로컬 환경에서 작동하며 Python과 JavaScript용 클라이언트 라이브러리를 제공해 데이터를 간단히 적재할 수 있는 벡터 DB입니다.

또한 Swift Evolution이라는 Swift 언어의 사양 제안 문서를 정형화된 대량의 마크다운 문서를 다루는 예제로 사용했습니다. Swift Evolution은 오픈소스 Swift 개발 과정에서 도출된 언어 사양과 논의 과정 등을 담고 있는 약 500건 정도의 기술 문서입니다. 형식이 일정 부분 통일돼 있고, 각 문서에는 ‘SE-0400’과 같은 ID가 부여돼 있으며, 구현 상태나 작성자 정보 등의 메타데이터를 포함하고 있어 예제로 사용하기에 적합했습니다.

워크숍 전반부에서는 ChromaDB를 사용해 로컬 환경에 Swift Evolution을 적재한 DB를 구축하고, MCP 도구를 통해 코딩 에이전트(Claude Code)에서 이 DB를 참조하는 과정으로 실습을 진행했습니다.

그 결과 아래와 같이 코딩 에이전트에서 Swift Evolution 내용을 참고할 수 있게 되었습니다.

코딩 에이전트에서 Swift Evolution 내용을 참고하는 장면 AI 번역 이미지

에이전트 스킬로 RAG 시스템을 더욱 편리하게 활용하기

다음으로 에이전트 스킬을 활용해 앞서 구축한 시스템을 더욱 편리하게 사용할 수 있도록 개선하는 방법을 소개했습니다.

MCP 구조에서는 chroma-mcp가 제공하는 도구 사용법, 즉 ‘벡터 DB를 검색하려면 이 도구를 사용한다’는 정보만 AI 에이전트의 컨텍스트에 공유됩니다. 따라서 DB에서 Swift Evolution 내용을 검색하려면 해당 정보가 DB에 포함돼 있다는 것과 어떤 컬렉션 및 메타데이터를 활용해야 하는지 에이전트에게 알려줄 필요가 있습니다.

이를 위해 이번에는 ‘Swift Evolution 지식을 검색하려면 ChromaDB를 MCP를 통해 참조한다’는 지식을 가진 스킬을 만들어 MCP 도구 이용을 간소화하는 방법을 소개했습니다.

--- name: searching-swift-evolution description: Search Swift Evolution proposals (SE-XXX/ST-XXX) using the vector database to answer Swift language specification questions. --- # Searching Swift Evolution Search Swift Evolution proposals via Chroma MCP. ## Database - **Collection**: `swift-evolution` - **Document IDs**: Proposal numbers (e.g., `SE-0255`, `ST-0001`) - **Metadata**: `Status` (implementation status), `Authors`, etc. ## Usage - Query in English for best results - Use `Status` metadata to check implementation status - If output truncated, reduce `n_results`

이를 통해 다음과 같이 ‘SE-0500을 조사해줘’와 같은 최소한의 지시만으로 Swift Evolution 내용을 검색할 수 있게 되었습니다.

스킬에 DB 사용법을 학습시켜 MCP 도구 호출 간소화 AI 번역 이미지

또한 본 워크숍에서는 다음과 같이 에이전트 스킬의 일반적인 작동 메커니즘과 스킬 작성 모범 사례(참고), 실용적인 스킬 작성하는 방법도 설명했습니다.

Agent Skills의 작동 원리 심층 분석 AI 번역 이미지

워크숍 후반부에서는 이 구조를 활용해 참가자가 각자 준비한 마크다운 문서를 DB에 적재한 뒤 필요한 정보를 적절히 검색하는 스킬을 작성하는 실습을 진행했습니다. 이후 이 DB를 사내 클라우드인 Flava(참고)에 배포해 다른 구성원과 공유하는 방법도 소개했습니다.

워크숍에서 구축한 RAG 시스템 활용 예시

이 RAG 시스템은 어떻게 활용할 수 있을까요? 가장 먼저 떠오르는 활용 사례는 자연어 검색을 통한 문서 검색 정확도 향상입니다. 앞서 언급한 것처럼 개발자가 자연어로 개발 관련 질문을 할 수 있게 되는 것만으로도 문서 접근성이 크게 개선됩니다.

또한 에이전트 스킬이나 Claude Code의 서브 에이전트 구조와 연계하면 코드 생성이나 리뷰 프로세스에서도 효과를 기대할 수 있습니다. 코딩 에이전트가 스스로 문서를 검색할 수 있게 되면 관련 지식을 RAG에서 가져와 이를 기반으로 코드를 생성하거나 리뷰를 수행할 수 있습니다.

전사 워크숍 진행 후기

이번 워크숍은 강사를 포함한 몇 명의 발표자(mock participants)가 실제로 내용을 시연하는 형태로 온라인으로 진행했고, 1,000명 이상이 참여해 매우 성황을 이뤘습니다(덕분에 정말 많이 긴장했습니다).

워크숍이 성과를 거두려면 강의 파트와 실습 파트의 균형이 중요합니다. 실습 위주일 경우 본질을 이해하지 못한 채 절차만 따라가기 쉽고, 강의 위주일 경우 집중력이 떨어질 수 있습니다. 이 균형을 고려해 신중하게 워크숍을 구성한 결과 강의 파트에서는 에이전트 스킬의 핵심 개념을 간결하게 전달할 수 있었고, 실습 파트에서는 모의 참가자 역할을 담당한 발표자가 실제 업무에서 사용하는 문서를 활용해 구체적인 응용 사례를 보여줄 수 있었습니다.

마치며

이번 글에서는 대량의 마크다운 문서를 검색하는 간단한 RAG(retrieval-augmented generation) 시스템을 구축하고 에이전트 스킬을 활용해 검색 경험을 향상하는 워크숍 내용을 소개했습니다. Orchestration Development Workshop에서 또 다른 워크숍이 궁금하시다면 아래 기사 목록을 참고해 주시기 바랍니다.

Read Entire Article