- 기본적으로 깃플로우 전략을 활용한다.
- branch와 issue는 1:1 대응한다.
- 다음과 같은 브랜치를 사용한다.
- feat: 기능 단위의 브랜치
- 구현이 완료되면, develop 브랜치에 병합된다.
- child feat: 부모 feat 브랜치를 더 작게 분리한 브랜치
- 구현이 완료되면, parent feat 브랜치에 병합된다.
- develop: 여러 feat 브랜치가 병합된 브랜치
- release: QA 단계에 사용할 MVP 버전의 브랜치
- QA 제품에 코드 수정이 발생할 경우, feat - develop - release 순으로 재병합된다.
- master: 실제 배포된 버전의 브랜치
- 배포 제품에 버그가 발생할 경우, hotfix 브랜치를 통해 즉각 대응한다.
- hotfix: 배포 제품의 버그 대응 브랜치
- develop 브랜치와 master 브랜치에 모두 업데이트한다.
- feat: 기능 단위의 브랜치
- 브랜치단위/이슈번호
- 브랜치 단위
- feat
- develop
- release
- master
- hotfix
- 브랜치 단위
- 브랜치 네이밍 예시는 다음과 같다.
- 예시)
feat/1
- 예시)
- 사용할 커밋 타입은 다음과 같다.
- feat: 새로운 기능(새로운 기능 개발이 아니여도, 변경 사항이 클 경우 feat에 해당한다)
- refactor: 코드 리팩터링
- fix: 예상하지 못한 문제를 해결
- build: 빌드 업무 수정
- 커밋 메시지는 한영 혼용으로 작성할 수 있다.
- 이슈 번호는 별도로 표기하지 않는다.
- 커밋 메시지 예시는 다음과 같다.
- 예시)
feat: color system 구성
- 예시)
- 제목에 사용할 prefix는 커밋 컨벤션에 사용하는 타입과 동일하다.
- 해당 이슈의 주 역할에 맞게 설정할 것
- feat: 새로운 기능(새로운 기능 개발이 아니여도, 변경 사항이 클 경우 feat에 해당한다.)
- refactor: 코드 리팩터링
- fix: 예상하지 못한 문제를 해결
- build: 빌드 업무 수정
- 해당 이슈의 주 역할에 맞게 설정할 것
- 이슈는 뷰 단위가 아닌 기능 단위로 발행할 것
- 해당 기능이 너무 클 경우(PR Diff 고려), 자식 이슈로 분리할 것
- 제목 예시는 다음과 같다.
- 예시)
feat: library view 횡스크롤 구현
- 예시)
- 제목 예시는 이슈 제목과 같다.
- 예시)
feat: library view 횡스크롤 구현
- 예시)
- PR은 24시간 내로 리뷰를 한다.
- 각자 코드리뷰 달지 않은 PR이
5개 이상
일 경우 모든 업무를 중단하고 리뷰를 최우선으로 진행한다.
Class WebsosoAndroidDeveloper() {
var requirePR = 0
if (requirePR >= MAX_NOT_REVIEWED_CODE_REVIEW_PR) {
suspendDevelop()
startReview()
}
companion object {
private const val MAX_NOT_REVIEWED_CODE_REVIEW_PR = 5
}
}
- RCA 룰을 따른다.
- R(equest Change) 무조건 반영해주세요
- C(omment) 웬만하면 반영해주세요
- A(pprove) 사견 / 칭찬 / etc
- 예시 ) r: 다음 함수는 리소스 낭비가 심해보입니다. 수정이 필요할 것 같아요
- 본인 PR의 기능구현 Description은 리뷰어가 잘 이해할 수 있도록 자세히 작성한다.
- 코드 변경사항은 다음을 준수한다.
- 권장 100~300 (+), 맥시멈 500(+)
- 최소 2명에게 aprrove를 받으면 머지할 수 있다.
- 리뷰가 끝나면, 리뷰이는 우선적으로 전체 코드 리뷰를 확인하고 reaction 한다.
- 최소한 이모지라도 남길 것
- 빠르게 리뷰가 필요한 PR에 대해서는
Emergency
라벨을 태그하고, 머지가 될 수 없는 PR에 대해서는DoNotMerge
라벨을 태그한다. - PR은 이슈 구현 사항을 모두 구현한 이후에 open할 수 있다.