Skip to content

형상관리 ​

23.1. GitHub Flow 브랜치 전략 ​

23.1.1. 기본 원칙 ​

  • main 브랜치는 항상 배포 가능한 상태를 유지합니다.
  • 모든 작업은 main에서 분기한 feature 브랜치에서 수행합니다.
  • 작업 완료 후 Pull Request를 생성하고, 리뷰를 거쳐 main에 머지합니다.

23.1.2. 브랜치 네이밍 ​

접두사용도예시
feature/새로운 기능 개발feature/user-registration
fix/버그 수정fix/login-redirect-error
hotfix/프로덕션 긴급 수정hotfix/payment-null-check
chore/빌드, 설정, 의존성 등 비기능 작업chore/update-spring-boot
docs/문서 작업docs/api-specification
refactor/리팩토링refactor/user-service-cleanup

23.1.3. 브랜치 네이밍 규칙 ​

  • 소문자와 하이픈(-)만 사용합니다.
  • 슬래시(/)는 접두사 구분에만 사용합니다.
  • 브랜치명은 작업 내용을 간결하게 설명합니다.
  • 이슈 번호가 있는 경우 포함합니다: feature/123-user-registration

23.1.4. 워크플로우 ​


23.2. 커밋 메시지 컨벤션 ​

23.2.1. Conventional Commits ​

모든 커밋 메시지는 Conventional Commits 형식을 따릅니다.

<type>: <description>

[optional body]

23.2.2. 타입 목록 ​

타입설명예시
feat새로운 기능feat: 사용자 프로필 조회 API 추가
fix버그 수정fix: 로그인 시 리다이렉트 오류 수정
docs문서 변경docs: API 명세서 업데이트
style코드 포매팅 (동작 변경 없음)style: import 정렬
refactor리팩토링 (동작 변경 없음)refactor: UserService 메서드 추출
test테스트 추가/수정test: UserService 단위 테스트 추가
chore빌드, 설정 변경chore: Spring Boot 3.4.3 업데이트
perf성능 개선perf: 사용자 목록 쿼리 최적화
ciCI 설정 변경ci: CircleCI 캐시 설정 추가

23.2.3. 커밋 메시지 규칙 ​

  • 제목은 50자 이내로 작성합니다.
  • 제목은 명령형으로 작성합니다. ("추가한다" X → "추가" O)
  • 제목 끝에 마침표를 붙이지 않습니다.
  • 본문이 필요한 경우 제목과 빈 줄로 구분합니다.
  • 한글 또는 영문 중 프로젝트별로 통일합니다.

23.3. Pull Request 규칙 ​

23.3.1. PR 필수 조건 ​

항목기준
리뷰어최소 1명 이상의 승인
CI모든 체크 통과 (린트, 빌드, 테스트)
충돌머지 충돌 해소 완료
브랜치main 대비 최신 상태

23.3.2. PR 템플릿 ​

프로젝트에 .github/pull_request_template.md를 포함합니다.

markdown
## 변경 사항
<!-- 이 PR에서 변경한 내용을 간략히 설명합니다 -->

## 변경 사유
<!-- 왜 이 변경이 필요한지 설명합니다 -->

## 테스트
- [ ] 단위 테스트 추가/수정
- [ ] 로컬에서 동작 확인

## 관련 이슈
<!-- 관련 이슈 번호 (예: #123) -->

23.3.3. 머지 전략 ​

  • Squash and Merge를 기본으로 사용합니다.
  • 머지 후 feature 브랜치는 자동으로 삭제합니다.

23.4. .gitignore 표준 ​

23.4.1. 통합 .gitignore 예시 ​

txt
# Java / Maven
target/
*.class
*.jar
*.war

# Spring Boot
*.log

# IDE
.idea/
*.iml
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json

# Node.js
node_modules/
dist/

# 환경변수
.env.local
.env.*.local

# OS
.DS_Store
Thumbs.db

23.4.2. 원칙 ​

  • 빌드 산출물(target/, dist/)은 추적하지 않습니다.
  • IDE 설정 중 팀 공유 설정(.vscode/settings.json)만 추적합니다.
  • 로컬 환경변수(.env.local)는 추적하지 않습니다.

23.5. 버전 태깅 ​

23.5.1. Semantic Versioning ​

모든 릴리스는 Semantic Versioning (SemVer) 규칙을 따릅니다.

MAJOR.MINOR.PATCH
구분변경 시점예시
MAJOR하위 호환성이 깨지는 변경1.0.0 → 2.0.0
MINOR하위 호환되는 기능 추가1.0.0 → 1.1.0
PATCH하위 호환되는 버그 수정1.0.0 → 1.0.1

23.5.2. 태그 형식 ​

  • Git 태그 형식: v{MAJOR}.{MINOR}.{PATCH}
  • 예시: v1.0.0, v1.2.3
bash
git tag -a v1.0.0 -m "v1.0.0 릴리스"
git push origin v1.0.0

23.5.3. 릴리스 노트 ​

모든 릴리스에는 변경 사항을 기술한 릴리스 노트를 작성합니다. 커밋 메시지의 타입별로 그룹핑하여 작성합니다.

TIENIPIA QUALIFIED STANDARD