프로젝트의 협업 규칙입니다. 작업 시작 전에 한 번 읽어주세요.
main ← 안정 버전 (시연/배포 시점에만 머지)
│
└── develop ← 통합 개발 브랜치
│
├── feature/db-recipe-model
├── feature/api-search-endpoint
└── feature/fe-video-playermain: 항상 동작하는 안정 버전. 직접 push 금지.develop: 모든 feature 브랜치의 출발점이자 도착점. 직접 push 금지.feature/<영역>-<작업>: 개별 작업 브랜치. develop에서 분기, develop으로 머지.
| Prefix | 용도 | 예시 |
|---|---|---|
db- |
DB 모델, 마이그레이션, 쿼리 | feature/db-recipe-model |
api- |
API 엔드포인트, 비즈니스 로직 | feature/api-search-endpoint |
fe- |
프론트엔드 컴포넌트, 페이지 | feature/fe-video-player |
ai- |
CV/ML 모델, 추론 서버 | feature/ai-action-classifier |
infra- |
빌드, 설정, 협업 문서 | feature/infra-initial-setup |
모든 작업은 GitHub Issue에서 시작합니다.
- 저장소의 Issues 탭 → New issue
- 제목에 작업 내용을 한 줄로 명확히
- 본문에 목표, 작업 항목 체크리스트, 참고 자료 작성
- 본인을 Assignee로 지정
Issue 페이지 우측 사이드바의 Development 섹션 → Create a branch 클릭.
- Branch name:
feature/<prefix>-<작업>형식으로 수정 - Branch source:
develop(default여야 함)
GitHub의 변경사항(새 브랜치)을 로컬로 받아오고 해당 브랜치로 이동합니다.
git fetch origin
git switch feature/<prefix>-<작업>이제 본인 영역의 코드를 작성하세요. 작성이 끝나면 변경사항을 커밋하고 push합니다.
git add .
git commit -m "<type>: 무엇을 했는지"
git push참고: Issue에서 브랜치를 만든 경우에는
git push만 쳐도 정상 동작합니다. 만약 로컬에서git switch -c로 직접 브랜치를 만들었다면 첫 push 시 에러가 납니다. 그 경우엔git push -u origin HEAD로 첫 push를 하면 됩니다. 그 다음부터는git push만 쳐도 됩니다.(가급적이면 ISSUE 사용해주세요...)
push 후 GitHub 저장소 페이지로 이동하면, 방금 push한 브랜치에 대해 노란색 배너로 Compare & pull request 버튼이 떠있습니다. 클릭하거나, Pull requests 탭에서 New pull request로 직접 만들 수도 있습니다.
PR 작성 시:
- base:
develop으로 설정 (현재 default가 develop이 되게끔 설정했기에 거의 develop으로 고정되어 있을것이지만 그래도 한번 확인해주세요) - compare: 본인의 feature 브랜치
- Title: 커밋 메시지와 같은 형식 (예:
feat: Recipe 모델 추가) - Description: 아래 PR 본문 템플릿 사용
- 본문에
Closes #<issue번호>명시 → 머지 시 Issue 자동 close - Reviewers에 팀원 1명 이상 지정
마지막으로 Create pull request 버튼 클릭.
리뷰가 통과되면 GitHub PR 페이지에서 머지를 진행합니다.
- PR 페이지 하단의 Merge pull request 버튼 옆 드롭다운 ▼ 클릭
- Squash and merge 선택 후 클릭
- 합쳐진 커밋 메시지 확인 (필요시 수정) → Confirm squash and merge
- 머지 완료 후 Delete branch 버튼 클릭하여 원격 브랜치 삭제
- 연결된 Issue가 자동으로 close되었는지 확인
머지 후 로컬 환경도 정리합니다.
# develop으로 이동 + 머지된 최신 내용 가져오기
git switch develop
git pull origin develop
# 작업 끝난 로컬 브랜치 삭제
git branch -d feature/<prefix>-<작업><type>: <한 줄 요약> 형식을 따릅니다 (Conventional Commits).
| Type | 용도 |
|---|---|
feat |
새 기능 추가 |
fix |
버그 수정 |
db |
DB 스키마, 모델, 마이그레이션 |
refactor |
기능 변경 없는 코드 개선 |
docs |
문서 변경 |
test |
테스트 코드 추가/수정 |
chore |
빌드, 설정, 의존성 변경 |
- feat: YouTube 검색 API 엔드포인트 구현
- fix: 자막 없는 영상 처리 시 NoneType 에러 해결
- db: ActionLabel 테이블에 confidence 컬럼 추가
- docs: 백엔드 README에 환경변수 설정법 추가
- chore: requirements.txt에 httpx 추가
커밋 메시지와 동일한 형식. 예: feat: Recipe 모델 추가
## 변경 사항
- 무엇을 추가/수정/제거했는지
## 테스트
- 어떻게 동작 확인했는지
## 관련 이슈
Closes #<번호>기본 Squash and merge. 한 PR의 여러 커밋을 1개로 합쳐서 develop에 추가
- 최소 1명 이상의 팀원 리뷰 필수
- 리뷰어는 24시간 내 응답 권장
- 코멘트가 달리면 답변 또는 수정 후 머지
좋은 Issue는 PR 단위와 1:1로 매칭됩니다. 즉 하나의 Issue = 하나의 PR.
- 너무 큰 Issue는 쪼개기 ("백엔드 전체 구현" → "Recipe 모델", "Step 모델", "Recipe API" 등)
- 너무 작은 Issue는 묶기 (오타 수정 같은 건 다른 Issue에 포함)
- Issue 본문에 작업 항목을 체크리스트(
- [ ])로 적으면 진행도 추적 가능
내 브랜치 작업 중 develop에 다른 사람의 작업이 머지되면 PR에 충돌이 발생할 수 있습니다.
작업이 길어질 때 develop의 최신 변경사항을 미리 가져와두면 충돌 발생을 줄일 수 있습니다.
# 1. 현재 작업 임시 저장 (커밋되지 않은 변경사항이 있을 경우)
git stash
# 2. develop 최신화
git switch develop
git pull origin develop
# 3. 내 브랜치로 돌아가서 develop 변경사항 합치기
git switch feature/<prefix>-<작업>
git merge develop
# 4. 임시 저장한 작업 복원
git stash popgit merge develop 또는 PR 머지 시점에 충돌이 나면:
- VS Code Source Control 패널에서 충돌 파일이 표시됩니다
- 각 충돌 파일을 열면
<<<<<<<,=======,>>>>>>>마커가 보입니다 - Accept Current Change, Accept Incoming Change, Accept Both 버튼을 눌러 해결
- 모든 충돌 해결 후:
git add .
git commit # 머지 커밋 메시지가 자동으로 채워짐
git push충돌 해결이 어려우면 혼자 해결하지 말고 팀원에게 문의하세요.
- 변수/함수 이름이 직관적인가?
- 불필요한 console.log / print 문이 남아있지 않은가?
- 비밀번호, API 키가 하드코딩되어 있지 않은가? (
.env사용 확인) - 큰 파일(>10MB)이 추가되어 있지 않은가?