새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

4 분 소요

오늘 추가 학습으로 git flow와 github flow,gitlab flow를 정리해보려고 합니다

프로젝트를 체계적으로 관리하는 방법

프로젝트 크기나 배포 환경에 따라 프로젝트를 효율적으로 관리하기 위해 다양한 방식으로 브런치를 관리합니다.

특히 git flow가 등장하게 된 이유는 대규모 프로젝트에서 복잡한 브랜치와 릴리즈 관리의 어려움을 해결하기 위해 도입되었습니다.

하지만 모든 프로젝트가 릴리즈 버전을 관리할 필요가 없거나 배포 주기가 빠를 경우 git flow 방식이 적합하지 않게 되어 다양한 프로젝트 관리 방법이 나오게 됩니다.

간단 정리

  • git flow : 역할 분담이 되어있는 환경, 배포 버전과 테스트 버전, 개발 버전을 나누어서 관리 해야하는 환경에 적합하다고 생각됩니다.
  • github flow: 기능 개발 브런치와 배포 브런치만 존재하므로 빠른 배포가 가능하게 됩니다.
  • gitlab flow: github flow와 git flow의 중간 단계로 다양한 배포 환경을 사용하는 경우 적합하다고 생각합니다.

git flow와 gitlab flow의 차이점은 테스트와 릴리즈, 배포 버전 브랜치의 역할을 명확하게 나누어 관리하는 유무 차이로 생각합니다.

git flow는 명시적으로 브런치의 역할이 정해져 있으며 gitlab flow는 배포 환경에 따라 브런치를 나누어 관리하는 것이 특징입니다.

Git Flow

대규모 프로젝트로 여러 팀원이 동시에 작업할 수 있는 환경을 제공합니다. 브랜치 별로 용도가 명확하기 때문에 팀 역할이 나눌 경우 적합하다고 생각합니다.

image-20240629215223607

  • feature 브런치 : 각 기능을 개발할 때 브런치를 생성합니다.
    • --base develop --head feature
    • develop 브랜치에만 pr을 합니다.
  • develop 브랜치 : 기능 개발이 하나로 관리되는 브런치입니다.
    • --base release --head develop
    • 릴리즈(QA)용 브랜치에만 pr을 합니다.
  • hotfix 브랜치 : 실제 배포된 버전의 오류가 발생할 경우 만들어지는 브랜치입니다.
  • --base main --head hotfix 또는 --base develop --head hotfix
  • 배포 버전에서 오류가 발생할 경우 오류 수정을 위한 브랜치입니다 오류가 수정되면 maindevelop에 합쳐집니다.

  • release 브랜치 : QA를 위한 브랜치로 QA중 오류 수정이 될 수 있습니다.
    • --base main --head release 또는 --base develop --head develop
    • 릴리즈 버전에서 오류가 발생하여 수정하는 경우 개발 브랜치에도 합쳐지며 사라집니다.
  • main 브랜치 : 실제 사용자에게 배포되는 버전입니다.

git flow 방식은 각 브랜치별 해야하는 역할이 정해져 있습니다. 배포 주기가 길거나 릴리즈 버전을 관리하여 테스트를 하는 경우에 적합한 프로젝트 구조입니다.

Github Flow

브랜치별 명확한 구분이 필요하지 않고 간단하며 빠르게 통합되고 배포되는 작업을 수행하는 경우 적합합니다.

image-20240629221040796

  • change(feature) 브런치 : 빠르게 변경사항이나 기능을 개발하는 브런치입니다.
    • --base main --head change
    • main 브랜치에 pr을 하게 되며 자주 병합과 배포가 되기 때문에 항상 최신 상태의 배포 준비가 되게됩니다.

GitLab Flow

GIthub Flow 방식은 잦은 배포가 가능하다는 장점이 있지만, 테스트 환경이나 실제 라이브 환경과 같이 별도의 버전으로 관리하기에는 적합하지 않은 방법입니다. git flow 보다는 역할 분담이 나누어지지 않아 빠른 배포가 가능하며 관리도 필요할 경우에 사용하는 방식입니다.

