Git,

Sinf·2022년 3월 1일
0

고민의 흔적

목록 보기
14/38
post-thumbnail

Git,

2번의 프로젝트를 진행하면서 Git이 없다면 어떻게 협업을 진행했을까 싶을 정도로 유용했고, 감히 필수였다고 말할 수 있습니다.

프로젝트를 진행하면서 Git을 어떻게 활용했는지 정리해보겠습니다.

Git flow

Git flow의 정확한 이해는 우아한 형제들 기술 블로그, 우린 Git-flow를 사용하고 있어요를 참고하시면 좋을 것 같습니다. 저는 제가 경험한 Git flow에 대해서 정리하겠습니다.

프로젝트에서 적용한 Git flow

저희는 Git 브랜치 전략이라고 말하기도 했습니다.
그림과 다르게 3가지 브랜치를 사용했습니다.

  • master
  • sprint
  • feature

각 브랜치 별로 특징을 가지고 있습니다.
master 브랜치는 배포 버전을 관리합니다. master 브랜치로 브랜치가 병합되는 경우 배포 버전이 바뀌는 것을 의미합니다.

sprint 브랜치는 1회 스프린트 코드를 관리했습니다. 프로젝트 전체에서 1회 스프린트를 진행했기 때문에 release 브랜치를 사용하는 것이 더 맞다고 생각하나, sprint로 이름 짓고 사용하기로 했었습니다.

feature 브랜치는 하나의 기능을 구현하는데 사용했습니다.

Git flow는 왜?

Git은 버전관리를 위한 툴입니다.
master 브랜치를 배포를 위한 브랜치로, sprint를 배포 전단계, feature로 기능 구현, 이렇게 목적 별로 브랜치를 나누어 관리하면서 각 브랜치에 대한 오염을 줄일 수 있었습니다.

그리고, sprintrelease와 같은 역할로 두고, Staging Server를 사용했는데 배포 이전에 버그들을 미리 확인하고 고칠 수 있었습니다.

주의할 점

feature 브랜치는 기능 구현을 목적으로 하는 브랜치이기 때문에 더미 커밋들이 종종 있었습니다. 이를 sprint 브랜치에 그대로 병합하다보면 아래와 같은 Git flow를 경험하게 됩니다.

이 때, 필요한 것이 Squash Merge입니다. feature 브랜치에서 sprint 브랜치로 병합할 때 feature 브랜치의 커밋들을 가져오지 않고, 코드만 커밋되지 않은 상태에서 병합하게 됩니다. 그리고 하나의 커밋으로 feature 브랜치에서 작업한 코드를 커밋하게 됩니다. 그리고, 병합된 브랜치는 삭제합니다.

그 결과 위와 같이 정리된 Git flow를 갖게 됩니다.

처음엔 낯선, 감사한 conflict

처음 Git을 통해 협업할 때 가장 어려운 것은 Conflict에 대한 해결이었습니다. 혼자 Git을 통해 작업할 땐 버전 충돌에 대한 고려를 하지 않아도 되기 때문에 더 낯선 녀석이었습니다.

물론, 혼자 Git을 사용할 때도 종종 만나곤 하지만 문제를 파악하고 해결하기보다 Reset을 선택하곤 했습니다.

Git에 점점 익숙해지는 시점부터 Conflict가 없었다면 어떤 코드가 작성되고 있을지 아찔합니다.

충돌이 발생하는 하나의 예시

Conflict는 브랜치의 버전이 이어지지 못하고 병합 시에 코드가 충돌할 경우 발생합니다. 예를 들어 A와 B가 sprint 브랜치에 함께 병합을 하는 상황이 있습니다. A가 먼저 병합을 진행하고 B가 병합을 진행하려고 하면 B에게는 Conflict가 발생합니다. 왜냐하면 B가 작업한 feature 브랜치는 A가 병합하기 전 sprint 브랜치를 기준으로 작업되어 있기 때문입니다.

이 땐, 먼저 sprintfeature로 병합한 후 충돌되는 문제들을 해결하고 다시 sprint로 병합해야 합니다.

감사하다

협업을 진행하다보면 서로의 코드가 변경될 때 충돌로 인해서 코드가 덮어써지거나 삭제되는 경우를 방지할 수 있습니다. Git은 충돌에 대해서 기존의 것을 사용할 것인지, 병합된 브랜치의 것을 사용할 것인지 선택하게 해줍니다. 이러한 걱정을 덜어주는 것만으로도 Git은 좋은 도구라고 생각합니다.

코드 리뷰

master, sprint 브랜치를 두어 배포 버전과 배포 전 단계 버전을 관리하면서 feature에서 구현된 기능을 병합할 때 팀원들이 코드 리뷰를 진행하도록 했습니다. Gitlab이나 Github은 브랜치 병합 시 코드가 수정된 부분을 확인할 수 있고, 코멘트를 통해 서로 리뷰할 수 있었습니다.

두렵지 않은 도전

Git은 이전의 버전을 기록합니다.
기능 구현을 할 때, 여러 feature 브랜치를 활용하기도 하고, feature 브랜치에서 작성하고 reset을 통해 코드를 되돌리기도 합니다.

이렇게 쉬운 버전관리는 기능 구현에 있어서 먼저 도전해볼 수 있는 환경을 제공해주었습니다. 로직이 완전히 꼬여버리더라도 기존에 정상적인 브랜치로 명령어 한번에 이동할 수 있었습니다.

Git

Git을 사용할수록 많은 장점을 담고 있습니다.
처음엔 낯설고 어렵게 느껴질 수 있지만 익숙해진다면 함께 개발하는데 필수인 툴입니다.

profile
주니어 개발자입니다. 🚀

0개의 댓글