Files
claude-workspace/CLAUDE.md
joungmin 6ec083787e docs: expand CLAUDE.md with team workflow and role guides
- Add issue-to-code workflow (branch naming, commit message format)
- Add code quality standards and PR rules with template
- Add test strategy (pyramid, tools, naming conventions)
- Add Jenkins CI pipeline example with AI code review stage
- Add role-specific guides (PM, Planner, Developer, QA)
- Add common workflow diagram and automation prompts
- Add Makefile targets (start-issue, pr-ready, draft-pr)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 19:22:03 +09:00

17 KiB
Raw Blame History

CLAUDE.md 프로젝트 가이드

이 파일은 AI 코딩 어시스턴트(Claude, Cursor 등)가 이 저장소에서 작업할 때 따라야 할 규칙과 컨텍스트를 정의합니다. 반드시 숙지 후 작업하세요.


프로젝트 개요

항목 내용
프로젝트명 (프로젝트명을 여기에 입력하세요)
목적 (프로젝트의 목적을 한 줄로 설명하세요)
기술 스택 Python 3.11 · FastAPI · PostgreSQL 15 · React 18 · TypeScript
아키텍처 모놀리스 (추후 마이크로서비스 전환 예정)
주요 언어 한국어 (코드 내 주석 및 커밋 메시지는 영어 사용)

디렉터리 구조

프로젝트 저장 위치

모든 개발 프로젝트는 건별로 아래 경로에 저장합니다.

/Users/joungmin/workspaces/
├── {프로젝트명-A}/       ← 프로젝트 단위로 디렉터리 생성
├── {프로젝트명-B}/
└── ...

새 프로젝트 시작 시:

cd /Users/joungmin/workspaces
git clone https://gitea.cloud-handson.com/{org}/{repo}
# 또는
mkdir {프로젝트명} && cd {프로젝트명}

프로젝트 내부 구조 (표준)

/Users/joungmin/workspaces/{프로젝트명}/
├── backend/
│   ├── api/          # FastAPI 라우터 (엔드포인트 정의)
│   ├── models/       # SQLAlchemy DB 모델
│   ├── schemas/      # Pydantic 요청/응답 스키마
│   ├── services/     # 비즈니스 로직 레이어
│   └── core/         # 설정, 의존성 주입, 미들웨어
├── frontend/
│   └── src/
│       ├── components/  # 재사용 가능한 UI 컴포넌트
│       ├── pages/       # 라우트 단위 페이지
│       ├── hooks/       # 커스텀 React Hooks
│       └── api/         # API 클라이언트 (axios/fetch 래퍼)
├── tests/
│   ├── unit/
│   ├── integration/
│   └── e2e/
├── docs/             # 설계 문서
├── .env.example      # 환경 변수 템플릿 (실제 값 절대 포함 금지)
└── Makefile

코딩 컨벤션

Python (Backend)

  • PEP 8 준수, type hints 필수 (매개변수 및 반환값 모두)
  • Docstring: Google 스타일
  • 함수는 단일 책임 원칙(SRP) 준수, 50줄 초과 지양
  • 예외 처리 시 bare except: 금지, 반드시 구체적인 예외 타입 명시

JavaScript / TypeScript (Frontend)

  • ESLint + Prettier 설정 준수 (npm run lint 통과 필수)
  • 컴포넌트는 함수형만 사용, 클래스 컴포넌트 금지
  • any 타입 사용 금지, 불가피한 경우 unknown 후 타입 가드 사용
  • 상태 관리: 로컬 상태는 useState, 전역 상태는 별도 문서 참조

Git 브랜치 전략 (Gitflow)

