코드 리뷰 킬러: 이 n8n & GPT 자동화 가이드로 수동 검사를 없애세요

발행: (2025년 12월 2일 오후 12:07 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

소개

수동 코드 리뷰는 필수적이지만 비용이 많이 들고, 느리며, 일관성이 부족할 수 있습니다. GitHub Copilot의 Code Review 기능처럼 유료 구독이 필요한 도구(Copilot Pro $10 USD/월 또는 $100 /년; Copilot Pro+ $39 USD/월 또는 $390 /년) 대신, 무료 혹은 거의 무료에 실행되는 저비용 자동 AI 코드 리뷰 어시스턴트를 직접 구축할 수 있습니다.

도구

도구시스템 내 역할
n8n워크플로우 생성 – GitHub와 OpenAI를 연결하고 로직을 관리하며 출력 형식을 지정
NHost관리형 PostgreSQL 데이터베이스 – n8n 워크플로우 데이터와 인증 정보를 저장 (무료 티어)
Rendern8n 웹 서비스를 호스팅하고 도메인 URL을 제공하며 NHost 데이터베이스와 연결
OpenAI코드를 리뷰하는 LLM 제공

왜 PostgreSQL (NHost)인가?

n8n은 기본적으로 SQLite를 사용합니다. 로컬 개발에는 괜찮지만 동시 트랜잭션을 많이 처리하거나 확장성 면에서는 한계가 있습니다. NHost의 PostgreSQL 인스턴스는 안정적이고 확장 가능한 스토리지를 제공하면서도 무료 티어 개인 프로젝트에 적합합니다.

데이터베이스 설정 및 호스팅

인프라 구성은 “The Ultimate Guide to Self‑Hosting n8n for Free using Render and Nhost” 기사에 설명된 단계와 동일합니다.

1단계 – NHost

  1. NHost에 계정을 생성합니다.
  2. 새 프로젝트를 시작하고 PostgreSQL 데이터베이스를 설정합니다.
  3. 생성된 환경 변수를 기록해 둡니다(나중에 필요합니다).

NHost 설정

2단계 – Render

  1. Render에 가입하고 새 Web Service를 생성합니다.
  2. Docker 이미지 n8nio/n8n:latest를 사용합니다.
  3. NHost에서 받은 환경 변수를 Render 프로젝트 설정에 추가합니다.
  4. Render가 n8n을 배포하고 도메인 이름을 제공합니다.

Render 설정

3단계 – Webhook URL 구성

GitHub가 n8n 인스턴스에 접근하도록 Render → Web Service → Environment Variables에 다음 변수를 설정합니다:

WEBHOOK_URL="https://[your-render-domain].onrender.com/"
N8N_HOST="[your-render-domain].onrender.com"
N8N_PROTOCOL="https"

필요 인증 정보

  • GitHub Access Tokenrepo 범위가 포함된 Personal Access Token을 생성합니다(PR 데이터 읽기 및 댓글 작성에 필요).
  • OpenAI API Key – 활성 키가 필요합니다. 신규 사용자는 무료 체험 크레딧을 받을 수 있지만, 대부분은 insufficient_quota 오류를 방지하기 위해 최소 $5 정도는 사용해야 합니다.
  • 비용 관리 – 이 가이드에서는 토큰 사용량을 최소화하기 위해 가장 저렴한 gpt-5-nano 모델을 사용합니다. 필요에 따라 다른 모델로 교체할 수 있지만, “Mini” 시리즈가 비용 대비 성능이 좋습니다.

워크플로우 만들기

워크플로우 다이어그램

n8n 캔버스에 오른쪽 패널에서 다음 노드를 끌어다 놓습니다:

  1. GitHub Trigger – 풀 리퀘스트 이벤트 발생 시 실행.
  2. HTTP Request – PR diff를 가져옴.
  3. Code (JS) – OpenAI에 전달할 프롬프트를 생성.
  4. OpenAI – 리뷰를 생성.

GitHub Trigger

  1. GitHub에서 전체 repo 접근 권한을 가진 Personal Access Token을 생성합니다.
  2. n8n에서 GitHub을 검색하고 “on a pull request” 트리거 노드를 추가합니다.
  3. 노드를 GitHub 인증 정보와 함께 설정하고 저장합니다.
  4. 노드가 고유한 Webhook URL을 표시하므로, 다음 단계에서 복사해 둡니다.

GitHub 트리거

코드 Diff 가져오기

트리거 노드는 $json.body.pull_request에 PR 상세 정보를 제공합니다. 변경된 파일을 가져오기 위한 API 엔드포인트를 구성합니다:

{{ $json.body.pull_request.url }}/files

다음과 같이 HTTP Request 노드를 추가합니다:

  • 위 URL을 호출합니다.
  • Authorization: Bearer <token> 헤더에 GitHub Access Token 인증 정보를 사용합니다.

코드 Diff 가져오기

AI 페르소나 정의

Code (JS) 노드를 만들어 OpenAI에 보낼 프롬프트를 구성합니다. 예시 구조:

const reviewPrompt = `
You are a Senior Software Engineer tasked with reviewing a pull request.
Provide concise, actionable feedback covering:
- Code correctness
- Security concerns
- Performance implications
- Style and best‑practice adherence
- Suggested improvements
`;

return {
  model: "gpt-5-nano",
  messages: [
    { role: "system", content: reviewPrompt },
    { role: "user", content: $json["diff"] } // 이전에 가져온 diff
  ]
};

팀 표준에 맞게 reviewPrompt를 자유롭게 커스터마이징하세요.

AI 페르소나 정의

리뷰 생성

OpenAI 노드를 추가하고 가장 저렴하면서도 성능이 충분한 모델(예: gpt-5-nano)을 선택합니다. 이전 JavaScript 노드에서 반환된 modelmessages 필드를 매핑합니다. 노드는 AI가 생성한 리뷰 텍스트를 반환하며, 이를 또 다른 GitHub 노드(예: “Create Issue Comment”)를 사용해 PR에 댓글로 다시 게시할 수 있습니다.

OpenAI 노드의 출력을 GitHub “Create Comment” 노드에 연결하고, PR 번호와 리뷰 텍스트를 전달하도록 계속 배선합니다.

Back to Blog

관련 글

더 보기 »

계정 전환

@blink_c5eb0afe3975https://dev.to/blink_c5eb0afe3975 여러분도 알다시피 저는 다시 제 진행 상황을 기록하기 시작했으니, 이것을 다른…