PR 제목은 다음과 같은 형태로 작성합니다.
Commit Type: [컴포넌트명] [구현내용] [액션]
Feat: SigninPage 마크업 추가
Feat: SigninPage 로그인 구현
Feat: MainPage 무한스크롤 구현
Fix: PostDetailsPage 마크업 수정
Fix: PostCreatePage 입력 없을 때 요청 가능한 버그 수정
Refactor: ShelterPostsPage 무한스크롤 리팩토링
PR 제목에 Feat와 같은 Commit Type 을 붙이는 이유?
squash merge 할 때 develop으로 들어가는 커밋 메시지명과 동일하게 하기 위함입니다.
squash & merge 하는 이유?
squash는 하나의 commit으로 develop에 merge 하기 위함입니다. 이는 PR 단계부터 작업 단위를 명확하게 나누도록 합니다. 또한 develop에 merge되는 commit을 큰 단위로 흐름을 파악하기 쉽게 나타낼 수 있습니다.
commit type 을 하나로 정하기 어렵다면?먼저 PR을 분리해야 한다는 신호일 수 있으므로 작업을 적절히 나누었는지 살펴봅니다.
분리하기 어렵다면 가장 중요한 작업 내용으로 커밋 타입을 정합니다.
3. PR 내용
PR 내용은 다음과 같은 형태로 작성합니다.
### 이슈 번호 <!-- 관련된 이슈의 번호를 # 뒤에 입력해주세요 -->
- close: #
### 특이 사항 <!-- PR을 볼 때 미리 알아야 하거나, 주의 깊게 봐야 하는 점을 알려주세요 -->
- 특이 사항 1
- 특이 사항 2
가급적 모든 팀원이 approve 하는 것을 규칙으로 하며, 최소 1명의 approve는 받아야 합니다.
원격에 PR을 올리기 전에
컴파일 오류가 없음 확인
최신 develop 브랜치의 소스 위에서 수정이 진행 되었는지 점검
최신 develop에서 pull 받고, conflict가 발생한 경우 해결해서 PR
conflict 해결에 어려움이 있다면 즉시 팀원 호출
프로젝트 셋업 이후 develop에 직접 push 금지
what에 대한 주석과 같은 불필요한 주석을 삭제하고 (why에 대한 주석은 무관), console.log를 삭제
PR의 assignee가 피드백을 확인하고 develop에 직접 merge
코드리뷰로 진행된 피드백을 확인하고, 반영할지 말지 본인이 선택
피드백에 대해 active에서 resolved로 바꾸는 것도 본인 선택.
피드백을 수용한다면 수정 후 resolved
develop에 merge할 때는 squash merge를 사용해주세요!
4. 브랜치
main : 릴리즈가 아니면 푸시를 하지 않습니다. develop에서만 머지합니다. hotfix가 아닌 경우 직접적으로 건들면 안 됩니다.
develop : feature 브랜치를 파생시킬 수 있는 일반적인 작업 브랜치입니다. feature 브랜치의 PR은 무조건 develop으로 날립니다. develop에서 각 개발자들의 작업 내역을 합쳐서 릴리즈시 main로 머지합니다.
feature : PR의 단위입니다. develop에서 파생시켜 각자 맡은 내역을 작업한 후 develop에 PR을 날립니다. 브랜치를 생성할때 개발자이름/피처-브랜치-이름 형식을 따릅니다.
5. 스타일 컨벤션
단일 파일 컴포넌트 구현을 위해 해당 컴포넌트에만 매핑되는 스타일시트를 작성하는 것을 권장합니다. 따라서 하위 컴포넌트나 컴포넌트 범위 바깥에 영향력을 끼칠 수 있는 CSS 프로퍼티 작성을 지양합니다.
6. 코드리뷰 체크리스트 (펌)
컴파일 에러 : 에러가 발생하는 코드를 PR 해서는 안 됩니다.
컨벤션 : 팀의 코드 컨벤션에 어긋나는 부분이 있는지 점검합니다. 변수명이나 함수명, 이벤트명 등이 직관적으로 이해되지 않는다면 부담 없이 코멘트를 남깁니다. 새로운 파일이 생성되었다면 생성된 파일이 적합하고 가시성 있는 위치에 컨벤션을 준수하여 저장되어 있는지 확인합니다.
컴포넌트 구조 : 컴포넌트의 네스팅 깊이가 너무 깊어 특정 코드에 접근하기 어렵거나 너무 얕아 코드의 재사용성이 떨어지고 특정 파일이 특히 길어진다던지 하는 컴포넌트 구조와 배치를 확인합니다. 수정된 컴포넌트의 구조가 확장에 용이한지 살핍니다.
최적화 : 불필요한 http 요청이 있지는 않은지, 렌더링 과정에서의 부하나 불필요한 컴포넌트의 재랜더링이 이루어지고 있지는 않나 확인합니다.
중복 : 컴포넌트들 사이에서 같은 로직과 코드를 하드코딩해서 사용하고 있지는 않나 확인합니다. 그런 로직이 있다면 util로 분리하는게 좋습니다.
UI : 직접 브랜치를 내려받아 돌려보시고, 무슨 문제인지 눈으로 직접 보고 판단하는게 좋습니다. 귀찮은 일일지도 모르겠습니다만, 더 나은 팀을 위해서는 적극적으로 서로의 실수를 검증하는 깐깐한 자세가 필요하다고 생각합니다.