main          ← 프로덕션 배포 전용 (직접 푸시 절대 금지)
develop       ← 통합 개발 브랜치
feature/*     ← 기능 개발 (예: feature/user-auth)
hotfix/*      ← 프로덕션 긴급 수정
release/*     ← 릴리즈 준비

커밋 메시지 (Conventional Commits)

feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
test: 테스트 코드 추가/수정
refactor: 리팩터링 (기능 변경 없음)
chore: 빌드, 설정 파일 수정

환경 변수 및 시크릿 관리

  • 모든 시크릿은 .env 파일에서 관리 (.gitignore에 반드시 포함)
  • .env.example에 키 이름만 기재, 실제 값은 절대 커밋 금지
  • AI가 코드를 작성할 때 API Key, 비밀번호, 토큰을 하드코딩하지 말 것
  • 환경 변수 접근: os.getenv("KEY_NAME") 또는 pydantic BaseSettings 사용

외부 시스템 연동

시스템 URL 용도
이슈 트래커 https://redmine.cloud-handson.com 작업 이슈 관리
CI/CD https://jenkins.cloud-handson.com 자동 빌드/배포
Git 서버 https://gittea.cloud-handson.com 소스 코드 관리
지식베이스 Obsidian Vault (/Users/joungmin/Documents/Obsidian Vault) 설계 문서 동기화, para document 관리법 사용

MCP 툴

외부 시스템은 MCP(Model Context Protocol) 툴을 통해 직접 제어할 수 있습니다. API 호출 대신 MCP 툴을 우선 사용하세요.

Jenkins (mcp__jenkins__*)

설명
get_jobs 잡 목록 조회
get_job_config 잡 config.xml 조회
create_job 새 잡 생성 (config.xml 필요)
edit_job 잡 설정 수정 (config.xml 필요)
delete_job 잡 삭제
trigger_build 빌드 트리거
get_build_status 빌드 상태 조회
get_build_log 빌드 로그 조회

Redmine (mcp__redmine__*)

설명
getIssues / getIssue 이슈 목록/상세 조회
createIssue 이슈 생성
updateIssue 이슈 수정
deleteIssue 이슈 삭제
getProjects / getProject 프로젝트 조회
createProject / updateProject 프로젝트 생성/수정
getTimeEntries / createTimeEntry 시간 기록 조회/생성
getWikiPage / updateWikiPage 위키 페이지 조회/수정
search 전체 검색
getCurrentUser 현재 로그인 사용자 조회

개발 방법론

  • 스프린트: 2주 주기 스크럼
  • 워크플로: Redmine 이슈 생성브랜치 생성PR 작성코드 리뷰Jenkins CI 통과develop 머지
  • 테스트 커버리지 목표: unit 80%+, integration 60%+
  • PR 머지 전 최소 1명의 코드 리뷰 승인 필요

이슈 → 코드 워크플로우

  1. 작업 시작 시 반드시 Redmine 이슈 번호 확인
  2. 브랜치명 형식: feature/RM-{이슈번호}-{간단설명} 예: feature/RM-342-user-auth-refactor
  3. 커밋 메시지: RM-{번호}: {Conventional Commit 메시지} 예: RM-342: feat: add JWT refresh token logic

코드 품질 기준

  • 새 함수는 반드시 docstring + type hints
  • 비즈니스 로직에 주석 필수
  • 복잡도(cyclomatic complexity) 10 이하 유지
  • 함수 길이 50줄 이하 권장

PR 규칙

  • PR 제목: [RM-{번호}] {작업 내용}
  • 최소 1명 리뷰어 승인 필요
  • Jenkins CI 통과 후 머지 가능

PR 본문 템플릿

## 변경 사항
- 

## 테스트 방법
- 

## 스크린샷 (UI 변경 시)

## 관련 이슈
RM-{번호}

테스트 전략

테스트 피라미드

  • Unit Tests (70%): 순수 함수, 비즈니스 로직
  • Integration Tests (20%): API 엔드포인트, DB 연동
  • E2E Tests (10%): 핵심 사용자 시나리오

도구

종류 Python JavaScript
Unit pytest Jest
Integration pytest + httpx Supertest
E2E Playwright
커버리지 pytest-cov (80% 목표) Istanbul (80% 목표)

테스트 명명 규칙

test_{대상}_{조건}_{기대결과}
예: test_user_login_with_invalid_password_returns_401

테스트 작성 지침

  • AAA 패턴 (Arrange, Act, Assert) + Given/When/Then 주석
  • Mocking은 외부 의존성(API, DB)만
  • 경계값, 엣지 케이스 반드시 포함
  • 테스트당 assert 최소화 (SRP 원칙)

Jenkins CI 파이프라인

pipeline {
    agent any
    stages {
        stage('Lint') {
            steps {
                sh 'ruff check . --output-format=github'
                sh 'mypy src/'
            }
        }
        stage('Unit Tests') {
            steps {
                sh 'pytest tests/unit/ -v --cov=src --cov-fail-under=80 --junitxml=test-results/unit.xml'
            }
            post {
                always {
                    junit 'test-results/unit.xml'
                    publishCoverage adapters: [coberturaAdapter('coverage.xml')]
                }
            }
        }
        stage('Integration Tests') {
            steps {
                sh 'pytest tests/integration/ -v --junitxml=test-results/integration.xml'
            }
        }
        stage('AI Code Review') {
            when { changeRequest() }
            steps {
                sh '''
                    git diff origin/develop...HEAD | \
                    claude -p "이 코드 변경사항을 리뷰해줘. 보안, 성능, 코딩 컨벤션 관점에서 문제점만 JSON으로 출력" \
                    > review_output.json
                '''
                archiveArtifacts 'review_output.json'
            }
        }
    }
}

팀 역할별 운영 가이드

모든 역할은 동일한 MCP 설정을 공유하되, 역할별 주요 도구와 프롬프트 패턴을 달리 사용합니다.

PM (프로젝트 매니저)

주요 도구: Redmine MCP, Obsidian MCP

지침

  • 이슈 생성 시: 제목, 담당자, 마감일, 우선순위, 예상 시간(h), 수락 기준(체크리스트) 필수 입력
  • 스프린트 리뷰 리포트는 Obsidian Sprints/ 폴더에 저장
  • 에픽-스토리-태스크 계층 구조 유지

주요 프롬프트 패턴

# 스프린트 현황 정리
"Redmine에서 이번 스프린트 이슈들의 상태를 가져와서 완료/진행중/대기/블로커로 분류하고 Obsidian Sprints/2026-W09.md에 정리해줘"

# 스프린트 계획 보조
"Redmine 백로그 상위 20개 이슈를 가져오고 예상 시간을 합산해서 2주 스프린트(팀원 4명, 주 40시간) 기준 소화 가능한 범위를 계획해줘"

# 회의록 → 이슈 자동 생성
"오늘 기획 회의 내용이야: [회의록] / 액션아이템을 추출해서 Redmine 이슈로 생성해줘. 담당자는 미정으로."

기획자 / 시스템 분석가

주요 도구: Obsidian MCP, Redmine MCP

지침

  • 요구사항 문서: Obsidian Requirements/{기능명}.md에 저장
  • 사용자 스토리 형식: "나는 {역할}로서 {기능}을 원한다. 왜냐하면 {이유} 때문이다."
  • 화면 정의서: Mermaid 다이어그램 또는 ASCII 와이어프레임 사용
  • 용어집(Glossary.md) 업데이트 필수

주요 프롬프트 패턴

# 요구사항 → 사용자 스토리 분해
"다음 기능 요구사항을 INVEST 원칙에 따라 사용자 스토리로 분해하고 수락 기준을 추가해서 Obsidian Requirements/기능명.md에 저장해줘: [요구사항]"

# API 명세 초안
"Obsidian Requirements/user-auth.md를 읽고 OpenAPI 3.0 명세 초안을 작성해줘. 엔드포인트, 요청/응답 스키마 포함."

# 시퀀스 다이어그램
"로그인 플로우를 Mermaid 시퀀스 다이어그램으로 그리고 Obsidian Diagrams/login-flow.md에 저장해줘"

개발자 (백엔드 / 프론트엔드)

주요 도구: Gitea MCP, Redmine MCP, Jenkins MCP

지침

  • 새 작업 시작: Redmine 이슈 확인 → 브랜치 생성 → CLAUDE.md 읽기
  • 코드 생성 시 기존 코드 스타일 분석 후 일관성 유지
  • 외부 라이브러리 추가 시 보안 취약점 먼저 확인
  • 레거시 코드 수정 시 회귀 테스트 먼저 작성

주요 프롬프트 패턴

# 이슈 기반 개발 시작
"Redmine 이슈 #342의 내용을 읽고 구현 계획을 세워줘. 필요한 파일 목록, 예상 작업 시간, 잠재적 위험 요소 포함."

# 코드 리뷰 요청
"feature/RM-342-user-auth 브랜치의 변경사항을 리뷰해줘. OWASP Top 10 보안 관점과 팀 컨벤션 준수 여부 중심으로."

# 빌드 실패 분석
"Jenkins 빌드 #123의 실패 로그를 가져와서 root cause를 분석하고 수정 방법을 제시해줘."

# 새 기능 구현
"Obsidian Requirements/payment-gateway.md의 명세를 읽고 FastAPI 엔드포인트와 서비스 레이어를 구현해줘. 기존 auth_service.py 패턴을 따라서."

QA 엔지니어

주요 도구: Jenkins MCP, Gitea MCP, Redmine MCP

지침

  • 테스트 케이스는 Redmine 이슈의 수락 기준에서 도출
  • 버그 이슈: 즉시 Blocker / Critical / Major / Minor 분류
  • 버그 리포트 필수 항목: 재현 단계, 기대 결과, 실제 결과, 환경 정보
  • 머지 전 Jenkins 회귀 테스트 자동 실행 확인

테스트 환경

환경 URL
DEV http://dev.company.com
STG http://staging.company.com
PRD http://app.company.com

주요 프롬프트 패턴

# 테스트 계획 수립
"Redmine 이슈 #342의 수락 기준을 읽고 테스트 케이스를 작성해줘. Happy Path, Negative Case, 경계값, 보안 케이스 모두 포함."

# 빌드 품질 분석
"Jenkins에서 최근 5개 빌드의 테스트 결과를 가져와서 flaky 테스트를 찾고 실패 트렌드를 분석해줘."

# 회귀 테스트 커버리지 확인
"이번 스프린트에서 변경된 Gitea PR 목록을 가져와서 테스트가 없는 PR 목록을 알려줘."

# E2E 테스트 시나리오 작성
"Obsidian Requirements/checkout-flow.md를 읽고 Playwright E2E 테스트 스크립트를 작성해줘. Page Object Model 패턴 사용."

공통 워크플로우: 이슈 → 개발 → 배포

[PM] Redmine 이슈 생성 (수락 기준 포함)
        ↓
[개발자] 이슈 확인 → 브랜치 생성 (feature/RM-{번호}-{설명})
        ↓
[개발자] 구현 + 단위 테스트 작성 (커버리지 80%+)
        ↓
[개발자] PR 생성 → PR 본문 템플릿 작성 → 리뷰어 지정
        ↓
[QA / 개발자] 코드 리뷰 + Jenkins CI 자동 실행 (lint → unit → integration)
        ↓
[QA] STG 환경에서 수락 기준 기반 테스트
        ↓
[개발자] 승인 후 develop 머지
        ↓
[PM] Redmine 이슈 상태 → 완료 처리

Claude Code 자동화 프롬프트 (전체 사이클)

# 이슈 기반 브랜치 자동 생성 (Makefile)
make start-issue   # Redmine 이슈 번호 입력 → 브랜치 자동 생성

# PR 전 체크
make pr-ready      # lint + test 자동 실행

# PR 설명 초안 생성
claude -p "현재 브랜치의 git diff를 분석해서 PR 본문 초안을 한국어로 작성해줘. Conventional Commit 형식 준수."

# 배포 후 이슈 완료 처리
"Redmine 이슈 #342 상태를 완료로 변경하고 실제 소요 시간을 기록해줘."

금기 사항 (AI 포함 모든 기여자 준수)

  • main 브랜치 직접 푸시 절대 금지
  • API Key, 비밀번호 등 시크릿 하드코딩 절대 금지
  • TODO 주석은 반드시 Redmine 이슈 번호와 함께 작성 (# TODO(#123): 설명)
  • 테스트 없이 핵심 비즈니스 로직 변경 금지
  • print() 디버그 코드를 프로덕션 코드에 남기지 말 것 (logger 사용)

주요 명령어

# 개발 서버 시작 (backend + frontend 동시 실행)
make dev

# 이슈 기반 브랜치 자동 생성
make start-issue     # Redmine 이슈 번호 + 브랜치 설명 입력 → 브랜치 생성

# PR 전 체크 (lint + test)
make pr-ready

# 테스트 실행
make test

# 특정 테스트만 실행
pytest tests/unit/ -v

# 린트 검사 / 자동 수정
make lint
make lint-fix

# DB 마이그레이션 생성 / 적용
alembic revision --autogenerate -m "description"
alembic upgrade head

Makefile

.PHONY: dev test lint lint-fix pr-ready start-issue draft-pr

start-issue:
	@read -p "프로젝트명 (/Users/joungmin/workspaces/ 내): " PROJ; \
	read -p "Redmine 이슈 번호: " RM_NUM; \
	read -p "브랜치 설명 (영어 kebab-case): " DESC; \
	cd /Users/joungmin/workspaces/$$PROJ; \
	git checkout develop; \
	git pull origin develop; \
	git checkout -b "feature/RM-$$RM_NUM-$$DESC"

pr-ready:
	make lint
	make test
	@echo "✅ 린트 & 테스트 완료. PR 생성 준비됨."

draft-pr:
	claude -p "현재 브랜치의 git diff를 분석해서 PR 본문 초안을 한국어로 작성해줘. Conventional Commit 형식 준수."

참조 문서

문서 경로 내용
디자인 패턴 가이드 SOFTWARE_GUIDE.md 생성·구조·행위 패턴 정의, 빠른 선택 가이드 포함

새 모듈·클래스 설계 시 SOFTWARE_GUIDE.md빠른 선택 가이드를 먼저 확인하세요.


AI 작업 지침

AI가 이 저장소에서 코드를 생성하거나 수정할 때 반드시 따라야 할 규칙입니다.

  1. 기존 패턴 우선: 새 코드 작성 전 인접 파일의 구조와 패턴을 파악하고 일관성 유지
  2. 최소 변경 원칙: 요청된 변경 범위를 벗어나는 수정은 하지 말 것
  3. 테스트 동반 작성: 새 함수/로직 작성 시 대응하는 단위 테스트 함께 제안
  4. 불확실 시 질문: 요구사항이 모호하면 임의로 결정하지 말고 반드시 확인 요청
  5. 보안 우선: 인증/인가 로직은 임의로 우회하거나 단순화하지 말 것

팀 연락처

역할 담당자
PM / Tech Lead JM