Skip to content

Commit eb16c1d

Browse files
committed
Refine review guidelines and configuration settings
Updated review guidelines and configurations in .coderabbit.yml to enhance clarity and structure.
1 parent f2ca689 commit eb16c1d

1 file changed

Lines changed: 326 additions & 0 deletions

File tree

.coderabbit.yml

Lines changed: 326 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,326 @@
1+
# CodeRabbit이 사용할 언어 설정 (한국어)
2+
language: ko-KR
3+
4+
# AI 코치의 성격과 리뷰 스타일을 정의하는 지침
5+
tone_instructions: >
6+
우아한테크코스 코치처럼 문제의 원인과 개선 방법을 명확히 제시하고, 교육적 관점에서 리뷰하세요.
7+
비판보다 개선 중심이며, 관련 문서 추천과 위트 있는 칭찬
8+
9+
# 코드 리뷰 설정
10+
reviews:
11+
profile: chill # 리뷰 스타일: 편안하고 친근한 톤
12+
request_changes_workflow: false # Request Change 요청시 병합 비활성화 해제
13+
high_level_summary: true # PR 전체 요약 제공
14+
changed_files_summary: false # 개별 파일 요약은 비활성화 (중복 방지)
15+
sequence_diagrams: false # 시퀀스 다이어그램 생성 비활성화
16+
assess_linked_issues: true # 연결된 이슈 분석 활성화
17+
related_issues: false # 관련 이슈 추천 비활성화
18+
related_prs: false # 관련 PR 추천 비활성화
19+
suggested_labels: false # 라벨 추천 비활성화
20+
auto_apply_labels: false # 자동 라벨 적용 비활성화
21+
suggested_reviewers: false # 리뷰어 추천 비활성화
22+
auto_assign_reviewers: false # 자동 리뷰어 할당 비활성화
23+
poem: false # 리뷰 완료 후 시 작성 비활성화
24+
25+
# 특정 경로별 상세 리뷰 지침 설정
26+
path_instructions:
27+
# Feature 모듈 - MVI 패턴 적용
28+
- path: feature/**
29+
instructions: |
30+
**Feature 모듈 (MVI 패턴) 리뷰 가이드라인**
31+
32+
1. **MVI 패턴 준수**
33+
- Intent: 사용자 액션이 명확하게 정의되어 있는가?
34+
- State: UI 상태가 불변(immutable) 데이터 클래스로 정의되어 있는가?
35+
- SideEffect: 일회성 이벤트(네비게이션, 토스트 등)가 적절히 분리되어 있는가?
36+
- 단방향 데이터 플로우가 유지되는가? (Intent → ViewModel → State → View)
37+
38+
2. **Compose UI**
39+
- Composable 함수가 순수 함수인가? (부수 효과 없음)
40+
- State Hoisting이 적절히 적용되었는가?
41+
- 불필요한 recomposition이 발생하지 않는가?
42+
- remember, LaunchedEffect 등 사이드 이펙트 API가 적절히 사용되었는가?
43+
- Preview Composable이 제공되는가?
44+
45+
5. **의존성 주입**
46+
- Koin을 통한 DI가 적절히 구성되어 있는가?
47+
48+
# Domain 모듈 - Pure Kotlin
49+
- path: domain/**
50+
instructions: |
51+
**Domain 모듈 (Pure Kotlin) 리뷰 가이드라인**
52+
53+
1. **클린 아키텍처 원칙**
54+
- Android/외부 프레임워크 의존성이 전혀 없는가?
55+
- 비즈니스 로직이 명확하게 표현되어 있는가?
56+
- 도메인 모델이 불변 객체로 설계되어 있는가?
57+
58+
2. **모델 설계**
59+
- 값 객체(Value Object) 패턴이 적절히 활용되었는가?
60+
- 도메인 규칙이 모델 내부에 캡슐화되어 있는가?
61+
- 유효성 검증 로직이 도메인 모델에 포함되어 있는가?
62+
63+
3. **Repository 인터페이스**
64+
- 인터페이스가 도메인 요구사항을 표현하는가?
65+
- 반환 타입이 도메인 모델인가? (DTO/Entity가 아닌)
66+
- 코루틴 Flow/suspend 함수가 적절히 활용되었는가?
67+
68+
4. **UseCase 패턴 (선택적)**
69+
- 단일 책임 원칙이 지켜지는가?
70+
- 비즈니스 로직 재사용성이 확보되는가?
71+
72+
# Data 모듈 - Repository 구현체
73+
- path: data/**
74+
instructions: |
75+
**Data 모듈 리뷰 가이드라인**
76+
77+
1. **Repository 구현**
78+
- Domain 인터페이스를 정확히 구현하고 있는가?
79+
- 데이터 소스(Remote/Local) 조합 로직이 적절한가?
80+
- 에러 핸들링이 도메인 예외로 변환되는가?
81+
82+
2. **Mapper 패턴**
83+
- DTO → Domain 모델 변환이 명확한가?
84+
- Mapper가 단순하고 테스트 가능한가?
85+
- null safety 처리가 적절한가?
86+
87+
3. **데이터 캐싱**
88+
- 캐싱 전략이 명확한가? (메모리/디스크)
89+
- 캐시 무효화 로직이 있는가?
90+
91+
# Core:Network 모듈
92+
- path: core/network/**
93+
instructions: |
94+
**Network 모듈 리뷰 가이드라인**
95+
96+
1. **Retrofit 설정**
97+
- Converter/Adapter가 적절히 구성되었는가?
98+
- Timeout 설정이 합리적인가?
99+
- 로깅 인터셉터가 디버그 빌드에만 적용되는가?
100+
101+
2. **API 정의**
102+
- RESTful 원칙이 준수되는가?
103+
- suspend 함수 또는 Flow로 비동기 처리되는가?
104+
- 에러 응답 처리가 명확한가?
105+
106+
3. **보안**
107+
- API 키가 하드코딩되지 않았는가?
108+
- HTTPS가 사용되는가?
109+
- Certificate Pinning 고려가 필요한가?
110+
111+
# Core:UI 모듈
112+
- path: core/ui/**
113+
instructions: |
114+
**공통 UI 모듈 리뷰 가이드라인**
115+
116+
1. **재사용 가능한 Composable**
117+
- 컴포넌트가 충분히 일반화되어 있는가?
118+
- 커스터마이징 옵션이 적절한가?
119+
- Preview가 다양한 상태를 커버하는가?
120+
121+
2. **MVI 베이스 클래스**
122+
- State, StateHolder, SideEffect 인터페이스가 명확한가?
123+
- 제네릭 타입이 적절히 활용되었는가?
124+
125+
3. **Formatter 유틸리티**
126+
- 포맷팅 로직이 순수 함수인가?
127+
- 다국어/로케일 처리가 고려되었는가?
128+
129+
# Core:Design-System 모듈
130+
- path: core/design-system/**
131+
instructions: |
132+
**디자인 시스템 리뷰 가이드라인**
133+
134+
1. **테마 구성**
135+
- Material Design 3 가이드라인 준수
136+
- Dark Mode 지원
137+
- 색상/타이포그래피/간격 체계가 일관적인가?
138+
139+
2. **컴포넌트 라이브러리**
140+
- 디자인 시스템이 프로젝트 전반에 적용 가능한가?
141+
- 접근성(Accessibility) 고려
142+
143+
# Build Logic Convention Plugins
144+
- path: build-logic/**
145+
instructions: |
146+
**Convention Plugin 리뷰 가이드라인**
147+
148+
1. **플러그인 설계**
149+
- 각 Convention Plugin이 명확한 책임을 가지는가?
150+
- 중복 설정이 제거되었는가?
151+
- 버전 카탈로그(libs.versions.toml) 활용이 적절한가?
152+
153+
2. **빌드 성능**
154+
- 불필요한 의존성이 포함되지 않았는가?
155+
- Configuration Cache 호환성
156+
- Build Cache 최적화
157+
158+
3. **유지보수성**
159+
- 확장 함수가 가독성을 높이는가?
160+
- DSL이 직관적인가?
161+
162+
# 테스트 코드
163+
- path: "**/test/**"
164+
instructions: |
165+
**테스트 코드 리뷰 가이드라인**
166+
167+
1. **테스트 구조**
168+
- Given-When-Then 패턴 준수
169+
- 테스트 메서드명이 명확한가? (should_When_Given 형식)
170+
- Arrange-Act-Assert 구조가 명확한가?
171+
172+
2. **테스트 커버리지**
173+
- 핵심 비즈니스 로직 테스트 완료 여부
174+
- Edge Case 및 예외 상황 테스트
175+
- Happy Path와 Sad Path 모두 커버
176+
177+
3. **코루틴 테스트**
178+
- TestDispatcher 활용
179+
- Flow 테스트가 적절한가?
180+
181+
**누락된 테스트 케이스 제안:**
182+
- ViewModel: Intent 처리 및 State 변화 테스트
183+
- Repository: 데이터 조회/변환 테스트
184+
- Domain Model: 비즈니스 로직 및 유효성 검증 테스트
185+
- Mapper: DTO → Domain 변환 테스트
186+
187+
# Gradle 빌드 파일
188+
- path: "**/*.gradle.kts"
189+
instructions: |
190+
**Gradle 빌드 파일 리뷰 가이드라인**
191+
192+
1. **Convention Plugin 활용**
193+
- 중복 설정이 Convention Plugin으로 추출되었는가?
194+
- 모듈별로 적절한 Convention Plugin이 적용되었는가?
195+
196+
2. **의존성 관리**
197+
- Version Catalog (libs.versions.toml) 사용
198+
- 불필요한 의존성 제거
199+
- 의존성 범위가 적절한가? (implementation/api/compileOnly)
200+
201+
3. **모듈 구조**
202+
- 순환 의존성이 없는가?
203+
- 의존성 방향이 올바른가? (domain ← data, feature → domain)
204+
205+
# 리소스 파일
206+
- path: "**/res/**"
207+
instructions: |
208+
**리소스 파일 리뷰 가이드라인**
209+
210+
1. **문자열 리소스**
211+
- 하드코딩 문자열 제거
212+
- 다국어 지원 고려
213+
- 포맷팅 문자열 활용
214+
215+
2. **색상/테마**
216+
- Design System 모듈로 이동 검토
217+
- Dark Mode 대응
218+
219+
# 자동 리뷰 기능 설정
220+
abort_on_close: true # PR이 닫히면 리뷰 중지
221+
disable_cache: false # 캐시 기능 활성화
222+
auto_review:
223+
enabled: true # 자동 리뷰 활성화
224+
auto_incremental_review: false # 증분 리뷰 비활성화
225+
base_branches:
226+
- main # 기본 브랜치
227+
- develop # 개발 브랜치
228+
229+
# 채팅 및 상호작용 설정
230+
chat:
231+
auto_reply: true # 질문 시 자동 응답 활성화
232+
233+
# 지식 베이스 설정
234+
knowledge_base:
235+
opt_out: false # 지식베이스 사용 허용
236+
237+
web_search:
238+
enabled: true # 웹 검색을 통한 최신 정보 활용
239+
240+
code_guidelines:
241+
enabled: true # 팀 코드 가이드라인 참조 활성화
242+
filePatterns: # 참조할 팀 문서들
243+
- README.md # 프로젝트 구조 및 아키텍처
244+
- docs/**/*.md # 추가 문서 (생성 시)
245+
246+
learnings:
247+
scope: local # 학습 데이터를 현재 저장소로 제한
248+
249+
issues:
250+
scope: local # 이슈 참조를 현재 저장소로 제한
251+
252+
pull_requests:
253+
scope: local # PR 참조를 현재 저장소로 제한
254+
255+
# 작업 가이드라인
256+
work_guidelines:
257+
goal_setting: # 작업 계획 및 범위 설정
258+
- "이슈 티켓 발행 시 목표 명확히 설정"
259+
- "큰 작업은 여러 개의 작은 티켓으로 분할"
260+
- "PR은 최대 800 Line 제한"
261+
- "주요 변경사항이나 새로운 패턴 도입 시 반드시 사전 논의"
262+
263+
# 안드로이드 멀티모듈 프로젝트 특화 가이드라인
264+
multimodule_rules:
265+
- "모듈 간 의존성 방향 준수 (feature → domain ← data, feature → core)"
266+
- "Pure Kotlin 모듈(domain)에 Android 의존성 금지"
267+
- "Convention Plugin을 통한 일관된 빌드 설정"
268+
- "공통 코드는 적절한 core 모듈로 추출"
269+
270+
mvi_pattern_rules:
271+
- "단방향 데이터 플로우 유지"
272+
- "State는 불변 데이터 클래스"
273+
- "SideEffect는 일회성 이벤트만"
274+
- "ViewModel에서 View 참조 금지"
275+
276+
# 리뷰어 원칙
277+
reviewer_principles:
278+
basic_rules:
279+
- "피드백은 코드, 프로세스, 사양만을 대상으로 함"
280+
- "리뷰이와 리뷰어의 인격과는 분리"
281+
- "언어 폭력이나 비난이 섞인 지적 금지"
282+
- "시간에 쫓겨 리뷰 품질을 낮추지 말 것"
283+
284+
reviewer_attitude:
285+
- "리뷰는 모두를 위한 것 (나 자신, 팀, 서비스)"
286+
- "적절한 시간 분배로 피드백 마감기한 준수"
287+
- "우선순위를 정해 필요한 부분만 간단히 리뷰"
288+
289+
feedback_method:
290+
constructive:
291+
good: "이 부분을 다음과 같이 개선할 수 있을 것 같습니다"
292+
bad: "이 코드는 잘못되었다"
293+
specific:
294+
good: "StateFlow 대신 MutableStateFlow를 private으로 캡슐화하면 불변성이 보장됩니다"
295+
bad: "이 코드는 문제가 있다"
296+
discussion:
297+
- "토론을 하되, 납득할 수 있는 이유와 근거 충분히 제시"
298+
299+
mindset:
300+
- "리뷰는 모두를 위한 것"
301+
- "사람은 누구나 실수한다 - 빠르게 인정하고 열린 마음으로 토론"
302+
- "칭찬도 좋은 코드 리뷰 - 특별한 의견이 없다면 칭찬하기"
303+
- "실수 지적받았을 때 방어적이 되지 않기"
304+
- "리뷰를 위한 리뷰는 자제 - 의미 있는 피드백에 집중"
305+
306+
# 코드 생성 (자동 문서화 및 테스트)
307+
code_generation:
308+
docstrings:
309+
language: ko-KR
310+
path_instructions:
311+
- path: "**/*.kt"
312+
instructions: |
313+
- 모든 public 함수/클래스에 대해 KDoc 양식을 따라 한글로 간결하게 작성해주세요.
314+
- 함수 목적, 파라미터, 반환값, 예외를 명확하게 기술해 주세요.
315+
- Composable 함수는 UI 설명과 파라미터 역할을 명시해주세요.
316+
- 샘플 코드/사용 예시는 필요한 경우에만 포함해 주세요.
317+
318+
unit_tests:
319+
path_instructions:
320+
- path: "**/*.kt"
321+
instructions: |
322+
- ViewModel: Given-When-Then 패턴으로 Intent 처리 및 State 변화 테스트
323+
- Repository: 데이터 조회/변환 로직 테스트 (Fake 활용)
324+
- Domain Model: 비즈니스 로직 및 유효성 검증 단위 테스트
325+
- Mapper: DTO → Domain 변환 테스트 (모든 필드 검증)
326+
- UseCase: 비즈니스 로직 조합 및 예외 처리 테스트

0 commit comments

Comments
 (0)