Skip to content

chore: Claude Code 문서 개선#714

Open
whqtker wants to merge 8 commits intodevelopfrom
chore/713-claude-code
Open

chore: Claude Code 문서 개선#714
whqtker wants to merge 8 commits intodevelopfrom
chore/713-claude-code

Conversation

@whqtker
Copy link
Copy Markdown
Member

@whqtker whqtker commented May 3, 2026

관련 이슈

작업 내용

쾌적한 클로드코드 사용을 위해 best practice 관점에서 문서들을 수정했습니다. 작업 내용은 아래와 같습니다.

CLAUDE.md 내용 대폭 감소

권장은 200 라인입니다. 이에 맞게 수정했고, 초과분은 rules 로 분리했습니다. 불필요한 내용(== build.gradle 과 같이 다른 파일로 유추할 수 있는 내용들)들은 제거했습니다.

이모지 같은 것들도 제거했습니다.

문서 영문으로 작성

한글이 영문 대비 토큰을 2 ~ 3배 소모한다고 합니다. 이에 클로드코드가 로드하는 문서 전체를 영문으로 작성했습니다.

SKILL.md 보완

알림 관련 훅 제거

전역 설정으로 빼는 데 합당하다고 판단했습니다. 필요하신 분들은 ~/.claude 에 설정하는 것이 좋을 것 같습니다.

컨벤션 검증 훅 제거

rules에 이미 명시되었기에 중복이라고 판단했고 제거했습니다.

특이 사항

리뷰 요구사항 (선택)

whqtker added 6 commits May 3, 2026 13:54
- 영문으로 작성
- rules로 분리
- testing.md를 참조하여 작성하는 방식으로
- rules에 이미 관련 문서가 있으므로, 중복
@whqtker whqtker self-assigned this May 3, 2026
@whqtker whqtker added the 문서 Improvements or additions to documentation label May 3, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 3, 2026

Warning

Rate limit exceeded

@whqtker has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 28 minutes and 7 seconds before requesting another review.

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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 1efd7cf5-2f27-4aac-bc8f-19b1ac5601fe

📥 Commits

Reviewing files that changed from the base of the PR and between 3b4d746 and 6fb7924.

📒 Files selected for processing (4)
  • .claude/rules/code-style.md
  • .claude/rules/database.md
  • .claude/rules/testing.md
  • .claude/settings.json

Walkthrough

이번 변경사항은 개발 환경 자동화를 정리하고 코드 컨벤션 문서화 체계를 새롭게 구축한 작업입니다. 구체적으로는:

  1. 알림 시스템 제거 - Windows PowerShell과 교차 플랫폼 Python 알림 스크립트, 그리고 관련 설정을 삭제했습니다.
  2. 자동 검증 스크립트 제거 - Java 파일 후처리 검증(wildcard import, 엔티티 필드 애노테이션) 로직을 삭제했습니다.
  3. 규칙 문서 신규 작성 - 코드 스타일, 데이터베이스 JPA 매핑, 통합 테스트 패턴을 문서화한 세 개의 규칙 파일을 추가했습니다.
  4. 스킬 워크플로우 업데이트 - PR 검토와 테스트 생성 스킬의 지침과 체크리스트를 영어로 재구성했습니다.
  5. 가이드 문서 전환 - 한국어 기술 상세 가이드(claude.md)를 간결한 영어 참조 문서로 변환했습니다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • wibaek
  • lsy1307
  • Hexeong
  • JAEHEE25
  • sukangpunch
  • Gyuhyeok99
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Linked Issues check ❓ Inconclusive PR이 이슈 #713 해결을 목표로 하나, 이슈에 구체적인 작업 항목이 없어 요구사항 검증이 불가능합니다. 이슈 #713에 구체적인 체크리스트 항목을 추가하여 PR이 실제로 요구사항을 충족하는지 명확히 검증할 수 있도록 해주세요.
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed PR 설명이 템플릿 구조를 따르고 있으며, 관련 이슈, 작업 내용, 특이사항을 체계적으로 기재했습니다.
Out of Scope Changes check ✅ Passed 변경사항이 모두 Claude Code 문서 구조 개선에 관련되어 있으며, 범위 내의 변경으로 판단됩니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed 제목은 PR의 주요 변경사항(Claude Code 문서 및 구조 개선)을 정확하게 반영하고 있으며, 개발자의 관점에서 핵심 내용을 간결하게 요약하고 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/713-claude-code

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.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 28 minutes and 7 seconds.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between be3c6c7 and 3b4d746.

📒 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
  • .gitignore
  • claude.md
💤 Files with no reviewable changes (4)
  • .claude/hooks/notify.ps1
  • .claude/settings.json
  • .claude/hooks/notify.py
  • .claude/hooks/post-edit-check.py

Comment thread .claude/rules/database.md
Comment on lines +5 to +7
- Every field requires `@Column(name = "...", nullable = ...)`
- Field name must match DB column name exactly (snake_case)
- `@Table(name = "...")` required on every entity class
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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.

Comment on lines +30 to +31
- Ref: `CLAUDE.md` - Architecture

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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

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

Comment on lines 75 to 97
```
## 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
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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.

Comment on lines 45 to 47
```

**편의 메서드 작성 팁:**

- 한국어 메서드명 사용 (가독성)
- 자주 사용되는 기본값 조합만 제공
- 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
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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

Comment on lines +82 to +88
// shared test data as fields if reused across @Nested classes
// private Entity entity;

```java
@TestContainerSpringBootTest
class ChatServiceTest {
@BeforeEach
void setUp() {
// initialize shared fixtures here
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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 상태를 공유해서는 안 된다는 경고를 추가해 주세요.

Comment thread claude.md
Comment on lines 36 to 39
```

**규칙:**
- `@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
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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.

- 관련 파일 작업 시에만 로드되도록
@whqtker whqtker changed the title chore: Claude Code 구조 변경 chore: Claude Code 문서 개선 May 3, 2026
@whqtker whqtker added the 최종 리뷰 최소 1명 필수 label May 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

문서 Improvements or additions to documentation 최종 리뷰 최소 1명 필수

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore: Claude Code 기능 보완

1 participant