BACK TO RESUME

AI Code Review System

2025.08 — 2025.09

Deep Dive Report

개인 스터디 시간을 활용해 사내 인프라 기반의 Zero-Budget AI 코드 리뷰 시스템을 구축하여, 리뷰 병목 해결 및 팀 코드 품질 상향 평준화를 달성한 과정을 기술합니다.

KotlinSpring Boot 3Google GeminiGitHub AppGitLabn8nLM StudioCoroutine

1. Zero-Budget Automation (Phase 1)

The Challenge (Situation)

차세대 의약품 배송 서비스 개발의 임시 팀장으로서 실무와 매니징을 병행하며 리뷰 리소스 부족과 병목 현상을 겪었습니다. 신입 팀원과의 코드 품질 편차를 줄이기 위한 교육적 리뷰가 절실했으나, 유료 도구 도입은 경영진의 회의적인 스탠스로 인해 예산 지원이 불가능한 상황이었습니다.

The Strategy (Action)

업무 외 개인 시간을 활용하여 사내 오픈소스 인프라를 조합한 파이프라인을 설계했습니다. GitLab Webhook + n8n + LM Studio(로컬 LLM)를 연동하여 외부망 노출 없이 동작하는 경제적 자동화 환경을 구축했습니다.
GitLab Pipeline Workflow (Phase 1)Click to Enlarge
GitLab Request Flow
  • 데이터 정제: Git Diff 포맷을 분석하여 Hunk 단위로 분해하고 로직과 무관한 노이즈(Import, 주석) 필터링
  • 추론 안정화: gpt-oss-20b 모델 적용 및 n8n Merge 노드를 활용한 컨텍스트 데이터 유실 방지
  • 프롬프트 고도화: Google AI Studio를 활용한 약 100회 이상의 반복 검증으로 최적의 System Prompt 도출

2. System Refactoring (Phase 2)

초기 n8n 기반 파이프라인의 낮은 확장성과 데이터 가공의 한계를 극복하기 위해, Kotlin & Spring Boot 3 기반의 전용 서버로 시스템을 전면 리팩터링했습니다. 이를 통해 GitHub App 형태의 유연한 연동과 정교한 인라인 리뷰 기능을 확보했습니다.

Facade Pattern

PR 요약 및 코드 리뷰에 대한 이벤트 유형에 따른 명확한 라우팅 및 단일 진입점 관리

Producer-Consumer

Coroutine Channel 기반 큐로 GitHub/Gemini API 속도 제한(Rate Limit) 안정적 관리
Refactored System Architecture (Phase 2)Click to Enlarge
AI Code Review System Architecture

3. Engineering Highlights

01.

Coroutine Channel 기반 비동기 작업 큐

Redis와 같은 별도 인프라 없이 In-memory Channel로 고가용성 큐를 구현했습니다. SupervisorJobrunCatching을 활용하여 개별 작업의 실패가 전체 시스템으로 전파되지 않도록 설계했으며, Semaphore를 활용해 Rate Limit을 정밀하게 제어합니다.
kotlin
@Component
class ReviewJobQueue(private val codeReviewService: CodeReviewService) {
    // 동시 실행 상한 제어
    private val semaphore = Semaphore(MAX_CONCURRENCY)

    @PostConstruct
    fun start() {
        repeat(workerCount) { idx ->
            scope.launch {
                for (job in channel) {
                    runCatching {
                        semaphore.withPermit {
                            codeReviewService.review(job)
                        }
                    }.onFailure { /* 에러 전파 방지 */ }
                }
            }
        }
    }
}
02.

정교한 커스텀 Diff 파서 엔진

단순 문자열 비교가 아닌, Unified Diff 포맷을 직접 분석하여 의미 있는 변경점만 추출합니다. Sealed Class 기반 ReviewType 설계를 통해 PR 전체 요약, 파일 코멘트, 멀티라인 인라인 코멘트를 타입 안전하게 다형적으로 처리합니다.

Efficiency

  • Import 및 Package 구문 변경 자동 제외
  • 삭제만 있는 파일 및 빈 변경 사항 필터링
  • 토큰 소모량 60% 절감 및 환각 방지

Accuracy

  • Hunk 헤더 기반 old/new 라인 번호 추적
  • 멀티라인 코멘트 범위(Range) 정밀 계산
  • AS-IS / TO-BE 코드 제안 템플릿 생성
03.

보안 중심 설계 (Zero-Trust)

Webhook 검증 단계에서 Constant-Time Comparison(상수 시간 비교)을 구현하여 Timing Attack을 방어하고, RS256 기반 JWT 인증 및 Installation Token 캐싱으로 보안성과 성능을 동시에 확보했습니다.

상수 시간 서명 검증

HMAC-SHA256 서명 비교 시 조기 반환을 방지하여 응답 시간 차이로 서명을 유추하는 공격 차단

GitHub App 인증

JJWT를 활용한 RS256 서명 및 토큰 캐싱으로 불필요한 API 호출 최소화

4. Outcomes & Impact

Review Lead Time

-70%

Infra Cost

₩0

Token Saving

60%

Data Privacy

100%

"주도적으로 팀의 생산성 병목을 해결한 성과를 인정받아, 연봉 인상에 긍정적인 성과 평가를 달성했습니다."