Conversation
- 영문으로 작성 - rules로 분리
- testing.md를 참조하여 작성하는 방식으로
- rules에 이미 관련 문서가 있으므로, 중복
|
Warning Rate limit exceeded
To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
Walkthrough이번 변경사항은 개발 환경 자동화를 정리하고 코드 컨벤션 문서화 체계를 새롭게 구축한 작업입니다. 구체적으로는:
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Review rate limit: 0/1 reviews remaining, refill in 28 minutes and 7 seconds.Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude/rules/database.md:
- Around line 5-7: The rule text "Field name must match DB column name exactly
(snake_case)" contradicts the example using camelCase; update that line to
clarify the intended mapping by replacing it with a phrase like "Field name must
map 1:1 to DB column name; DB column names must be snake_case" so the rule and
the example align; ensure the exact phrase "Field name must map 1:1 to DB column
name; DB column names must be snake_case" (or equivalent) is used in place of
the old sentence to remove ambiguity.
In @.claude/skills/review-pr/SKILL.md:
- Around line 30-31: Update the file reference casing so links match the actual
filename: replace occurrences of "CLAUDE.md" with "claude.md" in
.claude/skills/review-pr/SKILL.md (notably the line containing "Ref: `CLAUDE.md`
- Architecture" and the other occurrence around lines 65–66) to ensure
case-sensitive filesystems won’t break the reference.
- Around line 75-97: The fenced code block in the PR template (the
triple-backtick block that starts with "## PR Review: #{number} - {title}")
lacks a language tag, triggering MD040; update that fenced block to specify a
language (e.g., "md" or "text") after the opening ``` so tools and linters
recognize the block type and the warning is resolved.
In @.claude/skills/test/SKILL.md:
- Around line 82-88: 문서의 주석 "shared test data as fields"가 공유 mutable 상태로 오해될 수
있으니, `@BeforeEach` setUp()와 관련된 주석(예: "shared test data as fields" 및 예시 필드
"private Entity entity;")을 수정하여 테스트 독립성 원칙을 준수하도록 명확히 하세요: 필드로 공유할 수 있는 값은 각
테스트마다 재초기화되는(freshly reinitialized in setUp()) 값이거나 불변(immutable) 값만 허용한다고 명시하고,
mutable 상태를 공유해서는 안 된다는 경고를 추가해 주세요.
- Around line 45-47: The fenced code block containing
"src/test/java/com/example/solidconnection/[domain]/service/[ServiceName]Test.java"
is missing a language tag and triggers MD040; update that fenced block by
changing the opening ``` to include a language (e.g., ```text) so the block
reads like ```text ... ```, ensuring the Markdown linter no longer flags it.
In `@claude.md`:
- Around line 36-39: The fenced code block in claude.md (the Git commit/branch
example) lacks a language tag causing MD040; update the fenced block that
currently contains "Commit : feat|fix|refactor|docs|test|chore|perf:
<description>" and "Branch : type/issue-number-short-desc" to include a language
identifier (e.g., change the opening fence to ```text) so the block is
recognized as plaintext and the markdown linter warning is resolved.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: e79a0ee6-520c-4fe4-b5d5-5ad05f6aca44
📒 Files selected for processing (11)
.claude/hooks/notify.ps1.claude/hooks/notify.py.claude/hooks/post-edit-check.py.claude/rules/code-style.md.claude/rules/database.md.claude/rules/testing.md.claude/settings.json.claude/skills/review-pr/SKILL.md.claude/skills/test/SKILL.md.gitignoreclaude.md
💤 Files with no reviewable changes (4)
- .claude/hooks/notify.ps1
- .claude/settings.json
- .claude/hooks/notify.py
- .claude/hooks/post-edit-check.py
| - Every field requires `@Column(name = "...", nullable = ...)` | ||
| - Field name must match DB column name exactly (snake_case) | ||
| - `@Table(name = "...")` required on every entity class |
There was a problem hiding this comment.
1) 규칙 문구가 예시와 충돌합니다 (Line 6)
현재 문구(Field name must match DB column name exactly (snake_case))는 아래 예시 코드의 camelCase 필드와 모순됩니다. “필드명과 컬럼명이 1:1 매핑되어야 하며, 컬럼명은 snake_case”처럼 표현을 바꾸는 편이 정확합니다.
수정 제안
-- Field name must match DB column name exactly (snake_case)
+- Java field names should map 1:1 to DB columns via `@Column(name = "...")`, and DB column names must use snake_case🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.claude/rules/database.md around lines 5 - 7, The rule text "Field name must
match DB column name exactly (snake_case)" contradicts the example using
camelCase; update that line to clarify the intended mapping by replacing it with
a phrase like "Field name must map 1:1 to DB column name; DB column names must
be snake_case" so the rule and the example align; ensure the exact phrase "Field
name must map 1:1 to DB column name; DB column names must be snake_case" (or
equivalent) is used in place of the old sentence to remove ambiguity.
| - Ref: `CLAUDE.md` - Architecture | ||
|
|
There was a problem hiding this comment.
1) 문서 참조 파일명 대소문자를 실제 파일과 맞춰 주세요 (Line 30, Line 65)
현재 CLAUDE.md로 참조하고 있는데, 변경 파일은 claude.md입니다. 케이스 민감 환경(Linux)에서 링크/참조가 깨질 수 있습니다.
수정 제안
-- Ref: `CLAUDE.md` - Architecture
+- Ref: `claude.md` - Architecture
...
-- Ref: `CLAUDE.md` - Git
+- Ref: `claude.md` - GitAlso applies to: 65-66
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.claude/skills/review-pr/SKILL.md around lines 30 - 31, Update the file
reference casing so links match the actual filename: replace occurrences of
"CLAUDE.md" with "claude.md" in .claude/skills/review-pr/SKILL.md (notably the
line containing "Ref: `CLAUDE.md` - Architecture" and the other occurrence
around lines 65–66) to ensure case-sensitive filesystems won’t break the
reference.
| ``` | ||
| ## PR Review: #{number} - {title} | ||
|
|
||
| **수집할 정보:** | ||
| - PR 제목 및 설명 | ||
| - 관련 이슈 번호 | ||
| - 변경된 파일 목록 | ||
| - CI/CD 체크 상태 | ||
|
|
||
| ### 2단계: 변경 파일 분석 | ||
|
|
||
| **도구 우선순위:** | ||
| Link: {url} | ||
| Author: {author} Branch: {branch} CI: {pass/fail} | ||
|
|
||
| 1. **Serena MCP** (Java 코드 분석에 최적화) | ||
| - `mcp__serena__get_symbols_overview <파일경로>` - 파일의 클래스/메서드 구조 파악 | ||
| - `mcp__serena__find_symbol <심볼명>` - 특정 심볼 검색 | ||
| - `mcp__serena__search_for_pattern <패턴>` - 컨벤션 위반 패턴 검색 | ||
| ### Summary | ||
| {brief description of what the PR does} | ||
|
|
||
| 2. **Read/Grep** (보조 분석) | ||
| - `Read <파일경로>` - 파일 전체 읽기 | ||
| - `Grep --pattern <패턴>` - 패턴 검색 | ||
| ### Passed | ||
| - {item} | ||
|
|
||
| ### 3단계: 체크리스트 검증 | ||
|
|
||
| 아래 체크리스트를 순서대로 확인합니다. | ||
|
|
||
| --- | ||
| ### Suggestions (non-blocking) | ||
| - {file:line} — {problem} — {suggestion} | ||
|
|
||
| ## 리뷰 체크리스트 | ||
| ### Required changes | ||
| - {file:line} — {problem} — {fix direction} | ||
|
|
||
| 각 항목의 상세 컨벤션은 참조 문서를 확인하세요. | ||
| ### Overall | ||
| {conclusion} | ||
|
|
||
| ### 1. 아키텍처 및 계층 구조 | ||
|
|
||
| **검증 항목:** | ||
| - 계층형 아키텍처 준수 (Controller → Service → Repository) | ||
| - 역계층 참조 금지 | ||
| - 순환 의존성 없음 | ||
|
|
||
| 👉 **참고:** `CLAUDE.md` - "아키텍처" 섹션 | ||
|
|
||
| --- | ||
|
|
||
| ### 2. 네이밍 컨벤션 | ||
|
|
||
| **검증 항목:** | ||
| - API 엔드포인트: kebab-case 사용 (예: `/user-profile`) | ||
| - DTO 변환 메서드: 단일 파라미터 `from()`, 다중 파라미터 `of()` | ||
| - Request/Response: `XXXRequest`, `XXXResponse` 형식 | ||
| - 테스트 메서드: 한국어, `어떤_것을_하면_어떤_결과가_나온다()` 패턴 | ||
|
|
||
| 👉 **참고:** `CLAUDE.md` - "네이밍 컨벤션" 섹션 | ||
|
|
||
| --- | ||
|
|
||
| ### 3. 코드 스타일 | ||
|
|
||
| **검증 항목:** | ||
| - 와일드카드(`*`) import 금지 | ||
| - 클래스 선언 전 빈 줄 존재 | ||
| - private 메서드는 호출하는 public 메서드 바로 아래 위치 | ||
| - Controller: 모든 파라미터 줄바꿈 필수 | ||
| - 일반 메서드: 3개 이상 파라미터 시 줄바꿈 | ||
| - 파일 끝 개행 문자 | ||
|
|
||
| **패턴 검색 예제:** | ||
| ```bash | ||
| mcp__serena__search_for_pattern "import.*\\*" # 와일드카드 import 검색 | ||
| Verdict: Approved / Approved with suggestions / Changes requested | ||
| ``` |
There was a problem hiding this comment.
2) 출력 포맷 코드 블록에도 언어를 지정해 주세요 (Line 75)
MD040 경고 대상입니다. fenced block에 언어를 명시하면 문서 품질과 도구 호환성이 좋아집니다.
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 75-75: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.claude/skills/review-pr/SKILL.md around lines 75 - 97, The fenced code
block in the PR template (the triple-backtick block that starts with "## PR
Review: #{number} - {title}") lacks a language tag, triggering MD040; update
that fenced block to specify a language (e.g., "md" or "text") after the opening
``` so tools and linters recognize the block type and the warning is resolved.
| ``` | ||
|
|
||
| **편의 메서드 작성 팁:** | ||
|
|
||
| - 한국어 메서드명 사용 (가독성) | ||
| - 자주 사용되는 기본값 조합만 제공 | ||
| - Builder를 조합하여 필요한 데이터 설정 | ||
|
|
||
| ### 테스트에서 사용 | ||
|
|
||
| ```java | ||
| @TestContainerSpringBootTest | ||
| class ChatServiceTest { | ||
|
|
||
| @Autowired | ||
| private ChatRoomFixture chatRoomFixture; | ||
|
|
||
| @Test | ||
| void 채팅방을_생성할_수_있다() { | ||
| // 편의 메서드 사용 | ||
| ChatRoom room = chatRoomFixture.채팅방(false); | ||
|
|
||
| // Builder 직접 사용 | ||
| ChatRoom customRoom = chatRoomFixture.chatRoomFixtureBuilder.chatRoom() | ||
| .isGroup(true) | ||
| .mentoringId(100L) | ||
| .create(); | ||
| } | ||
| } | ||
| src/test/java/com/example/solidconnection/[domain]/service/[ServiceName]Test.java | ||
| ``` |
There was a problem hiding this comment.
1) 코드 블록 언어 지정이 필요합니다 (Line 45)
마크다운 린트(MD040) 경고 대상입니다. fenced block에 언어를 지정해 주세요.
수정 제안
-```
+```text
src/test/java/com/example/solidconnection/[domain]/service/[ServiceName]Test.java</details>
<details>
<summary>🧰 Tools</summary>
<details>
<summary>🪛 markdownlint-cli2 (0.22.1)</summary>
[warning] 45-45: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
</details>
</details>
<details>
<summary>🤖 Prompt for AI Agents</summary>
Verify each finding against the current code and only fix it if needed.
In @.claude/skills/test/SKILL.md around lines 45 - 47, The fenced code block
containing
"src/test/java/com/example/solidconnection/[domain]/service/[ServiceName]Test.java"
is missing a language tag and triggers MD040; update that fenced block by
changing the opening to include a language (e.g.,text) so the block
reads like text ... , ensuring the Markdown linter no longer flags it.
</details>
<!-- fingerprinting:phantom:triton:hawk:ee26ecc8-0a68-4195-8018-1d934623aad5 -->
<!-- d98c2f50 -->
<!-- This is an auto-generated comment by CodeRabbit -->
| // shared test data as fields if reused across @Nested classes | ||
| // private Entity entity; | ||
|
|
||
| ```java | ||
| @TestContainerSpringBootTest | ||
| class ChatServiceTest { | ||
| @BeforeEach | ||
| void setUp() { | ||
| // initialize shared fixtures here | ||
| } |
There was a problem hiding this comment.
2) 테스트 독립성 규칙과 충돌 소지가 있는 표현입니다 (Line 82-88)
“shared test data as fields”는 공유 mutable state를 허용하는 것으로 오해될 수 있습니다. 테스트 독립성 원칙에 맞게 “재초기화되는 값 또는 immutable 값만 허용”으로 문구를 명확히 해주세요.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.claude/skills/test/SKILL.md around lines 82 - 88, 문서의 주석 "shared test data
as fields"가 공유 mutable 상태로 오해될 수 있으니, `@BeforeEach` setUp()와 관련된 주석(예: "shared
test data as fields" 및 예시 필드 "private Entity entity;")을 수정하여 테스트 독립성 원칙을 준수하도록
명확히 하세요: 필드로 공유할 수 있는 값은 각 테스트마다 재초기화되는(freshly reinitialized in setUp()) 값이거나
불변(immutable) 값만 허용한다고 명시하고, mutable 상태를 공유해서는 안 된다는 경고를 추가해 주세요.
| ``` | ||
|
|
||
| **규칙:** | ||
| - `@Column` 필수 (모든 필드) | ||
| - 필드명과 DB 컬럼명 일치 | ||
| - nullable 명시 | ||
|
|
||
| ### Repository | ||
|
|
||
| ```java | ||
| public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> { | ||
| Optional<ChatRoom> findByMentoringId(Long mentoringId); | ||
| List<ChatRoom> findByIsGroup(boolean isGroup); | ||
| } | ||
| Commit : feat|fix|refactor|docs|test|chore|perf: <description> | ||
| Branch : type/issue-number-short-desc | ||
| ``` |
There was a problem hiding this comment.
1) Git 예시 코드 블록에 언어를 지정해 주세요 (Line 36)
MD040 경고를 없애려면 fenced code block에 언어를 지정하는 것이 좋습니다.
수정 제안
-```
+```text
Commit : feat|fix|refactor|docs|test|chore|perf: <description>
Branch : type/issue-number-short-desc</details>
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 36-36: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@claude.md` around lines 36 - 39, The fenced code block in claude.md (the Git
commit/branch example) lacks a language tag causing MD040; update the fenced
block that currently contains "Commit : feat|fix|refactor|docs|test|chore|perf:
<description>" and "Branch : type/issue-number-short-desc" to include a language
identifier (e.g., change the opening fence to ```text) so the block is
recognized as plaintext and the markdown linter warning is resolved.
- 관련 파일 작업 시에만 로드되도록
관련 이슈
작업 내용
쾌적한 클로드코드 사용을 위해 best practice 관점에서 문서들을 수정했습니다. 작업 내용은 아래와 같습니다.
CLAUDE.md 내용 대폭 감소
권장은 200 라인입니다. 이에 맞게 수정했고, 초과분은 rules 로 분리했습니다. 불필요한 내용(==
build.gradle과 같이 다른 파일로 유추할 수 있는 내용들)들은 제거했습니다.이모지 같은 것들도 제거했습니다.
문서 영문으로 작성
한글이 영문 대비 토큰을 2 ~ 3배 소모한다고 합니다. 이에 클로드코드가 로드하는 문서 전체를 영문으로 작성했습니다.
SKILL.md 보완
알림 관련 훅 제거
전역 설정으로 빼는 데 합당하다고 판단했습니다. 필요하신 분들은
~/.claude에 설정하는 것이 좋을 것 같습니다.컨벤션 검증 훅 제거
rules에 이미 명시되었기에 중복이라고 판단했고 제거했습니다.
특이 사항
리뷰 요구사항 (선택)