|
| 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