-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpr_agent.toml
More file actions
139 lines (120 loc) · 7.02 KB
/
pr_agent.toml
File metadata and controls
139 lines (120 loc) · 7.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
[config]
# 시스템 언어 강제 설정
response_language = "ko-KR"
# 모델 설정
model = "gpt-4o-mini"
model_turbo = "gpt-4o-mini"
fallback_models = ["gpt-3.5-turbo"]
ignore_pr_without_changes = true
add_repo_metadata = true
add_repo_metadata_file_list = [
"docs/CODE_CONVENTION.md",
"docs/GIT_CONVENTION.md",
"docs/SWAGGER_GUIDELINE.md"
]
extra_instructions = """
답변은 반드시 '한국어'로 작성해주세요.
개발자가 이해하기 쉬운 친절한 어조로 작성해주세요.
코드의 잠재적 버그와 로직 오류에 집중해주세요.
아래의 [Code Convention]을 위반했는지 엄격히 확인해주세요.
[Code Convention]
1. Naming Rules
- Package: 소문자만 사용 (언더스코어 금지).
- Class: PascalCase. Suffix 필수 (ApiController, ViewController, Service, Repository).
- Event 객체: `도메인 + 동사 + Event` (예: IssueCreatedEvent).
- Event Listener: `도메인 + 대상 + Listener` (예: IssueNotificationListener).
- Method/Variable: camelCase.
- Constant: UPPER_SNAKE_CASE.
- HTML File: kebab-case (예: member-list.html).
2. DTO Naming Rules
- 요청 DTO: `도메인 + 동사 + Request` (예: MemberJoinRequest).
- 응답 DTO: `도메인 + 동사 + Response` 또는 `도메인 + Detail/Summary` (예: MemberDetailResponse).
- SSR 폼 객체: `도메인 + 동사 + Form` (예: MemberJoinForm). API 요청 객체와 혼용 금지.
- `MemberDto`, `MemberRequestDto`, `CreateMemberDto` 형태 금지.
3. Controller & URL Rules
- API Controller (@RestController):
- URL 접두사 `/api/` 필수.
- 반환값은 반드시 `ApiResponse<T>` 사용. **Entity 직접 반환 절대 금지**.
- `try-catch` 작성 금지. 예외는 GlobalRestExceptionHandler에 위임.
- View Controller (@Controller):
- URL 접두사 없음.
- 반환값은 String (HTML 경로).
- 폼 처리 중 비즈니스 예외는 Controller에서 직접 try-catch로 처리.
- URL은 행위(create, get, delete)를 포함하지 않는 RESTful 스타일 유지.
4. Entity & JPA Rules
- `@Data` 사용 금지 → `@Getter`만 사용.
- 기본 생성자는 `@NoArgsConstructor(access = AccessLevel.PROTECTED)` 사용.
- 무분별한 Setter 금지 → 비즈니스 메서드(changePassword 등) 사용.
5. Service & Architecture Rules
- Service: 트랜잭션은 읽기 전용(`@Transactional(readOnly = true)`)을 기본으로, 쓰기 작업만 `@Transactional` 별도 지정.
- DTO 변환: 반드시 Service 계층에서 수행 (Entity ↔ DTO).
- Service는 렌더링 전략(SSR/CSR)을 알지 못한다. 항상 Exception만 throw.
- 타 도메인 데이터가 필요할 때 Repository 직접 호출 금지 → 해당 도메인의 Service 계층 호출.
6. Exception Handling Rules
- BusinessException 계층 구조 사용: BadRequestException(400), UnauthorizedException(401), ForbiddenException(403), NotFoundException(404), ConflictException(409).(추가 가능)
- 자바 표준 예외(NoSuchElementException, IllegalArgumentException 등)는 단순한 경우에 사용 가능. GlobalApiExceptionHandler가 안전망으로 처리.
- 같은 메시지가 두 곳 이상에서 반복되거나, 이 예외만 따로 구분해야 하는 경우 → 도메인 패키지에 BusinessException 하위 예외 클래스 추가.
- RestController: try-catch 금지. 모든 예외는 GlobalApiExceptionHandler에 위임.
- ViewController: 폼 처리 중 BusinessException은 Controller에서 직접 try-catch 후 폼 재렌더링. 그 외는 GlobalViewExceptionHandler에 위임.
- @Valid 검증 실패(MethodArgumentNotValidException)는 GlobalApiExceptionHandler에서 details 배열로 변환.
7. Event & Async Rules
- 이벤트 객체에 JPA Entity 전달 금지 → 반드시 필요한 값만 담은 DTO/Record로 구성.
- @EventListener 사용 금지 → @TransactionalEventListener(phase = AFTER_COMMIT) 사용.
- DB 조작이 있는 리스너: @Transactional(propagation = REQUIRES_NEW) 필수.
- 외부 I/O가 있는 리스너: @Async + @TransactionalEventListener 조합 사용.
- @Async 메서드: 리턴 타입은 void 또는 CompletableFuture만 허용.
- @Async 메서드: 동일 클래스 내 self-invocation 금지 (프록시 미적용으로 동기 동작).
- @Async 메서드: public 메서드에만 적용 (private/protected 선언 시 무시됨).
- SimpleAsyncTaskExecutor 사용 금지 → 반드시 커스텀 ThreadPoolTaskExecutor 사용.
- DB 트랜잭션 내 외부 I/O(HTTP, 이메일, AI 호출 등) 금지 → 커넥션 풀 고갈 위험.
8. JavaScript (fetchUtil) Rules
- 모든 fetch 기반 API 호출은 fetchUtil.js의 callApi()를 통해 수행.
- callApi() 호출 시 Content-Type 검증 포함 → 직접 fetch() 호출 금지.
- API 에러 렌더링은 renderApiError()를 사용하여 일관된 처리.
- callApi() 호출부는 반드시 try-catch로 감싸 네트워크/파싱 오류를 처리.
9. Swagger/OpenAPI Rules (Separation Strategy)
- **DTO**: 필드에 `@Schema(description, example)`을 직접 부착하여 명세 정의.
- **Controller**: 비즈니스 로직 가독성을 위해 `@ApiResponse`, `@ExampleObject` 직접 사용 금지.
- **Interface**: 별도의 `Docs` 인터페이스(e.g. `MemberSwaggerDocs`)를 생성하여 커스텀 어노테이션으로 응답 명세를 관리.
- **Implementation**: Controller 메서드에는 `@Operation`, `@Parameter`와 `Docs` 인터페이스의 커스텀 어노테이션(e.g. `@MemberSwaggerDocs.SignupError`)만 부착.
"""
[github_app]
# 🚨 자동 실행 완전 차단 (가장 중요)
# pr_commands = []
# PR 생성 후 추가 커밋을 했을 때 또 리뷰할 지 여부
handle_push_trigger = false
[pr_reviewer]
# 자동 리뷰 끄기
auto_review = false
# 리뷰를 다시 요청했을 때, 새 댓글을 계속 다는 게 아니라 기존 댓글을 수정(Update)합니다.
persistent_comment = false
# 완벽한 코드일 때 조용히 넘어갑니다. (무소식이 희소식)
publish_output_no_suggestions = false
# 불필요한 기능 제거
require_ticket_analysis_review = false # 티켓/이슈 연동 분석 끄기
require_security_review = true # 보안 리뷰는 유지
require_score_review = false # 점수 매기기 끄기 (잡음 감소)
enable_help_text = false # "사용법 가이드" 제거
enable_code_suggestions = true
[pr_description]
# 자동 요약 끄기
auto_describe = false
publish_labels = false
enable_help_text = false
use_bullet_points= false
enable_pr_type= false
enable_pr_diagram=true
final_update_message = false
include_generated_by_header=false
extra_instructions = """
[Output Format Rules]
1. 'PR Type' 섹션 생성 금지.
2. 'Description' (요약) 섹션 생성 금지.
3. 오직 'Diagram Walkthrough'와 'File Walkthrough' 섹션만 생성.
4. 'User description'은 건드리지 말고 그대로 두세요.
"""
[pr_code_suggestions]
# 코드 제안 기능 한국어 설정
extra_instructions = """
제안하는 코드는 반드시 한국어 설명과 함께 작성해주세요.
"""