Skip to content

Conversation

@kgy1008
Copy link
Member

@kgy1008 kgy1008 commented Sep 20, 2025

📣 Jira Ticket

EDMT-451

👩‍💻 작업 내용

Claude Code 개발 효율성 향상을 위한 자동화 도구 및 에이전트를 추가했습니다.

추가된 기능

  • 자동 커밋 도구 (/commit): 스테이징된 변경사항을 분석하여 EduKit 컨벤션에 맞는 커밋 메시지 자동 생성
  • 자동 PR 생성 도구 (/pr): 브랜치 분석 후 종합적인 PR 설명과 테스트 플랜 자동 생성
  • Flyway Migration Generator: JPA 엔티티 변경사항 감지 후 마이그레이션 파일 자동 생성
  • Swagger Documenter: API 컨트롤러 분석 후 OpenAPI 문서 자동 생성

문서화

  • Claude Code 프로젝트 가이드 문서 (CLAUDE.md) 추가
  • EduKit 아키텍처, 빌드 명령어, 개발 워크플로우 가이드 포함

Summary by CodeRabbit

  • 문서
    • Flyway Migration Generator 에이전트 문서 추가: 사용 시나리오, 기능, MySQL/Flyway 템플릿·롤백 가이드 제공.
    • Swagger API Documenter 에이전트 문서 추가: 컨트롤러/DTO 주석 규칙, OpenAPI 3.0·버저닝 안내.
    • /commit 명령 문서 추가: 변경 유형 분석, Jira 연동 커밋 메시지 템플릿 및 워크플로 예시 제공.
    • /pr 명령 문서 추가: 브랜치 분석, PR 제목/본문·테스트 플랜 템플릿 및 생성 절차 안내.
    • Comprehensive Test Generator 에이전트 문서 추가: 단위/통합/성능/보안 테스트 전략과 샘플 템플릿 제공.

@kgy1008 kgy1008 self-assigned this Sep 20, 2025
@coderabbitai
Copy link

coderabbitai bot commented Sep 20, 2025

Walkthrough

문서 추가: Flyway 마이그레이션 생성 에이전트, Swagger 문서화 에이전트, 종합 테스트 생성 에이전트, 자동 커밋 명령(/commit), PR 자동화 명령(/pr) 등 5개의 가이드 파일이 .claude/agents.claude/commands 경로에 신규 생성됨. 기존 코드나 공개 API 선언 변경 없음.

Changes

