AI 코드리뷰 workflow
WorkFlow 템플릿
n8n의 가장 큰 강점은 활발한 커뮤니티입니다.
다른 사용자가 만든 자동화 Workflow를 복사해 붙여넣기만 하면 손쉽게 내 n8n 인스턴스에 가져와 활용할 수 있습니다.
이번 AI 코드 리뷰 Workflow도 아래 WorkFlow 템플릿을 참고해 구현했습니다.
Automated PR Code Reviews with GitHub, GPT-4, and Google Sheets Best Practices | n8n workflow template
AI-Agent Code Review for GitHub Pull Requests Description:This n8n workflow automates the process of reviewing code changes in GitHub pull requests using an Ope
n8n.io
workflow 구성도
워크플로우 실행 흐름 (요약)
- GitHub Trigger
- 지정된 저장소에서 Pull Request 이벤트가 발생하면 워크플로우를 시작합니다.
- IF 조건 검사 (if changed_files_limit_10)
- PR 상태가 closed가 아니고
- 변경된 파일 수가 10개 미만일 때만 이후 단계를 진행합니다.
- 조건을 통과하지 못하면 워크플로우가 종료됩니다.
- HTTP Request – PR Diff 가져오기
- GitHub REST API로 해당 PR의 변경 파일 목록과 diff를 가져옵니다.
- Code 노드 – 프롬프트 생성
- 파일별 diff를 마크다운 형식으로 정리
- AI에게 보낼 리뷰 요청 프롬프트를 작성합니다.
- JavaScript로 diff 데이터를 파싱해,
- Code Review Agent + OpenAI Chat Model
- 네이밍 • 성능 • 가독성 중심으로 최대 5개 핵심 문제를 지적하고
- 수정 예시 코드를 포함한 리뷰 코멘트를 생성합니다.
- LangChain Agent가 작성된 프롬프트를 OpenAI 모델에 전달해
- GitHub Robot – 리뷰 코멘트 게시
- 생성된 AI 리뷰를 해당 PR에 코멘트로 자동 등록합니다.
- Add Label to PRAI 검토가 완료되었음을 한눈에 표시합니다.
- PR에 “ReviewedByAI” 라벨을 추가해,
기타 구성
- OpenAI Chat Model 노드는 Agent가 사용할 LLM(모델)과 API 키 인증을 제공.
- 스티키 노트들은 각 단계 설명용 메모일 뿐 실행에는 영향 없음.
- githubApi로 Trigger·HTTP Request·GitHub 노드 모두 인증.
결과적으로 “PR 생성/업데이트 → diff 수집 → AI 리뷰 → PR에 코멘트 & 라벨”이 전자동으로 이뤄지는 간단한 AI 코드 리뷰 파이프라인
노드 구성
PR 트리거 노드
GitHub 인증이 필요합니다.
- Developer settings › Personal access tokens에서 Classic 토큰을 발급해 Access Token 칸에 입력합니다.
- 엔터프라이즈 서버를 쓰는 경우 GitHub Server 주소에 https://github.회사도메인.com/api/v3 형식을 사용합니다.
IF 노드
예전에는 IF 노드가 없어 PR이 closed 상태여도 플로우가 실행되었습니다.
이를 막고, 토큰 과다 사용을 방지하기 위해 두 가지 조건을 추가했습니다.
- PR 상태가 closed가 아닐 것
- 변경 파일 수가 10개 미만일 것
HTTP Rqeust 노드 - 깃헙
해당 PR의 diff 파일 목록을 GitHub REST API로 가져옵니다.
Code 노드
diff와 리뷰 지침을 결합해 AI 노드에 넘길 프롬프트를 생성합니다.
(다음 AI 노드의 Memory 또는 Tool 영역에 프롬프트를 넣어도 무방합니다.)
const files = $input.all().map(item => item.json);
let diffs = '';
for (const file of files) {
diffs += `### 파일 : ${file.filename}\n\n`;
if (file.patch) {
// 중요 : 모든 트리플 백틱을 싱글 백틱(또는 이스케이프 처리)으로 변경
const safePatch = file.patch.replace(/```/g, "''");
diffs += "```diff\n";
diffs += safePatch;
diffs += "\n```\n";
} else {
diffs += "_패치가 없습니다 (아마도 바이너리 파일일 수 있습니다)._";
}
diffs += "\n---\n\n";
}
const userMessage = `
당신은 경험이 풍부한 서버 자바 개발자입니다.
다음 파일들에 대한 코드 변경 사항을 검토해주세요:
${diffs}
---
당신의 미션:
- 파일별로, 그리고 중요한 수정 사항에 대해 네이밍, 성능, 가독성을 중점으로 보는데, 정말 문제되는 코드 부분 5개 이하로 리뷰하고, 수정 코드를 보여주세요
- 패치가 없는 파일은 무시하세요.
- 코드 스니펫이나 파일 이름을 반복하지 마세요.
`;
return [
{
json: {
user_message: userMessage.trim()
}
}
];
마크다운 렌더링 이슈가 있어 포맷을 여러 번 조정했으며, 위 버전이 최종본입니다.
AI Agent 노드
앞 단계에서 만든 user_message를 입력으로, o4‑mini 모델로 코드 리뷰를 수행합니다.
모델은 o4 mini을 사용하였습니다.
github - Create a review 노드
AI가 생성한 리뷰를 해당 PR에 코멘트로 자동 등록합니다.
HTTP Rqeust 노드 - 두레이 메신저
기존에 두레이 메신저 인커밍 API 명세서는 아래와 같다.
{
"botName": "MyBot",
"botIconImage": "https://static.dooray.com/static_images/dooray-bot.png",
"text":"Dooray!",
"attachments" : [
{
"title" : "title",
"titleLink" : "http://dooray.com/",
"text" : "message",
"color" : "red"
},
{
"title" : "title2",
"titleLink" : "http://dooray.com/",
"text" : "message2",
"color" : "green"
}
]
}
자세한 내용은 두레이 가이드 참조
사용가이드 - https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2900079668515933969
Dooray-가이드
helpdesk.dooray.com
json 데이터 - https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2900079844453730084
Dooray-가이드
helpdesk.dooray.com
Body JSON에서 List 타입 파라미터를 다루는 게 가장 까다로웠습니다.
결국 Expression 안에서는 {{ }} 없이
$json.pull_request.html_url처럼 바로 접근하면 문제없이 값을 가져올 수 있습니다.
결과
한계
AI 리뷰는 diff만 보고 판단하기 때문에, 비즈니스 로직이 요구사항을 충족하는지까지는 확인할 수 없습니다.
따라서 프롬프트를 팀 컨벤션·가독성·성능·네이밍에 집중하도록 작성했습니다.
그럼에도 이런 자동 리뷰만으로도 생산성이 크게 향상됩니다.
핵심 로직 검증은 사람이, 정적 품질 검사는 AI가 맡는 식으로 역할을 분담할 수 있습니다.
develop 해야할 부분
Comment 대신 Check API 활용
현재 봇이 comment로만 피드백을 달아
- 가독성이 떨어지고
- 파일이 많을 경우 코멘트가 지나치게 길어지는
문제가 있습니다.
이를 해결하기 위해 GitHub Check API로 파일별 인라인 피드백을 제공하도록 개선할 예정입니다.
'개발자로서 살아남기 > n8n' 카테고리의 다른 글
docker-compose을 이용한 n8n 설치 중 Error: Command "start" not found 이슈 (1) | 2025.07.25 |
---|