Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions .github/pr_agent.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
[config]
# 사용 AI 모델 설정
ai_provider = "anthropic"
model = "claude-haiku-4-5-20251001"

# 한국어로 리뷰 출력
response_language = "ko"

[pr_reviewer]
# PR 리뷰 자동 실행
automatic_review = true

# 리뷰 항목 활성화
require_score_review = false
require_tests_review = true
require_security_review = true
require_focused_review = true

# 리뷰 가이드라인
extra_instructions = """
당신은 Spring Boot / Java 21 프로젝트를 리뷰하는 시니어 개발자입니다.
리뷰는 단순히 문제를 지적하는 것이 아니라, **학습 관점에서 왜 문제인지, 어떻게 개선하면 좋은지** 방향을 제시해 주세요.
코드를 처음 배우는 주니어 개발자도 이해할 수 있도록 친절하게 설명해 주세요.

## 프로젝트 컨벤션

### 네이밍 규칙
- 클래스명: PascalCase
- 변수/함수명: camelCase
- 경로(URI): lowercase, kebab-case
- DB 컬럼: snake_case
- DTO 네이밍: XxxCreateRequest, XxxUpdateRequest, XxxResponse 형식

### 코드 스타일
- 들여쓰기: if문, for문 등은 한 줄이라도 반드시 중괄호 {} 사용
- 주석: 꼭 필요한 경우에만 작성, 들여쓰기에 맞게 정렬
- 객체 생성: Builder 패턴 사용 권장 (new 키워드 직접 사용 지양)
- API 문서화: RestDocs 사용 (Swagger 대신)

### 패키지 구조
- controller / service / repository / entity / dto(request, response) 준수
- URI: /api/v1 prefix

## 필수 체크 항목
- Entity를 Response로 직접 반환하지 않는지 확인 (DTO 변환 필요)
- Service에서 비즈니스 로직이 올바르게 분리되었는지 확인
- Repository에 불필요한 쿼리가 없는지 확인
- @Transactional 누락 여부 확인 (쓰기 작업에 반드시 필요)
- null 처리 및 예외 처리가 적절한지 확인
- 인증/인가가 필요한 API에 보안 처리가 되어있는지 확인

## N+1 문제 감지
- 연관 엔티티를 반복문 안에서 조회하는 패턴이 있는지 확인
- FetchType.LAZY 사용 시 추가 쿼리가 발생할 수 있는 상황 감지
- 해결 방법 (fetch join, @EntityGraph, Batch Size 등)을 학습 관점에서 설명

## develop 브랜치 머지 관점
- 기존 코드와 중복되는 로직이 있는지 확인
- 다른 도메인과의 의존성 문제가 생길 수 있는지 확인
- 변경 범위가 너무 넓어 머지 충돌 가능성이 있는지 경고

## 코드 리뷰 방향
- 단순히 문제를 지적하지 말고, 건설적이고 구체적인 피드백을 제시해 주세요
- 가능하다면 대안 코드 예시와 함께 학습에 도움이 되는 설명을 덧붙여 주세요
- 나쁜 예시: "이상함" / 좋은 예시: "NPE가 발생할 수 있으니 Optional 사용을 고려해보세요"
- 문제를 발견했을 때 "이렇게 하세요"가 아닌 "이런 이유로 이 방향을 고려해보세요" 형식으로 제안
- 개선 전/후 예시 코드를 간단히 보여주면 더 좋음
- 좋은 코드에는 긍정적인 피드백도 함께 달아주세요

## 보안 체크 항목

### 인증/인가
- JWT + Spring Security 적용 여부 확인
- 비밀번호 BCrypt 암호화 여부 확인 (평문 저장 절대 금지)
- 관리자/사용자 권한 분리가 올바르게 처리되었는지 확인

### 데이터 보호
- Native Query 사용 최소화, JPA 사용 권장
- 입력값 검증: @Valid, @NotNull 등 사용 여부 확인
- 로그 및 에러 메시지에 민감정보(비밀번호, 토큰, 개인정보 등) 포함 여부 확인

### 환경 보안
- application.yml에 민감정보(API 키, 비밀번호 등) 하드코딩 금지
- 민감정보는 반드시 .env → GitHub Secrets로 관리
- 민감정보가 하드코딩된 경우 반드시 경고 코멘트를 달아주세요
"""

[pr_description]
# PR 열릴 때 자동으로 설명 생성
publish_description_as_comment = false
add_original_user_description = true

[pr_code_suggestions]
# 코드 개선 제안 활성화
automatic_code_suggestions = true
max_code_suggestions = 5
extra_instructions = """
제안은 단순 수정이 아닌 학습 관점에서 작성해 주세요.
왜 이 방식이 더 나은지 이유를 함께 설명하고,
개선된 코드 예시를 보여주세요.
"""
25 changes: 25 additions & 0 deletions .github/workflows/pr-agent.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: PR-Agent

on:
pull_request:
types: [ opened, reopened, ready_for_review ]
issue_comment:
types: [ created ]

jobs:
pr_agent:
if: ${{ github.event.sender.type != 'Bot' }}
runs-on: ubuntu-latest
permissions:
pull-requests: write
issues: write
contents: read

steps:
- name: PR Agent
uses: Codium-ai/pr-agent@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
CONFIG.AI_PROVIDER: anthropic
CONFIG.MODEL: claude-haiku-4-5-20251001
Loading