{ "name": "Git Workflow Rules", "description": "Git 작업 흐름을 관리하기 위한 규칙", "rules": { "branchNaming": { "pattern": "^(feature|bugfix|hotfix|release)/[a-z0-9-]+$", "examples": [ "feature/user-authentication", "bugfix/login-error", "hotfix/security-patch" ] }, "commitMessage": { "format": "(): ", "types": ["feat", "fix", "docs", "style", "refactor", "test", "chore"], "maxLength": 72 }, "pullRequest": { "requireDescription": true, "requireReviewers": 1, "requireTests": true }, "cicd": { "pipelines": { "pr": { "triggers": "모든 풀 리퀘스트", "stages": [ "코드 린트", "단위 테스트", "통합 테스트", "빌드 검증", "성능 프로파일링" ], "requirements": "모든 스테이지 통과 필요" }, "main": { "triggers": "메인 브랜치 병합 시", "stages": [ "전체 테스트 스위트", "코드 품질 분석", "보안 취약점 스캔", "빌드 및 아티팩트 생성", "스테이징 환경 배포" ], "notifications": "팀 채널에 배포 알림" }, "release": { "triggers": "릴리스 태그 또는 릴리스 브랜치 병합", "stages": [ "버전 번호 검증", "릴리스 노트 생성", "프로덕션 환경 배포", "스모크 테스트", "모니터링 알림 설정" ], "approvals": "DevOps 팀 승인 필요" } }, "environments": { "dev": { "purpose": "개발 중인 기능 테스트", "deployment": "PR별 임시 환경 또는 개발자 환경", "access": "개발팀 내부" }, "staging": { "purpose": "릴리스 전 통합 테스트", "deployment": "메인 브랜치 자동 배포", "dataStrategy": "익명화된 프로덕션 데이터 샘플" }, "production": { "purpose": "실제 사용자 서비스", "deployment": "수동 승인 후 배포", "rollback": "즉시 롤백 메커니즘 구현" } }, "artifacts": { "storage": "AWS S3, GCP Storage, Azure Blob", "versioning": "Git SHA 또는 시맨틱 버전", "retention": "최근 10개 빌드 보관" }, "tools": { "ci": ["GitHub Actions", "Jenkins", "GitLab CI", "CircleCI"], "deployment": ["Kubernetes", "Docker", "AWS CDK", "Terraform"], "monitoring": ["Datadog", "New Relic", "Prometheus"] } }, "codeReview": { "process": { "steps": [ "자동화된 검사 통과 확인", "코드베이스 이해와 맥락 파악", "코드 품질 및 설계 검토", "기능 요구사항 충족 여부 확인", "피드백 제공 및 토론", "수정 후 재검토", "승인 및 병합" ], "timeframe": "24시간 이내 첫 응답, 48시간 이내 검토 완료", "size": "PR당 최대 500라인 변경 권장" }, "checklist": { "functionality": [ "기능 요구사항 충족 여부", "엣지 케이스 처리", "오류 처리 및 복구", "성능 고려사항", "접근성 요구사항" ], "code_quality": [ "코드 스타일 및 포맷팅", "명명 규칙 준수", "중복 코드 및 복잡성", "주석 및 문서화", "모듈화 및 재사용성" ], "security": [ "입력 검증", "인증 및 권한 검사", "민감 정보 처리", "OWASP 취약점 방지", "의존성 보안 이슈" ], "testing": [ "테스트 커버리지", "테스트 케이스 품질", "시나리오 테스트 포함", "성능 및 부하 테스트", "회귀 테스트" ] }, "feedback": { "constructive": "문제점과 함께 개선 방향 제시", "specific": "구체적인 코드 라인 및 컨텍스트 참조", "objective": "개인이 아닌 코드에 초점", "prioritized": "중요도에 따라 Must-fix와 Nice-to-have 구분" }, "tools": { "platforms": ["GitHub PR", "GitLab MR", "Bitbucket PR"], "automation": ["Danger JS", "CodeClimate", "SonarQube"], "review_apps": "PR별 임시 배포 환경 제공" } }, "versionManagement": { "scheme": { "semantic": "MAJOR.MINOR.PATCH (X.Y.Z)", "rules": [ "MAJOR: 하위 호환성을 깨는 변경", "MINOR: 하위 호환성을 유지하는 새 기능", "PATCH: 버그 수정 및 작은 개선" ], "prerelease": "X.Y.Z-alpha.N, X.Y.Z-beta.N, X.Y.Z-rc.N" }, "tagging": { "format": "v1.2.3", "process": "릴리스 브랜치에서 태그 생성 및 릴리스 노트 작성", "signing": "릴리스 태그는 GPG 서명 필요" }, "release": { "cadence": { "major": "연 1-2회, 주요 기능 변경 시", "minor": "분기별 또는 주요 기능 추가 시", "patch": "필요시 (버그 수정, 긴급 패치)" }, "process": [ "릴리스 브랜치 생성 (release/vX.Y.Z)", "QA 및 테스트 완료", "릴리스 노트 및 변경 이력 작성", "최종 버전 번호 태그 생성", "프로덕션 배포", "메인 브랜치에 병합" ], "hotfix": [ "프로덕션 코드에서 hotfix 브랜치 생성", "수정 및 테스트", "패치 버전 증가", "프로덕션 배포 및 태그 생성", "메인 브랜치에 백포트" ] }, "changelog": { "format": "Keep a Changelog 기반 (keepachangelog.com)", "sections": [ "Added (추가된 기능)", "Changed (변경된 기능)", "Deprecated (곧 제거될 기능)", "Removed (제거된 기능)", "Fixed (수정된 버그)", "Security (보안 이슈 해결)" ], "tools": ["conventional-changelog", "standard-version", "release-it"] } }, "issueAndPrTemplates": { "issues": { "types": { "bug": { "title": "제목은 명확하고 구체적으로 문제 설명", "sections": [ "버그 설명", "재현 단계", "기대 동작", "실제 동작", "환경 정보", "스크린샷 또는 로그", "가능한 해결책" ], "labels": ["bug", "priority-?", "status-?"] }, "feature": { "title": "간결하고 명확한 기능 이름", "sections": [ "기능 개요", "필요성 및 목적", "상세 요구사항", "대안 방법", "허용 기준", "디자인/목업" ], "labels": ["enhancement", "priority-?", "scope-?"] }, "technical": { "title": "기술 부채 또는 리팩토링 제목", "sections": [ "현재 상태", "문제점", "제안하는 변경사항", "기대 효과", "위험 요소" ], "labels": ["technical-debt", "refactoring"] } }, "management": { "status_tracking": "라벨 및 프로젝트 보드 활용", "estimation": "포인트 또는 T-셔츠 사이즈 기반 작업량 추정", "assignment": "깃헙 이슈 할당 또는 셀프-할당 체계", "milestones": "릴리스 또는 스프린트 마일스톤 설정" } }, "pullRequests": { "template": { "sections": [ "관련 이슈", "변경 내용 설명", "테스트 방법", "스크린샷 (UI 변경 시)", "체크리스트" ], "checklist": [ "코드 스타일 가이드 준수", "테스트 코드 작성", "문서 업데이트", "릴리스 노트 항목 추가" ] }, "labels": { "size": ["size-xs", "size-s", "size-m", "size-l", "size-xl"], "type": ["feature", "bugfix", "hotfix", "refactor", "docs"], "status": ["ready-for-review", "in-review", "changes-requested", "approved"] }, "automated_checks": [ "PR 크기 라벨 자동 부여", "테스트 커버리지 확인", "코드 스타일 검사", "이슈 링크 확인", "충돌 확인" ], "merge_strategy": { "method": "Squash and merge", "title": "이슈 번호 및 간결한 설명", "cleanup": "병합 후 브랜치 자동 삭제" } }, "automation": { "tools": ["Probot", "GitHub Actions", "Zapier"], "actions": [ "새 이슈에 자동 라벨 지정", "비활성 PR 알림", "의존성 업데이트 자동화", "관련 문서 업데이트 확인" ] } } } }