Cohort / File(s) Summary
Agent 문서 추가 (Flyway 마이그레이션)
.claude/agents/flyway-migration-generator.md
Flyway 마이그레이션 SQL 자동생성 에이전트 설명: JPA 엔티티/스키마 변경 분석, MySQL(Flyway) 호환 SQL 생성, EduKit 네이밍 규칙(V{version}__{description}.sql), 마이그레이션 템플릿·롤백 가이드 및 Asia/Seoul 타임존·경로(edukit-api/src/main/resources/db/migration/) 컨텍스트 명시.
Agent 문서 추가 (Swagger 문서화)
.claude/agents/swagger-documenter.md
Swagger/OpenAPI 문서화 에이전트 설명: Spring 컨트롤러/DTO 분석, 누락된 Swagger 어노테이션 생성·검증, OpenAPI 3.0 스펙 생성·업데이트, EduKit 버전링(예: /v1/)·환경(다중 모듈, Java 21, Spring Security) 컨텍스트 포함.
Agent 문서 추가 (종합 테스트 생성)
.claude/agents/test-generator.md
종합 테스트 생성 에이전트 설명: 단위·통합·성능·보안·동시성 테스트 등 포괄적 테스트 매트릭스 생성, EduKit 특화 샘플 템플릿·설정(application-test.yml), 테스트 전략 및 기대 산출물 명시.
명령 문서 추가 (자동 커밋)
.claude/commands/commit.md
/commit 슬래시 명령 문서: 스테이징된 변경 분석, 변경 유형 판별, Jira 티켓 추출(옵션), EduKit/Jira 형식 커밋 메시지(한국어 포함) 생성·커밋 수행 흐름과 템플릿 제시.
명령 문서 추가 (PR 자동화)
.claude/commands/pr.md
/pr 슬래시 명령 문서: 브랜치 기반 커밋 분석, PR 제목/본문·테스트플랜·Jira 연동 생성, 안전 옵션(기본은 푸시 전 확인), EduKit PR 템플릿 및 사용 예시 제공.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Dev as 개발자
  participant AgentF as Flyway 에이전트
  participant JPA as JPA 엔티티
  participant DB as DB 스키마 (MySQL/RDS)
  participant VCS as 저장소 (migrations/*)

  Dev->>AgentF: 요청 (엔티티 변경 감지 또는 수동 요청)
  AgentF->>JPA: 엔티티 스캔 및 변경점 추출
  AgentF->>DB: 현재 스키마/제약 확인
  AgentF->>AgentF: 차이 분석 → MySQL용 SQL 생성 (V{ver}__{desc}.sql)
  AgentF->>VCS: 마이그레이션 파일 생성/출력
  AgentF-->>Dev: 생성된 SQL과 검증 노트 반환
Loading
sequenceDiagram
  autonumber
  participant Dev as 개발자
  participant AgentS as Swagger 에이전트
  participant API as Spring 컨트롤러/DTO
  participant Spec as OpenAPI 스펙

  Dev->>AgentS: 문서화 요청
  AgentS->>API: 컨트롤러·DTO 분석
  AgentS->>API: 누락된 어노테이션 제안/패치
  AgentS->>Spec: OpenAPI 3.0 스펙 생성/갱신
  AgentS-->>Dev: 주석·스펙 산출물 반환
Loading
sequenceDiagram
  autonumber
  participant Dev as 개발자
  participant AgentT as Test 에이전트
  participant Code as 소스코드 (서비스/리포지토리/컨트롤러)
  participant Tests as 테스트 코드

  Dev->>AgentT: 테스트 생성 요청
  AgentT->>Code: 코드·의존성·리스크 분석
  AgentT->>AgentT: 테스트 매트릭스·데이터·환경 생성
  AgentT->>Tests: 단위·통합·성능·보안 테스트 코드 생성
  AgentT-->>Dev: 테스트 코드와 실행 가이드 반환
Loading
sequenceDiagram
  autonumber
  participant Dev as 개발자
  participant CmdC as /commit 커맨드
  participant Git as Git
  participant Jira as Jira

  Dev->>CmdC: /commit 실행
  CmdC->>Git: staged 변경 분석
  CmdC->>Jira: 티켓 추출/확인 (선택)
  CmdC->>CmdC: 커밋 메시지 생성 (컨벤션·다국어)
  CmdC->>Git: git commit 수행
  CmdC-->>Dev: 결과 출력
Loading
sequenceDiagram
  autonumber
  participant Dev as 개발자
  participant CmdP as /pr 커맨드
  participant Git as Git & GH CLI
  participant Jira as Jira

  Dev->>CmdP: /pr 실행
  CmdP->>Git: base 분기점 이후 커밋 분석
  CmdP->>Jira: 이슈 참조 추출
  CmdP->>CmdP: PR 제목·본문·테스트플랜 생성
  CmdP->>Git: (옵션) 브랜치 push 및 gh pr create
  CmdP-->>Dev: PR 링크/요약 반환
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

새 문서 땅에 홱 파고, 아이디어 당근 심은 토끼
마이그레이션 씨앗 심고 스웨거 길에 표지판 세우네
테스트 물주고 커밋·PR 꽃 피우니
깃허브 들판에 깡총—배포를 향해 달린다! 🐰✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description Check ⚠️ Warning PR 설명에는 Jira 티켓과 작업 내용 섹션이 충실히 작성되었으나 템플릿에서 요구하는 “## 📝 리뷰 요청 & 논의하고 싶은 내용” 섹션이 누락되어 템플릿 구조를 완전히 따르지 않습니다. 템플릿의 “## 📝 리뷰 요청 & 논의하고 싶은 내용” 섹션을 추가하여 검토 요청 사항이나 논의하고 싶은 내용을 구체적으로 작성해 주세요.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed 제목은 단일 문장으로 PR의 주요 변경 사항인 "Claude Code 개발 도구 및 자동화 스크립트 추가"를 명확히 요약하고 있어 스캔 시에도 의도가 잘 전달됩니다.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/EDMT-451

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

Copy link

@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: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.claude/commands/commit.md (1)

50-57: 보안 가드레일과 드라이런(미리보기) 단계 추가

비밀/토큰/키가 메시지에 새어 나가지 않도록 시크릿 스캐닝 및 커밋린트 검증을 선행하고, 커밋 전 미리보기 확인 단계를 넣으세요.

적용 제안(diff):

  ## Expected Behavior
- 1. Analyze current git status and staged changes
+ 1. Analyze current git status and staged changes (dry-run preview)
  2. Determine the primary type of changes
  3. Extract or prompt for Jira ticket number if not found
- 4. Generate descriptive commit message
- 5. Execute git commit with generated message
+ 4. Run checks: secret scan, commitlint, Jira key present
+ 5. Show final message preview and confirm
+ 6. Execute git commit with generated message
- 6. Include Claude Code attribution
+ 7. (Optional) Add bot attribution
🧹 Nitpick comments (8)
.claude/commands/commit.md (2)

17-25: 커밋 타입 명칭 표준화(Conventional Commits와 호환)

[refac], [dependency] 표기는 비표준입니다. feat|fix|refactor|docs|test|chore(deps) 등으로 정렬하면 도구 호환성이 좋아집니다.

적용 제안(diff):

- - `[refac] 리팩토링: {refactor description}` - for code refactoring
- - `[dependency] 의존성 업데이트: {dependency description}` - for dependency updates
+ - `refactor: {리팩토링 설명}` - 코드 리팩토링
+ - `chore(deps): {업데이트 요약}` - 의존성 업데이트
+ - 형식: `[EDMT-123] <type>(optional scope): <summary>`

43-48: 저자 표기 정책 및 PII/법적 컴플라이언스 확인 필요

Co-Authored-By: Claude <noreply@anthropic.com> 사용 전, 조직의 저작권/서명(DCO) 정책과 외부 저자 표기 허용 여부를 확인하세요. Opt‑in 옵션으로 전환 권장.

적용 제안(diff):

- 🤖 Generated with Claude Code
- Co-Authored-By: Claude <noreply@anthropic.com>
+ 🤖 Generated by EduKit Bot (optional)
+ # Use `--with-coauthor` to add:
+ # Co-Authored-By: EduKit-Bot <bot@edukit.local>
.claude/commands/pr.md (1)

18-60: PR 템플릿에 위험도/호환성/보안 섹션 추가 제안

릴리즈 품질 향상을 위해 영향도, 역호환성, 스크린샷/스키마 diff, 보안 체크리스트를 명시하세요.

 ## PR Template Format
 ```markdown
@@
 ## Test Plan
@@
 ### 🔍 Code Quality
@@
+## ⚠️ Risk & Impact
+- Backward compatibility: {Yes/No, details}
+- User-facing changes: {screenshots or API examples}
+- Rollout plan / feature flag: {details}
+
+## 🔐 Security
+- AuthZ/AuthN changes reviewed: {Yes/No}
+- Secrets/config handled via vault: {Yes/No}
+- Threat model notes: {summary}
+
+## 🗄️ DB / API Contract
+- Migration included and reversible plan documented: {Yes/No}
+- API schema changes with OpenAPI diff attached: {link}

</blockquote></details>
<details>
<summary>.claude/agents/swagger-documenter.md (2)</summary><blockquote>

`7-13`: **생성 규칙에 “비파괴/보존” 원칙과 수동 주석 보호 규칙 추가**

자동 주석 보강 시 수동 작성 내용 덮어쓰지 않도록 idempotent 전략(머지 모드, 보호 마커)과 변경 미리보기를 명시하세요.  


```diff
 - Updates existing controllers with missing documentation
+ - Preserves manual annotations; only fills missing parts (idempotent)
+ - Uses protected regions (// DOC-BEGIN AUTO / // DOC-END AUTO)
+ - Produces a diff preview instead of in-place overwrite

29-33: 스키마 정합성 검증 체크 추가 제안

PathVariable/RequestParam 불일치, enum/nullable, 페이지네이션 파라미터 표준화 등 정합성 규칙을 추가하면 품질이 올라갑니다.

추가 항목:

  • Path 변수와 메서드 시그니처 이름 일치 검증
  • 공통 오류 응답 스키마(ProblemDetail) 강제
  • Pageable/Sort 표준 스펙 문서화
.claude/agents/flyway-migration-generator.md (3)

27-35: 버전 충돌 방지를 위한 타임스탬프 기반 버전 규칙 권장

여러 개발자가 병렬 작업 시 단순 증가 버전은 충돌합니다. 타임스탬프 기반 VyyyyMMddHHmmss__desc.sql로 통일 권장.

- - Naming convention: `V{version}__{description}.sql`
+ - Naming convention: `V{yyyyMMddHHmmss}__{kebab-description}.sql` (UTC or Asia/Seoul, team-wide)

6-18: 파괴적 변경 가드레일(대용량 테이블/다운타임) 명시

컬럼 타입 변경/인덱스 재작성 등은 다운타임 위험. 온라인 변경 전략과 사전 검증을 프로세스에 포함하세요.

추가 권장 사항:

  • 대용량 테이블: pt-online-schema-change 또는 온라인 DDL 고려
  • 마이그레이션 타임아웃/락 모니터링, 트랜잭션 경계 명시
  • Pre‑prod 리허설 및 실행 계획(EXPLAIN) 캡처

36-51: 마이그레이션 템플릿에 표준 헤더/세이프티 체크 추가

DDL 세이프티, 인덱스 이름 규칙, 엔진/캐릭터셋 지정 등을 포함하면 재현성과 일관성이 올라갑니다.

 -- Migration: V{version}__{description}.sql
@@
 -- Date: {current date}
+-- Env: {dev|staging|prod}
+-- Charset/Collation: utf8mb4 / utf8mb4_0900_ai_ci
+-- Engine: InnoDB
+-- Safe-guard: SET lock_wait_timeout=60; SET sql_safe_updates=1;
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 815a163 and 9d2cf77.

📒 Files selected for processing (4)
  • .claude/agents/flyway-migration-generator.md (1 hunks)
  • .claude/agents/swagger-documenter.md (1 hunks)
  • .claude/commands/commit.md (1 hunks)
  • .claude/commands/pr.md (1 hunks)
🔇 Additional comments (3)
.claude/agents/flyway-migration-generator.md (1)

27-35: Flyway Community Edition 명시 필요
현재 edukit-api/build.gradleorg.flywaydb:flyway-coreorg.flywaydb:flyway-mysql 의존성만 추가되어 있어 Community Edition을 사용 중입니다. 문서에 Flyway Community Edition임을 명시해주세요.

.claude/commands/pr.md (1)

84-92: 드래프트 PR/드라이런 및 라벨/리뷰어 자동화 고려 — PR 템플릿 존재 여부 재검증 필요

생성 전에 미리보기(드라이런), 드래프트 옵션, 기본 라벨/리뷰어 지정 추가 제안.
검증 결과: develop 브랜치와 gh 설치는 통과(스크립트에 오류 출력 없음). .github/PULL_REQUEST_TEMPLATE 검색은 fd가 숨김파일을 기본 제외하여 실패로 표시되어 템플릿 존재 여부 불확실 — 아래로 재검증 권장.

  ## Expected Behavior
  1. Check git status and current branch
  2. Compare with develop branch to get all commits
@@
- 7. Create PR using GitHub CLI
- 8. Return PR URL for easy access
+ 7. Create Draft PR using GitHub CLI (use `--ready` to mark ready)
+ 8. Apply default labels and reviewers
+ 9. Output PR URL and summary preview

권장 검증 스크립트(숨김파일 포함 및 대체 검사):

#!/bin/bash
# develop 브랜치/PR 템플릿/gh 설치 확인 (숨김파일 포함 검색)
git rev-parse --verify develop >/dev/null 2>&1 || echo "Missing local 'develop' branch"
fd -H -g '.github/PULL_REQUEST_TEMPLATE*' || echo "PR template not found with fd -H"
# fallback: 직접 확인
if [ -d ".github" ]; then
  ls -la .github | rg 'PULL_REQUEST_TEMPLATE' || echo "PR template not found in .github/"
fi
gh --version >/dev/null 2>&1 || echo "'gh' not installed"
.claude/agents/swagger-documenter.md (1)

21-28: Spring Boot 3.5.3 버전 확인 완료 - springdoc-openapi 버전은 2.8.9로 정확

검증 결과:

  • Spring Boot 버전: 3.5.3 (문서 표기와 일치)
  • springdoc-openapi 버전: 2.8.9 (OpenAPI 3.0.1 지원)

Spring Boot 3.5.3과 springdoc-openapi-starter-webmvc-ui 2.8.9 조합은 정확하며, OpenAPI 3.0.1 사양을 따릅니다. 문서의 기술 스택 정보가 실제 프로젝트 설정과 일치합니다.

Copy link

@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: 0

🧹 Nitpick comments (8)
.claude/commands/commit.md (4)

64-74: 중복 헤딩(MD024) 제거/명확화 필요

"## Usage Examples"가 앞서 38행에도 존재합니다. 린트 경고(MD024) 해소를 위해 두 번째 헤딩을 변경하세요.

-## Usage Examples
+## Advanced Usage
 ```bash
 # Safe default - only staged files
 /commit

12-16: 커밋 메시지 포맷 일관성 정의

본문은 “EduKit 형식: [prefix] descriptive message”라 하나, 예시는 [EDMT-123] ...만 사용합니다. 권장 표준을 하나로 고정하세요(예: [EDMT-123] [feat] ...).

-- Generates commit messages in EduKit format: `[prefix] descriptive message`
+- Generates commit messages in EduKit format: `[EDMT-123] [feat] descriptive message`
 ...
-[EDMT-123] 새로운 기능: 사용자 인증 API 엔드포인트 추가
+[EDMT-123] [feat] 사용자 인증 API 엔드포인트 추가

Also applies to: 44-48


6-8: 전제 조건(Prerequisites) 섹션 추가 제안

사용 도구 명시가 없어 온보딩에 지연이 생길 수 있습니다. git 버전과 권장 환경을 명시하세요.

 ## Description
 Automatically analyzes staged changes and generates appropriate commit messages following EduKit's commit conventions and Jira ticket format.
+
+## Prerequisites
+- git >= 2.30
+- Jira 티켓 키(예: EDMT-123)를 추출할 수 있도록 브랜치명/커밋 메시지 관례 정착

59-63: 안전한 드라이런 옵션 제안

실제 커밋 전에 메시지만 확인할 수 있는 --dry-run은 안전성과 채택률을 높입니다. 사용 예와 동작을 추가하세요.

 ## Safety Options
 - Default: Only commit staged files
 - `--stage`: Interactive staging with `git add -p`
 - `--stage-all`: Stage all modified files (use with caution)
+- `--dry-run`: 커밋 실행 없이 생성될 메시지만 출력
.claude/commands/pr.md (4)

97-106: 중복 헤딩(MD024) 제거/명확화 필요

"## Usage Examples"가 72행에도 있어 중복입니다. 두 번째 헤딩을 변경하세요.

-## Usage Examples
+## Advanced Usage
 ```bash
 # Safe default - asks before pushing
 /pr

81-89: 기준 브랜치 비교 대상을 origin/develop으로 고정

로컬 develop이 최신이 아닐 수 있습니다. 비교 대상과 동작을 원격 기준으로 명확히 하세요.

-2. Compare with develop branch to get all commits
+2. `git fetch origin` 후 `origin/develop`과 비교하여 커밋 수집
 ...
-7. Create PR using GitHub CLI (only if remote branch exists)
+7. 원격 브랜치가 없으면 확인 후 push(옵트인) → GitHub CLI로 PR 생성

59-66: 전제 조건(Prerequisites) 섹션 추가

gh 로그인/권한 미비로 실패할 수 있습니다. 요구사항을 명시하세요.

 ## EduKit-Specific Context
 - Base branch: `develop`
 ...
 - Common change patterns:
   - API additions in edukit-api
   - Business logic in edukit-core
   - External integrations in edukit-external
   - Database migrations in Flyway
+
+## Prerequisites
+- GitHub CLI (`gh`) 설치 및 로그인: `gh auth login`
+- 필요 권한: `repo` (PR 생성/라벨/설명 업데이트)
+- CI에서는 `GH_TOKEN` 또는 `GITHUB_TOKEN` 설정 필요

10-15: Jira 키 추출 규칙 명시 요청

“Jira 참조 포함”이 모호합니다. EDMT 키 추출 정규식과 우선순위를 문서에 명시하세요.

 - Includes Jira ticket references
+ - Includes Jira ticket references (EDMT-\d+)
+   - Extraction order: 브랜치명 > 마지막 N개 커밋 메시지 > 수동 입력
+   - Regex: `\bEDMT-\d+\b`
 ...
-4. Extract Jira ticket numbers
+4. Extract Jira ticket numbers (`EDMT-\d+`) using the above order; fallback to prompt

Also applies to: 81-89

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9647d99 and 4409ef3.

📒 Files selected for processing (4)
  • .claude/agents/flyway-migration-generator.md (1 hunks)
  • .claude/agents/test-generator.md (1 hunks)
  • .claude/commands/commit.md (1 hunks)
  • .claude/commands/pr.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .claude/agents/flyway-migration-generator.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • .claude/agents/test-generator.md
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
.claude/commands/commit.md

64-64: Multiple headings with the same content

(MD024, no-duplicate-heading)

.claude/commands/pr.md

96-96: Multiple headings with the same content

(MD024, no-duplicate-heading)

🔇 Additional comments (3)
.claude/commands/commit.md (2)

15-16: 과거 피드백 반영 확인: 자동 스테이징 비활성 기본값

“이미 스테이징된 파일만 커밋”으로 안전 기본값이 명확히 반영되었습니다. 좋습니다.


17-24: 확인 완료 — [refac] 표기 일관성 확인됨

git log 결과: feat 5, refac 3, fix 2, docs 1 — [refactor] 표기 없음. 문서(.claude/commands/commit.md)의 [refac] 표기는 레포 관행과 일치하므로 변경 불필요합니다.

.claude/commands/pr.md (1)

15-16: 이전 위험 지적사항 반영 확인: 기본 푸시 비활성/옵트인

기본 푸시 비활성, --push 옵트인, 확인 프롬프트가 문서화되어 과거 피드백을 충실히 반영했습니다. 좋습니다.

Also applies to: 91-95

@kgy1008 kgy1008 merged commit c7b1ee2 into develop Sep 20, 2025
2 checks passed
@kgy1008 kgy1008 deleted the feat/EDMT-451 branch September 20, 2025 16:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants