Kotlin과 Spring Boot 기반으로 만든 자동 코드 리뷰 서비스로, PR에 포함된 변경 내용을 분석하여 LLM을 통해 리뷰 코멘트를 생성하고 GitHub에 자동으로 남긴다. 리뷰 생성 실패 시 재시도까지 관리하여 일관된 코드 리뷰 자동화를 제공한다.
이 프로젝트는 GitHub Pull Request 이벤트(Webhook)를 받아 변경된 파일의 diff를 분석한 뒤, Google GenAI를 활용해 리뷰 코멘트를 생성하고 GitHub API를 통해 자동으로 리뷰를 남기는 시스템이다. 리뷰 생성 과정에서 발생할 수 있는 요청 한도 초과(429)·서버 오류(503) 같은 상황은 내부 재시도 큐에서 관리하여 안정적으로 처리한다.
-
PR 발생 → Webhook 수신
GitHub Webhook이 PR 이벤트 정보를 서버로 전달한다. -
Diff 수집 및 분석
PR의 변경 파일을 조회하고 파일 단위로 diff snippet을 분리한다. -
리뷰 생성 요청(LLM 호출)
파일별 diff snippet을 기반으로 프롬프트를 구성해 Google GenAI 모델에 리뷰 생성을 요청한다. -
GitHub에 리뷰 코멘트 등록
생성된 리뷰 코멘트를 GitHub Pull Request에 자동으로 작성한다. -
오류 발생 시 재시도 큐로 이동
- 모델 응답 지연, 429/503 등 재시도가 필요한 오류는 재시도 큐에 적재
- 일정 간격으로 스케줄러가 큐를 실행하여 재리뷰 시도
- 최대 재시도 횟수 초과 시 실패 로그만 남기고 종료
이 구조를 통해 PR 하나의 리뷰가 파일 단위로 병렬 처리되고, 장애 상황에서도 안정적으로 완료될 수 있도록 설계되어 있다.
-
언어 및 런타임
Kotlin 1.9, JVM 21 -
프레임워크
Spring Boot 3.5(Web + WebFlux), Kotlin Coroutine, Reactor -
AI 모델
Google GenAI Java SDK(LLM 기반 리뷰 생성) -
데이터 처리
Jackson Kotlin Module, Reactor Extensions -
인증/보안
GitHub App 인증(JWT + Installation Token), JJWT 기반 서명 처리 -
CI/CD 및 배포
GitHub Actions(self-hosted runner), Docker Buildx, Docker Hub, EC2
-
Build Job
- self-hosted Runner에서 Gradle 빌드
- JAR 파일 생성 후 아티팩트 업로드
-
Dockerize Job
- 다운로드한 JAR을 기반으로 Docker 이미지를 빌드
- Buildx를 사용해
linux/amd64와linux/arm64멀티 아키텍처 이미지 생성 - Docker Hub로 push
-
Deploy Job
- SSH로 EC2에 연결
- 환경변수를 전달하고
code-review-deploy.sh실행 - 기존 컨테이너 중지 후 최신 이미지로 재배포
- 자동 재시작 설정으로 운영 환경 안정성 확보
이 파이프라인을 통해 PR → LLM 리뷰 생성 → GitHub 코멘트 작성 → 장애 시 재시도 → 자동화된 Docker 배포까지 전 과정이 자동으로 이어진다.