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
복사