Git

팀 프로젝트를 위한 매뉴얼(1) - 규칙 정하기

sangchu 2023. 4. 23. 21:29

Intro

최근부터 팀 프로젝트를 할 일이 점점 생기고 있다. 그런데 만났던 사람들 중 대부분이 프로젝트를 처음하거나 체계적으로 한 경험이 없었다.

곧 나와 프로젝트를 함께 할 팀원들을 위해, 혹은 팀 프로젝트를 처음 하는 사람들에게 도움이 되고자 나의 협업 방법을 풀어나가고자 한다. 비록 나도 아직 완벽하다고 할 순 없지만, 이 글을 참고해서 본인의 프로젝트에 맞게 수정 및 보완하면 좋을 것 같다.

 

대상

해당 글은 프로젝트를 처음 해보거나, 체계적으로 해본 경험이 없는 누구나 당장 협업에 참여할 수 있도록 작성하였다!

 

참고로 초심자 대상으로 작성한거라 작은 프로젝트 기준으로, 필요 없어도 될 것 같은 것은 생략했다. 

다 알려고 하면 너무 복잡하고.. 막막해서 시작도 못할 수 있기 때문이다! (일단 시작하는게 중요하다!)

 

git 용어를 아예 모르는 사람은 조금이라도 공부하고 보는게 좋다.

git알못을 위해 추천하는 영상 : 슬GIT로운 코딩생활, 생활코딩 Git

 

가장 처음으로 할 것, 규칙 정하기!

협업에서 가장 중요한 것은 규칙이다. 규칙 없이 각자의 스타일대로 작업하면 다양한 문제들이 발생할 것이다. 그러니 프로젝트 시작 전 귀찮더라도 꼭 정하자. 안그러면 나중에 귀찮은 일들이 정말 많이 발생할 것이다...

 

내가 사용하는 규칙은 다음과 같다. 

 

1. Git 규칙

1) Branch (git flow)

git branch는 다음과 보통 다음과 같이 있다 - main, develop, feature, (release, hotfixes)

괄호를 친 이유는, 작은 규모의 프로젝트에서는 해당 브랜치를 쓸 일이 없어서다. 나도 아직 저 정도 규모의 프로젝트를 한 경험이 없어서 그냥 넘어가겠지만, 본인의 프로젝트에 필요할 것 같으면 찾아서 사용해보자.

 

각 브랜치의 역할을 말하자면 다음과 같다.

  • main: 배포본
  • develop : 배포본 이전본, 총 통합 브랜치 역할
  • feature/기능명 : 기능
    ex) feature/login, feature/main

간단히 개발 흐름을 말하자면 다음과 같다.

  1. 개인이 맡은 기능(feature) 브랜치에서 작업하고,
  2. 해당 기능이 완성 됐으면 develop 브랜치에 올린다.
  3. develop에 모든 기능들이 모이고 문제 없이 정상적으로 작동하면
  4. main 브랜치(배포본)에 올린다.

다음 그림은 유명한 git flow 도식도다. master 브랜치를 시작으로, 필요한 브랜치를 나누고 있다.

나는 main, develop, feature 브랜치만 사용을 전제로 작성했으니 해당 부분 흐름만 쓱 보면 이해하는데 도움이 될 것이다. 

아래 그림에서는 main이 master로 되어있다. 둘 다 같은 표현으로, 현재는 이름을 main으로 쓰는 추세이다. 

git flow (출처: https://nvie.com/archives/323)

 

2) Commit 컨벤션

현재 나는 주로 다음과 같은 컨벤션을 사용하고 있다.

  • feat : 새로운 기능 추가
  • fix : 기능 수정
  • style : 스타일 관련
  • refactor : 코드 리펙토링

commit 컨벤션 사용 예시

커밋 컨벤션은 타입부터 작성 방식까지 되게 다양하다. 나도 아직 경험이 많지 않아서 위와 같이 간단하게만 사용했다.

더 자세한 방식을 알고 싶다면 해당 글을 참고하면 좋을 것 같다!  

 

2. 디렉토리 구조

코드 파일 디렉토리 구조는 분야별로, 프레임워크별로 다 다르다. 나는 웹 프론트엔드, 그 중 React 프레임워크를 사용하므로 이를 예시로 들겠다.

이런식으로 정하는구나 참고만하고, 절대적인 법칙은 없으니 각자의 상황에 맞게 구글링해서 정하면 될 것같다.

my-app
├── node_modules
├── public
├── src
     ├─ components
     ├─ assets 
     ├─ pages
     ├─ styles
     ├─ App.js
     └─ index.js
├── .gitignore
├── package.json
└── README.md

3. 그 외...

그 외에도 코드 컨벤션(변수명, 함수선언방식) 등이 있다.

웹 프론트엔드 경우는 prettier, eslint 파일을 설정하는 과정도 거치면 개발 효율성이 매우 올라갈 것이다.