우리 팀은 빠른 개발 속도와 부드러운 통합을 위해 트렁크 기반 개발(Trunk-Based Development) 전략을 사용합니다. main 브랜치를 중심으로 짧은 호흡으로 개발하며, 모든 변경 사항은 CI/CD를 통해 단일 k8s 서버에 실시간으로 자동 배포됩니다.
- 우리는
develop이나staging브랜치를 두지 않습니다.main브랜치가 곧 실서버 배포 브랜치입니다. - 미니 프로젝트로 단일 배포환경에서 빠른 개발이 중요하므로 GitFlow가 아닌 Trunk Based 규칙을 이용하여 협업합니다.
- 모든 기능 개발은
main에서 파생된 단기 기능 브랜치에서 이루어지며, 개발 완료 후 최대 수 시간 내에main으로 머지(Merge)되어야 합니다.
feat/1-login (짧고 빠른 기능 개발)
┌───────────┐
───────┴───────────┴───► main (ArgoCD가 실시간으로 k8s에 자동 배포)
- 기능 개발:
feat/이슈번호-기능명(예:feat/12-login) - 버그 수정:
fix/이슈번호-버그명(예:fix/45-cors-error) - 기타 작업:
chore/이슈번호-작업명(예:chore/3-config)
커밋 메시지는 다음과 같은 형식으로 작성하여, 히스토리만 보고도 어떤 작업이 진행되었는지 직관적으로 알 수 있게 합니다.
형식:
태그: 작업_내용_요약
feat: 새로운 기능 추가fix: 버그 수정chore: 빌드 업무 수정, 패키지 매니저 설정, 단순 리팩토링 등docs: 문서 수정 (README 등)
✍️ 좋은 커밋 예시:
feat: 구글 로그인 API 연동fix: 프론트엔드 CORS 에러 우회 설정chore: 빌드 스크립트 수정
모든 팀원은 기능을 개발할 때 반드시 아래 5단계 흐름을 지켜주세요.
- 무작정 코드부터 짜지 말고, 작업 전에 GitHub의 Issues 탭에서 티켓을 먼저 생성합니다.
- 템플릿에 맞게 작업 내용을 적고
Submit을 누르면 이슈 번호(예: #12)가 부여됩니다. - 우측 Projects에서 우리 팀 칸반 보드를 지정하여 상태를 관리합니다.
main브랜치를 최신화한 상태에서 새 브랜치를 생성합니다.
git checkout main
git pull origin main
git checkout -b feat/12-login
- 기능을 개발하면서 컨벤션에 맞춰 커밋을 쪼개어 남깁니다.
- 기능 개발이 완료되면 리포지토리에 push 후 Pull Request를 생성합니다.
git push origin feat/12-login
- PR 본문 템플릿에 있는
Close #이슈번호문구를 반드시 적어줍니다. (예:Close #12) - 💡 이 문구가 있으면 PR이 머지될 때 관련 이슈가 자동으로 종료됩니다.
- 해커톤 속도를 위해 최소 1명의 팀원이 코드를 확인하고
Approve를 눌러야 머지가 가능합니다. - 코드가 정상적으로 빌드되는지, 로컬에서 잘 도는지만 빠르게 확인하고 소통합니다.
- 승인이 완료되면 Squash and Merge 방식으로
main브랜치에 합칩니다. main에 코드가 합쳐지는 순간, GitHub Actions가 도커 이미지를 빌드하고 ArgoCD가 클러스터에 새 버전을 주입하여 k8s 서버에 자동 무중단 배포가 진행됩니다.- 사용이 끝난 로컬 및 원격 브랜치는 삭제합니다.
- 컴파일 에러 금지:
main브랜치가 터지면 단일 서버 전체가 터져 다른 팀원의 테스트가 중단됩니다. push 하거나 머지하기 전에 로컬에서 반드시 빌드가 정상적으로 끝나는지 확인하세요. - 충돌(Conflict) 최소화: 트렁크 기반 개발의 핵심은 '자주 합치기'입니다. 하나의 브랜치를 너무 오래 붙잡고 있으면 대형 충돌이 발생합니다. 작업 단위를 최대한 쪼개서
main에 바로바로 올려주세요. - 칸반 보드 최신화: 내가 지금 무엇을 개발하고 있는지 팀원들이 실시간으로 볼 수 있도록, GitHub Project 보드의 카드를
In Progress에서Done으로 자주 옮겨주세요.