많은 회사에서 추구하는 개발 문화에서 코드 리뷰는 늘 빠지지 않고 나오는 이야기이다.
하지만 이러한 문화를 성공적으로 정착시키기는 정말 어려운데, 코드 리뷰를 반복하다 보면 단순한 반복 업무가 되어 실제로 그 의미가 퇴색되는 경우가 많은 것 같다.
이러한 코드 리뷰 문화 개선을 위해 많은 기업에서 근래 LLM을 통한 AI 코드 리뷰를 도입하고 있다.
다음과 같은 서비스를 통해 AI 코드 리뷰를 도입할 수 있다.
- AWS CodeGuru
- Github Copilot
다만 비용이 발생하기 때문에 검증되지 않은 방법을 섣불리 도입을 결정하기 어려운 것도 사실이다.
그래서 관련해서 정보를 찾아보던 중, 네이버 엔지니어링 데이에서 최근에 LLM AI 코드리뷰 도입에 대해 발표했던 유튜브 영상이 있어 이를 정리해보았다.
아키텍처 및 시나리오
최근에 Meta에서 Lama 3.1을 오픈 라이센스로 무료로 공개하였다.
이러한 모델은 라이선스 문제가 발생하지 않으므로, 기업에서 도입하기 매우 좋은 기회였으며, 다음과 같은 장점도 존재하였다.
장점
- Open Source, 라이선스 문제가 발생하지 않음
- 토크나이저가 매우 커서 한정된 리소스로 실행시키기 적합
- Coding, Asking for Advice, Re-writing, Summarizarion가 다른 모델에 비해 성능이 높음
Flow
- Pull Request (PR): 개발자가 GitHub에 PR을 생성합니다.
- Trigger: PR이 생성되면 GitHub Actions가 트리거되어, 정의된 작업이 실행됩니다.
- Code Patch and Preprocessing: GitHub Actions Runner가 활성화되고, PR의 코드 변경 사항(코드 패치)을 가져와서 전처리 작업을 수행합니다. 여기에는 코드 분석과 리뷰 준비를 위한 작업이 포함됩니다.
- Review Request: 전처리된 코드와 함께 Kserve에 호스팅된 모델 서버로 코드 리뷰 요청을 보냅니다.
- Code Review and Feedback: 모델 서버는 코드 리뷰를 수행하고, 리뷰 결과와 피드백을 생성합니다. 이 피드백은 GitHub Actions Runner에 전달됩니다.
- Report: GitHub Actions Runner는 받은 피드백을 취합하고, 이를 GitHub PR에 코멘트로 게시하여 코드 리뷰 결과를 통합합니다.
리뷰 기준 정립
AI가 코드 리뷰를 원하는 방향으로 이끌어 내기 위해서는 시스템 프롬프트 작성이 필요한데, 영상에서는 아래와 같은 기준을 검사하도록 처리하였다.
- Pre-Condition Check
- 함수나 메서드가 올바르게 작동하기 위해 필요한 변수의 상태나 값의 범위를 가지고 있는지 검사
- Runtime Error Check
- Runtime Error 가능성이 있는 코드를 검사, 기타 잠재적 위험을 확인
- Optimization
- 코드 패치의 최적화 포인트를 검사. 코드가 성능이 떨어진다고 판단되면, 최적화된 코드를 추천
- Security Iusse
- 코드가 심각한 보안 결함을 가진 모듈을 사용하거나 보안 취약점을 포함하고 있는지 검사
프롬프트 엔지니어링: 추가적으로 LLM의 답변은 정말 다향한 결과를 도출하는데, 이상한 답변을 줄이도록 프롬프트 엔지니어링 역할 부여를 통해 할루시네이션(환상통)을 줄이고 다양한 출력 형식이 나오지 않도록 출력 제한을 요청하는 시스템 프롬프트도 설정하고, 이를 한국어로 출력하도록 명시했다.
시스템 프롬프트 설정 및 서버 구축: LLM에 지시할 시스템 프롬프트를 설정하고, 모델이 실행될 서버를 구축했다. 서버는 모델의 응답을 처리하고, 리뷰 결과를 전달하는 역할을 한다.
모델 서빙(Infrence Service) 설정: AI 스튜디오 환경에서 모델 서빙을 쉽게 할 수 있도록 Inference Service 컴포넌트를 설정. 이 컴포넌트를 통해 모델과 REST API를 통해 통신하며, 리뷰 요청을 처리하고 응답을 제공한다.
GitHub Actions 설정: OSS 프로젝트에서 자동 코드 리뷰를 트리거할 수 있도록 GitHub Actions 워크플로우 설정 파일(yaml)을 작성. 이 파일에는 특정 이벤트(예: PR 생성) 시 클라이언트를 트리거하고, 서버와 상호작용하도록 하는 스크립트가 포함된다.
자동화 처리: 자동 코드 리뷰를 받고자 하는 리포지토리에서 GitHub Actions 러너를 설정하고, 워크플로우 스크립트를 삽입하면 시스템이 자동으로 리뷰 과정을 수행하고 결과를 제공한다.
리포트
이러한 리뷰가 완료되면, 요약 리포트를 작성해준다.
- 총 몇건의 이슈를 탐지했는지
- 작성한 코드 방향 제공
- 리포트를 통한 팀원과의 논의
- 이슈들의 요약
- 다시 한번 이슈 점검 가능
- 작성한 코드에서 적용 가능한 사내 개발자 도구, 플랫폼과 같은 솔루션 추천
이러한 리포트 기능으로 개발자에게 개발의 방향을 지시하여 명확한 디렉션을 정해줄 수 있다.
TO-DO
최종적으로 모든 코드 에러를 개발 초기 단계에서 탐지하는 것이 목표
사내 플랫폼 취약점 방지 사항을 파인 튜닝하여 적극적으로 탐지하도록 추진
영상은 매우 짧은 길이지만, 이가 전달해주는 간접 경험은 결코 작지 않은 것 같다.
만약 LLM을 통한 코드 리뷰에 관심이 있다면, 해당 영상을 처음부터 시청하는 것을 추천한다.
'Programming' 카테고리의 다른 글
DDD(Domain Driven Design) - [NHN FORWARD 22] DDD 뭣이 중한디? (1) | 2024.06.12 |
---|---|
JDK Vender 확인 명령어 (0) | 2021.03.17 |
Json 타입별 간편 Convert(ObjectMapper) (0) | 2021.03.15 |
JAVA - Classpatch 지정 시 오류 발생 해결법 (0) | 2020.08.18 |
C언어 - 분기문 (goto, break, continue, return) (0) | 2020.06.24 |