post-git-strategy-img-05

  • production: 배포된 버전의 코드가 있는 브랜치

  • pre-production: 배포 전에 테스트를 진행하는 브랜치.
    • --base production --head pre-production 테스트 환경이나 배포 전에 관리를 위한 별도의 브런치로 사용됩니다.
  • main: 개발 중인 최신 코드가 있는 브랜치.
    • --base pre-production --head main: 다른 flow의 develop과 동일한 역할을 합니다.
  • feature/: 새로운 기능을 개발하는 브랜치.
    • --base main --head feature: 기능 개발을 위한 브런치 입니다.

COMMIT

작업을 커밋할 때 권장 사항

  • 한 작업을 여러 버전에 걸쳐 커밋하지 않습니다.
  • 여러 작업을 한 버전에 커밋하지 않습니다.

커밋 메세지는 어떤 작업이 이루어졌는지 알아볼 수 있도록 작성합니다.

커밋 컨벤션

type: subject // 커밋 작업의 내용을 간략히 설명

body (optional) // 길게 설명할 필요가 있을 시 작성
...
...
...

footer (optional) // Breaking point가 잇을때나 특정 이슈에 대한 해결 작업일 때
perf: 회원 등록 비동기 방식 추가

기존 회원 등록시 동기로 동작하여 약 5초 정도 소요가 되어
외부 api 통신 부분을 비동기로 처리함

Closes #125

Type

타입 설명
feat 새로운 기능 추가
fix 버그 수정
docs 문서 수정
style 공백, 세미콜론 등 스타일 수정
refactor 코드 리팩토링
perf 성능 개선
test 테스트 추가
chore 빌드 과정 또는 보조 기능(문서 생성기능 등) 수정

ISSUE

등록 방법

github cli 로 작성합니다.

gh issue create -R kamser0415/kamser0415.github.io --title "Bug: 버그 테스트 하고 있습니다"
## 이슈 타입
- [ ] Bug (버그)
- [x] Feature (기능)
- [ ] Improvement (개선)
- [ ] Task (작업)
- [ ] Documentation (문서)
- [ ] Test (테스트)
- [ ] Chore (잡무)

## 설명
사용자 인터페이스에 다크 모드를 추가합니다.

### 추가 정보
다크 모드 옵션을 설정에 추가하고, UI 요소들이 다크 모드에 적절히 반응하도록 스타일을 업데이트합니다.
" --label "enhancement" --assignee "kamser0415"

라벨 종류

라벨 설명
bug 버그나 결함을 나타냅니다.
enhancement 새로운 기능 추가 요청을 나타냅니다.
question 질문이나 논의를 위한 이슈입니다.
documentation 문서 작성이나 수정 관련 이슈입니다.
duplicate 중복된 이슈입니다.
wontfix 수정하지 않을 이슈입니다.
good first issue 초보자에게 적합한 이슈입니다.
help wanted 도움이나 기여가 필요한 이슈입니다.
invalid 유효하지 않은 이슈입니다.
critical 심각한 문제를 나타냅니다.
feature 기능 요청을 나타냅니다.
improvement 기존 기능의 개선 요청을 나타냅니다.
task 특정 작업이나 활동을 나타냅니다.

Git Issue CLI

# 특정 레포지토리의 모든 이슈 목록 확인
gh issue list -R username/repository

# 열린 이슈만 보기
gh issue list -R username/repository --state open

# 닫힌 이슈만 보기
gh issue list -R username/repository --state closed

# 특정 라벨("bug")이 붙은 이슈 목록 확인
gh issue list -R username/repository --label "bug"

# 특정 사용자에게 할당된 이슈 목록 확인
gh issue list -R username/repository --assignee "username"

# 특정 작성자에 의해 생성된 이슈 목록 확인
gh issue list -R username/repository --author "username"

# 특정 이슈(번호 42)의 세부 정보 확인
gh issue view 42 -R username/repository
gh issue list -R kamser0415/kamser0415.github.io --state open

Showing 3 of 3 open issues in kamser0415/kamser0415.github.io

ID   TITLE                            LABELS      UPDATED
#50  Bug: 버그 테스트 하고 있습니다2              about 5 minutes ago
#49  Bug: 버그 테스트 하고 있습니다               about 7 minutes ago
#28  java/til-20240620/               💬 comment  about 7 days ago

Git 이슈가 올라오면 닫는 방법!

1. Commit

# 커밋 메시지에 키워드 포함
git commit -m "fix: git issue 테스트중 Closes #50"

2. Pull Request

gh pr create --title "fix: git issue 테스트중" --body "
git pull request로 테스트 중입니다.

Closes #49
" --base master --head kms

댓글남기기