본문 바로가기
iOS

Github을 이용한 iOS 개발 협업 기초 (PR,코드리뷰,Merge)

by HaningYa 2020. 9. 9.
728x90

드림인 프로젝트를 통해 iOS 개발을 동료와 함께 개발하게 되었습니다.

드림인 프로젝트의 경우 UI/UX/Coding 파트 모두가 개발을 해야 하기 때문에 협업이 요구됩니다.

그래서 간단하게 Github를 통해 어떻게 협업해야 할지 모르는 분들을 위해 작성했습니다.

잘 아시는 분은 살포시 뒤로가기를 눌러주세요. 부끄럽거든요.

협업 상황

  • 두명의 개발자가 있습니다. 피카츄와 라이츄로 이름짓겠습니다.
  • 피카츄는 로그인 화면과 로직을 구현해야 합니다.
  • 라이츄는 회원가입 화면과 로직을 구현해야 합니다.
  • 각각의 구현해야 하는 기능은 Github Issue 로 등록되어 있습니다.
  • 둘은 같은 Xcode 프로젝트에서 동시에 작업합니다.
  • Github 에 리포지토리와 빈 깡통 Xcode 프로젝트가 있습니다.
  • Github Desktop 앱을 사용합니다.

협업 전체 흐름

  1. 피카츄와 라이츄는 각자의 기능의 이름을 담은 본인 Branch 를 생성합니다.
  2. 해당 브랜치에서 필요한 코드를 작성합니다.
  3. 작업을 끝내고 잘 동작하는지 확인하면 PR(Pull Request 를 만듭니다.)
  4. 피카츄와 라이츄는 해당 Pull Request 를 보며 같이 코드에 문제가 없는지 확인합니다.. (코드리뷰)
  5. 문제가 없으면 master 브랜치에 merge 하고 문제가 있으면 다시하라고 시킵니다.,
  6. merge 된 내용 로컬에 업데이트합니다. 

실제로 하나씩 봅시다.

여기 아직 더럽혀 지지 않은 프로젝트가 있습니다.

깨끗

브랜치도 하나밖에 없습니다.

master 용어 조만간 main으로 바뀐답니다.

1. 브랜치 만들기 (with Github Desktop)

깃헙 데스크 탑을 열고

Current Branch Master 라고 되어있는 버튼 클릭

현재 master branch 이다.

오른쪽에 new branch 로 새로운 브랜치 생성해줍니다.

로그인 구현할 브랜치

그러면 너 리모트에 브랜치 적용할꺼야? 라고 묻는데 yes 해줍니다.  Publish Branch 클릭

Publish Branch

그럼 브랜치가 새로 생긴걸 확인할 수 있습니다.

2. 브랜치에서 작업하기

자 이제 피카츄는 로그인 기능을 구현할 겁니다. 

먼저 현재 작업하는 브랜치가 Login 브랜치인지 확인합니다.

로그인 맞쥬

그리고 해야할 일을 묵묵히 합니다.

대충 로그인 기능

로그인 기능 다 만들었다고 가정합니다.

이 상태에서 Github Desktop을 가시면 아래와 같이 변경사항이 적용되어 있는걸 볼 수 있습니다.

변경사항있음

여기서 만약에 브랜치를 master로 옮기면 어떻게 될까요?? 마스터로 바꿔보면 이런걸 묻습니다.

너 변경사항 가져갈꺼니

  • Leave my changes on Login: 나는 내가 작업한거 이 브랜치에 계속 놔둔채로 master 브랜치로 옮길꺼야
  • Bring my changes to master: 나는 내가 작업한거 master 에 가져갈래

일단 변경사항은 로그인 브랜치에 놔두고 switch branch 해줍니다.

자 master 로 돌아왔습니다.

이 상태로 아까 열어놓았던 Xcode 를 보시면 당황스러우실 겁니다. 왜냐면 작업한게 다 없어졌거든요.

다시 깨끗해짐

그러나 걱정마세요. 깃헙 데스크탑에서 다시 브랜치를 Login으로 바꿔주면 작업내용이 다시 보입니다. 다시 브랜치를 로그인으로 옮기면

이런식으로 물어봅니다.

여기서 View Stash 를 클릭하면 이전에 작업했던 내역이 있는데 여기서 Restore 를 눌러줍니다. (Discard는 작업한거 다 날리는겁니다 주의)

Restore

*만약에 자동으로 restore 하기도 전에 또 변경사항이 생기면 해당 부분을 삭제하고 restore 하시면 됩니다.

이런 상황일 때
저거 자동으로 가끔씩 변경되더라고요

그럼 다시 작업했던 내용을 볼 수 있습니다.

여기까지 움짤 요약

 

3. 작업 다 했으니 PR (Pull Request 날리겠습니다.)

