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