Git 으로 협업하기 (초급)
2019. 07. 25
Jaewoo KIM
📚Contents
1. 반값문자 리뉴얼 프로젝트 적용
2. 프로젝트 관리하기
- Branch
- Commit Message
- Code Review
- Rebase vs Merge
3. 부록
🙋♂️ 2019년 사원들의 목표를 기억하시나요?
🙋♂️ 2019년 사원들의 목표




🙋♂️ 2019년 사원들의 목표


🙋♂️ 2019년 사원들의 목표


참 잘했어요 👏
🏃♂️ 반값문자 리뉴얼
🏃♂️ GIT을 도입하기 전에...
본격적으로 사용하기 앞서서 구성원들의 Git에 대한 숙련도 파악
반값문자 리뉴얼 프로젝트
Git을 사용해본 적 있나요?

응 우리 CRM 프로젝트할 때 사용했어 ~

🏃♂️ SVN에서 GIT으로 이관
프로젝트 소스코드 SVN에서 GIT으로 마이그레이션
반값문자 리뉴얼 프로젝트

GIT으로 어떻게 협업할 것인가? 🤔
🏃♂️ CRM 프로젝트 브랜치 관리
master 브랜치를 기준으로 개인이름 브랜치로 분리하여 개발
반값문자 리뉴얼 프로젝트
master
userA
userB
userC
userD

이렇게 브랜치 관리 하는게 맞을까? 🤔
🏃♂️ 브랜치 관리에 대한 고민
Master 브랜치를 기준으로 기능 또는 티켓으로 브랜치로 분리하여 개발
반값문자 리뉴얼 프로젝트
master
user-signup
user-login
iss-0001
iss-0002
브랜치가 많아지면 복잡해지지 않을까? 🤔
🏃♂️ Branch 전략
브랜칭 작업을 규격화하여 브랜치를 쉽게 다룰수 있도록 해 주는 규칙
반값문자 리뉴얼 프로젝트


Text
git branch strategy
🏃♂️ Git flow 도입
Git Flow 브랜치 모델을 사용하여 프로젝트 개발 진행
반값문자 리뉴얼 프로젝트
Devleop
feature/user-signup
feature/user-login
feature/common-layout
그러나 GIT에 익숙하지 않으면...







🏃♂️ 현재 반값문자 프로젝트는...
develop 브랜치를 기준으로 feature 브랜치를 생성하여 개발을 진행중
반값문자 리뉴얼 프로젝트

👨👩👦👦 프로젝트 관리하기
Git Branch
👨👩👦👦 Git Branch
팀 또는 그룹간의 규칙을 정하고 실천해야 한다
프로젝트 관리하기
- 효과적으로 관리하기 위한 전략 수립
- Branch 별 권한 (Write, Read...)
- Best Practice는 Git Flow 하지만...
- Branch Naming

👨👩👦👦 Git Branch
팀 또는 그룹간의 규칙을 정하고 실천해야 한다
프로젝트 관리하기
- 효과적으로 관리하기 위한 전략 수립
- Branch 별 권한 (Write, Read...)
- Best Practice는 Git Flow 하지만...
- Branch Naming

👨👩👦👦 Git Branch
팀 또는 그룹간의 규칙을 정하고 실천해야 한다
프로젝트 관리하기
- 효과적으로 관리하기 위한 전략 수립
- Branch 별 권한 (Write, Read...)
- Best Practice는 Git Flow 하지만...
- Branch Naming

