Search
moon
sun

[TGC] LLM을 이용한 코드리뷰 자동화 스터디

1회차

💡
이번 주는 OT로 개발조직에서 코드 리뷰를 어떤 방식으로 어떤 프로세스를 태워서 활용하고 싶은지에 대해서 간단히 고민하고 와주시면 좀 더 의미있는 자리가 될 것 같습니다.

1. 현재 코드리뷰 방식

1-1. PR기준

•
이슈 단위
◦
JIRA를 통해 생성되는 이슈(버그 해결, 기능 개발, 성능 고도화)기준으로 PR 생성

1-2. 리뷰어 지정 방식

•
백엔드 전체 지정(default)

1-3. 리뷰 진행 방식

•
(스프린트 항목) PR 리뷰이가 코드에 대한 전체적인 설명을 하며 리뷰어들은 질문 및 피드백 제공
•
(핫픽스 항목) PR 리뷰이가 리뷰어 지정 후 동일한 과정으로 리뷰 진행
•
하지만, 이슈가 기하급수적으로 늘어나고 다들 개발일정이 빡빡한 시점에선 리뷰진행 불가능한 상황

2. LLM 기반 리뷰 프로세스 가안

graph TD
A[개발자 PR 생성] --> B[LLM 자동 리뷰]
B --> C[자동 피드백 코멘트 등록]
C --> D[개발자 수정 or 리뷰어 확인]
D --> E[리뷰어가 핵심 로직 및 설계 위주 검토]
E --> F[Merge 결정]
Mermaid
복사
•
LLM 자동리뷰를 통해 사내 코딩 컨벤션과 lint rule이나 잠재적 버그 포인트등을 사전 검사
◦
insight같은 경우 lint rule 위배된 코드가 너무 많아서 현실성이 조금 떨어지는 부분이 있다.
•
LLM이 PR에 직접 코멘트를 남기거나 요약한 내용을 정리해서 업로드
•
리뷰어는 도메인 관점의 비즈니스 로직 피드백에 집중

3. 도입 우선순위

단계
활용 방식
기대 효과
1단계
사내 코딩 스타일/린트 자동 리뷰
반복 코멘트 줄이기
2단계
보안/성능 이슈 탐지
예외처리 누락, N+1, 슬로우 코드 등 선제 대응
3단계
도메인 특화 규칙 학습
사내 규칙 기반 피드백 (ex. 우리팀의 인증 방식, 트랜잭션 규칙 등)
4단계
코드리뷰 가이드 챗봇
신입이 "이거 왜 리뷰 걸린 거야?" → 챗봇에게 설명 듣기

4. LLM 리뷰 결과 활용 방안

•
리뷰 통계 대시보드화
⇒ 자주 반복적으로 발생하는 리뷰에 대한 정보 취합 및 팀원 코드 교육
•
리뷰 통계 데이터를 통한 개발자 개발 취약점 분석 및 보완 방식 피드백
⇒ 팀원별로 자주 발생하는 피드백 포인트를 카테고리화하여 역량 보완 리포트 생성
•
LLM 피드백 퀄리티 향상
⇒ 좋은 피드백과 나쁜 피드백에 대한 리뷰이 피드백을 통해 LLM 리뷰 기능 개선

5. LLM Bot 개발 구성 요소

1.
PR 이벤트 트리거 수신
•
PR생성 및 업데이트시 트리거되어 Webhook을 통해 llm bot이 이벤트 트리거가 되도록 하기
•
bitbucket은 Webhook으로 PR이벤트(pullrequest:created, pullrequest:updated) 수신
2.
변경된 파일이나, diff 내용 파싱하기
•
Bitbucket REST API 사용하여 변경점 가져오기
•
clone해서 직접 git diff로 파싱하기
3.
LLM 요청 프롬프트 엔지니어링
[설명 예시] - 서비스 명세: 인증 API - 사내 코딩 스타일: 변수명은 camelCase, Controller에는 비즈니스 로직 포함하지 말 것 - 린트 규칙: import 순서, 코드 길이 120자 이하 <변경된 코드> diff --git a/UserController.kt b/UserController.kt @@ -1,5 +1,6 @@ +import java.util.UUID ...
Plain Text
복사
4.
LLM 모델 연동
val prompt = "... 위 내용 ..." val response = openAiClient.chat(prompt)
Kotlin
복사
5.
Bitbucket 리뷰 코멘트 등록
•
Bitbucket API로 PR에 댓글 달기
POST /repositories/{workspace}/{repo_slug}/pullrequests/{pr_id}/comments Authorization: Bearer {token} Content-Type: application/json { "content": { "raw": "❗ 변수명이 모호해요. camelCase로 작성해주세요." }, "inline": { "path": "src/UserController.kt", "to": 12 } }
Kotlin
복사
Kakao Channel