
목 차
1. CI/CD 개념 정리
2. GIT 기반 형상 관리 실무
3. GIT 커밋 메시지 규칙.

면접을 다녀왔는데, 형상관리나 커밋메시지를 너무 실무와 동떨어지게(?) 제멋대로 하고 있는 것 같아서 한번 제대로 짚고 넘어가보려고 정리합니다.
코드 통합 주기를 짧게 유지.
빌드/테스트 자동화 -> 버그 조기 발견
팀원 간 작업 충돌 최소화.
자동 빌드.
자동 단위/통합 테스트
코드 품질 검사 ( ex : SonarQube )
Jenkins
GitHub Actions
GitLab CI/CD
CircleCI
Travis CI
Best Practice
- 하루 최소 1회 커밋 → 파이프라인 돌려보기
- 실패한 빌드는 즉시 수정

둘 다 CI 이후의 과정을 다루지만, '배포의 주체'가 다릅니다.
| 구분 | Continuous Delivery | Continuous Deployment |
|---|---|---|
| 배포 방식 | 수동 승인 후 배포 | 자동으로 배포 |
| 배포 빈도 | 주로 수일~수주 단위 | 수분~수시간 단위 가능 |
| 사용 환경 | 금융, 의료 등 규제 많을 때 | 서비스가 빈번히 변경되어야 할 때 |
주요 작업.
Best Practice
파이프라인 단계별로 Rollback 전략 포함
배포 전 Smoke Test 필수

CI/CD 파이프라인은 사용자에게 새 버전(최신 버전)의 소프트웨어를 제공하기 위해 수행해야 하는 단계입니다.
{ 빌드 - 테스트 - 릴리즈 - 배포 } 등으로 이루어진 단계.
DevOps 또는 SRE 방식으로 더 효과적이게 소프트웨어를 제공하는 데에 초점을 맞추고 있습니다.
CI/CD 파이프라이은 특히 통합 및 테스트 단계와 제공 및 배포 단계에서 "모니터링 및 자동화를 도입"하여 애플리케이션 개발 프로세스를 개선합니다.
CI/CD 파이프라인의 각 단계를 수동으로 실행할 수 도 있지만, CI/CD 파이프라인을 자동화 할 때 진정한 DevOps라고 할 수 있습니다.
CI/CD 파이프라인의 단계는 각기 다른 테스크 하위 집단으로 이루어져 있는데,
이를 파이프라인 단계(pipeline stage)라고 부릅니다.
일반적인 파이프라인 단계는 다음과 같습니다.
# Step 1
Checkout → Prettier / ESLint
↓
# Step 2
Build (Gradle / npm build / docker build)
↓
# Step 3
Unit Test
↓
# Step 4
Static Analysis (SonarQube, CodeQL)
↓
# Step 5
Integration Test / e2e Test
↓
# Step 6
Artifact 생성 → Repository 업로드
↓
# Step 7
Deploy to staging
↓
# Step 8
Manual Approval
↓
# Step 9
Deploy to production
↓
# Step 10
Smoke Test → Monitoring

소스 코드, 문서, 설정 파일 등 모든 개발 산출물의 버전과 변경 이력 관리
코드 이력 추적 -> 협업 안정성 확보
각 개발자가 로컬 저장소를 가짐
중앙 서버(GitHub, GitLab, Bitbucket)와 동기화.
대규모 팀, 릴리스 주기 긴 프로젝트
Hotfix 브랜치 자주 발생
Release 브랜치에서 버그 잡고 QA
git checkout -b feature/login develop
git commit -m "feat: 로그인 기능 구현"
git checkout develop
git merge feature/login
스타트업/배포 잦은 서비스
main 만 존재(main 단일 브랜치)
PR 기반 작업
기능 개발은 전부 feature branch에서 진행
Pull Request -> 리뷰 -> Merge -> CI/CD 자동 배포.
배포가 매우 잦은 팀 ( 예 : 수십회 / day 배포 )
Best Practice
- Reviewer 최소 2명 이상 권장
- PR 크기 작게 유지 (200~400줄 미만 권장)
- 리뷰 피드백 반영 후 재검토
- Merge 전에 CI 통과 필수
- Merge 기준
- CI 성공
- Approve
✅ PR 단위
최대 400줄 이내 권장
하나의 논리적 변경만 포함
✅ 코드 리뷰 문화
리뷰 체크리스트
네이밍
사이드 이펙트
보안 취약점
성능 이슈
“Approve만 눌러주지 말 것”
✅ Protected Branch
main, develop 강제 보호
Force push 금지
Approver 지정
CI 성공 필수
✅ Tagging 전략
vX.Y.Z
Major: 기능 대규모 변경
Minor: 기능 추가
Patch: 버그 수정
Tag는 배포 기록의 기준점
# 새 브랜치 생성
git checkout -b feature/login
# 브랜치 목록
git branch
# 브랜치 삭제
git branch -d feature/login
git add .
git commit -m "feat: 로그인 기능 구현"
git push origin feature/login
# develop에 feature/login 머지
git checkout develop
git merge feature/login
git fetch origin
git rebase origin/develop
# conflict 발생 시 파일 수정
git add .
git rebase --continue
merge vs rebase
git tag v1.0.0
git push origin v1.0.0
급히 다른 브랜치 작업 시 유용
git stash
git stash list
git stash pop
버그가 언제부터 발생했는지 찾을 때 쓰임
git bisect start
git bisect bad HEAD
git bisect good v1.0.0
# 이분법으로 커밋 추적
특정 커밋만 다른 브랜치로 적용
git cherry-pick <commit-hash>


해당 커밋은 무엇에 대한 작업인지 키워드를 통해 표시합니다.

커밋 메세지의 제목입니다.
ex)
Feat: 신규 RFID 인식 기능 추가
커밋 메세지의 본문입니다.
ex)
신규 RFID 기능 인식 기능 추가
- RFIDReader.java: 사용자 요건 사항으로 인한 RFID 인식 기능 추가
커밋 메세지의 맺음말입니다.
ex)
해결: #123
관련: #321
참고: #222
Feat: 신규 RFID 인식 기능 추가(#123)
신규 RFID 기능 인식 기능 추가
해결: #123