여러 모듈이 존재한다면?
👨👩👦👦 Git Branch
팀 또는 그룹간의 규칙을 정하고 실천해야 한다
프로젝트 관리하기
- 효과적으로 관리하기 위한 전략 수립
- Branch 별 권한 (Write, Read...)
- Best Practice는 Git Flow 하지만...
- Branch Naming
Git Commit
👨👩👦👦 Git Commit - Message
좋은 커밋 메시지는 패치에 관한 세 가지 질문에 답을 할 수 있어야 한다
프로젝트 관리하기
- 좋은 커밋 메시지란?
- 커밋 메시지를 잘 작성하면?
- 이것만은 지양하자
- 왜 이 코드가 필요한가?
- 어떻게 이슈를 해결 했는가?
- 패치가 어떤 영향을 만드는가?
👨👩👦👦 Git Commit - Message
좋은 커밋 메시지의 목적은 다음과 같다
프로젝트 관리하기
- 좋은 커밋 메시지란?
- 커밋 메시지를 잘 작성하면?
- 이것만은 지양하자
- 리뷰 프로세스가 빨라진다 ✈️
- 좋은 릴리즈 노트를 작성하게 돕는다 📃
- 미래 코드 관리자의 이해를 돕는다 🔮
👨👩👦👦 Git Commit - Message
커밋을 할때 최소한 다음과 같은 것들은 지양하도록 한다
프로젝트 관리하기
- 좋은 커밋 메시지란?
- 커밋 메시지를 잘 작성하면?
- 이것만은 지양하자
- 소스코드 관리는 백업 시스템이 아니다 ❌
- 의미있는 커밋 메시지를 작성하자 ❌
- 패치와 관계 없는 공백 변경 ❌
Online Code Review
👨👩👦👦 Online Code Review
비트버킷을 활용한 온라인 코드 리뷰 프로세스는 다음과 같다
프로젝트 관리하기
1. feature/{name} 브랜치 생성
2. 기능 개발 완료 후 develop 브랜치로 pull request
3. 리뷰어들의 코드리뷰 진행 및 승인/반려 처리
4. 리뷰 과정이 끝나면 develop에 merge
👨👩👦👦 Online Code Review
코드리뷰가 어느순간 부터 병목이 되었다
프로젝트 관리하기
1. feature/{name} 브랜치 생성
2. 기능 개발 완료 후 develop 브랜치로 pull resquest
3. 우선순위가 밀려 멤버들의 코드리뷰 진행이 미뤄짐
5. 멤버들이 승인하지 않았지만 develop에 merge
4. 리뷰 할 피처가 쌓이고 대기 시간이 길어짐
❗️ 일정 지연
어떻게 하면 코드리뷰를
잘 진행할 수 있을까?
🤔
👨👩👦👦 Online Code Review
코드리뷰 문화가 잘 자리잡히기 위해서는 멤버 모두가 노력해야 된다
프로젝트 관리하기
- 리뷰는 당연한 과정이라고 느껴지도록 만들자
- 코드는 코드일 뿐, 상처받지 말자
- 모든 멤버가 리뷰 문화를 받아들이도록 하자
- 리뷰 마스터 도입을 검토하자
👨👩👦👦 Online Code Review
프로젝트 관리하기
유익한 리뷰
- 미리 발견하는 버그
- 기존 코드의 히스토리
- 더 나은 로직의 제안
- 더 나은 변수명 제안
불필요한 리뷰
- 취향의 차이 (if vs switch)
- 애매한 수준의 변수명 제안
- 미묘한 성능 개선 제안
- 아주 먼 미래에 대한 방어 코드
Git Rebase vs Git Merge
👨👩👦👦 기능 개발 프로세스
프로젝트 관리하기
1. feature/{name} 브랜치 생성
2. 변경/추가 파일 add & commit
3. 원격지로 부터 fetch
4. 변경사항 merge 또는 rebase
일반적으로 Git을 이용한 기능개발은 다음과 같이 이뤄진다.
5. 원격지로 변경사항 push
👨👩👦👦 브랜치 생성 후 변경사항 커밋
프로젝트 관리하기
git checkout -b feature
git commit -am "Add new commit"
develop
feature
Git Merge를 사용한다면?
👨👩👦👦 develop 변경 사항을 확인
프로젝트 관리하기
git fetch
develop
feature
👨👩👦👦 Git Merge
프로젝트 관리하기
git merge remote/develop
develop
feature
👨👩👦👦 기능 개발 완료
프로젝트 관리하기
git push origin feature
git request-pull
develop
Git Rebase를 사용한다면?
👨👩👦👦 develop 변경 사항을 확인
프로젝트 관리하기
git fetch
develop
feature
👨👩👦👦 Git Rebase
프로젝트 관리하기
git rebase remote/develop
develop
feature
👨👩👦👦 기능 개발 완료
프로젝트 관리하기
git push origin feature
git request-pull
develop
👨👩👦👦 Merge vs Rebase
프로젝트 관리하기


Merge를 수행했을 경우
Rebase를 수행했을 경우
👨💻부록
Git Submodule
👨💻 웹페이지 디자인을 적용할 때...

1. 디자이너의 결과물을 개발자에게 전달
2. 개발자는 변경된 파일을 붙여넣기
3. Commit & Push
4. 서비스 배포
appendix A: submodule

1. 디자인과 개발에 적용된 버전 차이 발생
2. 프로젝트 진행중 수정이 빈번하다면
불필요한 커밋 발생
👨💻 웹페이지 디자인을 적용할 때...
appendix A: submodule

서비스 레포지토리
(service_repo)
디자이너 레포지토리
(design_repo)
👨💻 Submodule을 활용하자
appendix A: submodule
Git hooks
👨💻 코드 리뷰에서 자주 발견되는 사항
appendix B: hooks
- 커밋 메시지 규칙
- 코딩 컨벤션 (들여쓰기, 괄호 ...)
- 테스트 코드
👨💻 Git hooks을 활용하자
appendix B: hooks
커밋에서 변경이 발생한 파일에 대해서 린트 검사
Git-svn
appendix C: git-svn
당장 Git으로 옮기기 부담된다면...🤔
👨💻 Git-svn 사용하기
appendix C: git-svn
Local
Remote
SVN
GIT
git svn dcommit
git svn rebase
git add
git commit
git branch
git stash
끗
7월 본부의 날
By Jaewoo KIM
7월 본부의 날
Git으로 협업하기 (초급)
- 404