앞에 있던 변경사항을 커밋을 하고 Origin 에 Push 합니다. 그러면 화면에 Create Pull Request 라는 버튼이 생깁니다.

오른쪽 파란색 버튼

요놈을 클릭하시면 깃헙 웹으로 자동으로 연결됩니다.

comment 를 남기고 

여기서 오른쪽에 MileStone 에는 해당 기능의 마일스톤을 할당하고 Reviewers 에는 팀원을 할당해 줍니다.

그리고 create pull request!

*만약 피카츄가 로그인 브랜치에서 작업하는 동안 라이츄는 마스터 브랜치에서 작업했다면 "Able to merge" 가 아닌 수업때 배운 Conflict 가 날것입니다. 그럼 라이츄의 등짝을 때리며 브랜치 파서 작업하라고 소리쳐줍니다.

 

4. 코드리뷰

로그인 브랜치 풀리퀘

자 풀리퀘스트가 정상적으로 등록되었습니다. 자세한 내용을 보면

이렇게 전반적인 내용이 있고

Commit 을 가보면 어떤 코드가 수정되거나 추가되었는지 확인할 수 있습니다.

이렇게 어떤 코드가 변경되었는지 확인 할 수 있습니다.

만약 작성된 코드가 마음에 들지 않거나 수정이 필요하다면 오른쪽 위 Review Changes 를 클릭하고 Request change 를 선택한 뒤 수정사항을 작성해 주면 됩니다. 

 

혹은 코드의 특정 부분에 대한 피드백을 하고싶다면 아래와 같이 코드에 + 버튼을 통하여 작성하실 수 있습니다.

5. 문제가 없는것 같습니다. PR를 승인해 줍니다.

confirm merge 클릭
merge 된 상태

자 이제 로그인 기능이 master 브랜치에 적용되었습니다. 

 

6. merge 된 내용 로컬에 업데이트

이제 master 브랜치에 로그인 기능이 추가되었으니 로컬 레포에서도 업데이트 해줍니다. 

Github Desktop 에서 master 브랜치를 가보면 아무일도 없습니다

조용합니다.

여기서 제일 오른쪽의 fetch origin 버튼을 클릭합니다. 

짜잔

2개의 커밋이 원격 저장소에 추가되었다고 합니다. Pull Origin 을 통해 해당 내용을 로컬 레포로 가져오겠습니다.

Master 브랜치에서 없었던 로그인에 대한 코드들이 보여집니다.

 

 

 

이렇게 브랜치와 풀리퀘스트를 이용해
master 브랜치에 새로운 기능을 추가하는 방법을 해봤습니다.

완전히 다른 부분을 개발할 때는 사실 이럴 필요까진 없습니다. 서로의 작업이 서로의 코드에 영향일 끼치지 않으니깐요.

하지만 최소한 한 부분 이상은 conflict 가 발생할 확률이 높습니다. 이런 충돌을 하나씩 해결하다 보면 아 그냥 나 혼자 하는게 편할 것 같다라는 생각이 들 수 도 있습니다. 하지만 대부분의 소프트웨어는 혼자 개발하지 않습니다. 귀찮더라도 익숙해지면 앞으로 많은 도움이 될거라 생각합니다.

가장 단순하고 안전한 방법은 한명이 작업하고 반영할때 까지 그냥 다른사람은 작업 안하는 겁니다. 하지만 3명에서 개발하는데 한명이 개발하는 것과 같은 극악의 생산성을 보여줄 것 입니다.

정리하자면

  1. 본인의 브랜치를 판다.
  2. 브랜치에서 작업을 한다.
  3. 작업이 끝나면 브랜치를 master 브랜치에 풀리퀘를 던진다.
  4. 코드리뷰를 통해 conflict 나 문제점을 보완한다.
  5. master branch 에 merge 한다.
  6. 위 순서를 계속 반복한다.

입니다.


번외) Github DeskTop 이 아닌 다른 유용한 Git용 프로그램이 많습니다.

예를들어 깃 크라켄이라는 것 이 있습니다.

 

Free Git GUI Client - Windows, Mac, Linux | GitKraken

GitKraken is the best Git GUI client for Windows, Mac & Linux! Streamline your Git workflow by connecting GitHub, GitLab, Bitbucket or Azure DevOps repos & integrate with Jira, Trello, GitHub or GitLab issues.

www.gitkraken.com

깃 크라켄 GUI

이런식으로 깃헙 데스크톱보다 좀 더 다양한 GUI를 통해 시각화를 해줍니다.


사실 정답은 아니고 제가 알고있는 지식에 한해 정리했습니다.

더 좋은 방식이나 방법을 알고 계시다면 댓글로 공유해주시면 감사하겠습니다.

 

728x90

댓글