Building a RAG-Powered Code Reviewer That Actually Understands Your Codebase
개요
RAG(Retrieval Augmented Generation) 패턴을 활용하여 특정 프로젝트의 코드베이스를 이해하고 맞춤형 코드 리뷰를 제공하는 AI 도구가 개발되었습니다.
주요 내용
* 기존 AI 코드 리뷰 도구의 한계: 일반적인 린터나 ChatGPT와 유사한 수준의 조언만을 제공하며, 프로젝트의 구체적인 패턴이나 아키텍처를 이해하지 못합니다.
* RAG 기반 코드 리뷰어의 접근 방식:
* 코드베이스 인덱싱: PHP 파일의 함수, 메소드, 클래스를 파싱하고 임베딩을 생성하여 벡터 데이터베이스에 저장합니다.
* 프레임워크 지식 활용: di.xml, events.xml, module.xml 등을 파싱하여 클래스 등록 방식(플러그인, 옵저버 등)을 이해합니다.
* 컨텍스트 검색: 리뷰 대상 파일과 관련된 코드, 클래스, 아키텍처 패턴을 인덱싱된 코드베이스에서 검색합니다.
* LLM을 통한 리뷰 생성: 검색된 컨텍스트와 함께 리뷰 대상 파일을 LLM에 전달하여 맞춤형 리뷰를 생성합니다.
* RAG의 장점: 방대한 코드베이스 전체를 LLM 컨텍스트 창에 넣는 것보다 관련성 높은 정보만 추출하여 효율적이고 비용 효과적인 리뷰가 가능합니다.
* 아키텍처: CLI, Agent Layer, Core Engine, Framework Layer로 구성되어 있으며, Provider-agnostic 설계를 통해 LLM, 임베딩 모델 등을 쉽게 교체할 수 있습니다.
* 인덱싱 과정: tree-sitter를 사용하여 PHP 파일의 AST(Abstract Syntax Tree)를 파싱하고, Magento XML 설정을 구조화된 데이터로 추출하며, 프레임워크 컨텍스트를 태그로 추가하여 임베딩을 생성합니다.
* 검색 전략: 코드 유사성, 이름 일치, 의존성 일치 등 세 가지 전략을 조합하여 컨텍스트를 검색합니다.
* 성능 평가: 수동으로 식별된 13가지 이슈에 대해 RAG 모드가 일반 모드 대비 15% 더 높은 이슈 탐지율(69% vs 54%)을 보였으며, 프로젝트별 참조 및 구체적인 컨텍스트를 제공했습니다.
* 학습 내용:
* 컨텍스트의 관련성이 코드 리뷰 품질을 결정합니다.
* LLM은 완벽하게 구조화된 JSON을 반환하지 않으므로, 파싱 및 오류 처리 로직이 필요합니다.
* 임베딩은 코드 유사성을 측정할 뿐, 버그를 직접 탐지하지는 못하므로 LLM 분석과 결합해야 합니다.
* 무료 티어와 로컬 환경으로도 AI 애플리케이션 구축이 가능하며, 아키텍처를 통해 확장성을 확보할 수 있습니다.
* 기술 스택: Python, FastAPI, PostgreSQL + pgvector, tree-sitter, BGE-small, Google Gemini 등을 사용했습니다.
* 향후 계획: 코드 특화 임베딩 모델 도입, 하이브리드 검색, GitHub App 연동, 다중 에이전트 아키텍처 등을 고려하고 있습니다.
시사점
RAG 기반의 코드 리뷰어는 LLM이 특정 코드베이스의 맥락을 이해하도록 함으로써, 기존 도구의 한계를 극복하고 개발자가 직면한 실제 문제를 해결하는 데 도움을 줄 수 있습니다. 이는 AI 기반 개발 도구의 미래 방향성을 제시하며, 오픈 소스 프로젝트를 통해 실질적인 기술 구현을 보여줍니다.
댓글
GitHub Discussions