Clarion은 Ruby 생태계의 성숙한 도구들을 활용하여 효율적인 아키텍처를 구성했습니다. CLI 도구로서 Thor를 사용해 명령어를 구조화하고, ruby-openai를 통해 임베딩 생성과 LLM 연동을 처리합니다. 벡터 데이터베이스로는 운영용 Pinecone과 로컬 개발용 Chroma를 추상화 레이어를 통해 유연하게 지원하도록 설계되었습니다.
데이터 수집 및 전처리 (Ingestion)
실제 환경의 데이터는 매우 복잡합니다. 특히 Jira의 ADF(Atlassian Document Format)는 단순한 HTML이나 마크다운이 아닌 중첩된 JSON 구조이므로, 이를 평문으로 변환하기 위한 재귀적 파서가 필수적이었습니다. Clarion은 Jira 티켓, Confluence 문서, GitHub의 PR 및 이슈 데이터를 수집하며, 각 문서는 소스별로 결정론적 ID(Deterministic ID)를 부여받아 중복 없이 동기화됩니다. concurrent-ruby를 활용한 병렬 처리를 통해 수집 속도를 약 2.3배 향상시켰습니다.
검색 최적화 및 RAG 아키텍처
단순한 코사인 유사도 검색만으로는 실무에 적합한 결과를 얻기 어렵습니다. Clarion은 검색 품질을 높이기 위해 다음과 같은 기법을 적용했습니다. - 병렬 벡터 검색: 하나의 쿼리 임베딩으로 Jira, Confluence, GitHub을 동시에 검색하여 네트워크 지연을 최소화했습니다. - 관계 기반 가중치(Relationship Boost): 분석 중인 티켓의 부모/자식 관계에 있는 데이터에 1.5배의 가중치를 부여합니다. - 시간적 감쇠(Temporal Decay): 7일 이상 된 데이터는 0.7배, 30일 이상 된 데이터는 0.3배로 점수를 낮추어 최신 맥락을 우선시합니다.
LLM 프롬프팅과 구조화된 출력
LLM 응답은 json_object 형식을 강제하여 후속 처리가 용이하도록 했으며, 프롬프트에는 기술적인 질문뿐만 아니라 Planet Argon만의 커뮤니케이션 스타일을 녹여냈습니다. 예를 들어, 모호한 요구사항에 대해 단순히 질문하는 것이 아니라 클라이언트에게 제안하는 방식으로 질문을 구성하도록 가이드합니다.
MCP를 통한 워크플로우 통합
가장 혁신적인 부분은 Model Context Protocol(MCP)의 도입입니다. 이를 통해 Clarion은 단순한 CLI를 넘어 Claude Code와 같은 AI 에디터의 서버로 동작합니다. 개발자는 편집기 내에서 “WR-123 티켓 분석해줘”라고 요청하면, Clarion이 백엔드에서 RAG를 수행하여 관련 이력과 권장 사항을 즉시 제공합니다. 이는 문맥 전환 비용을 획기적으로 줄여줍니다.