🧪 실전 예제로 배우는 Git Flow 전략
- 기능 개발부터 릴리스, 버그 수정까지 한눈에 흐름 정리


📘 시나리오

지금부터 MyShop이라는 쇼핑몰 프로젝트에서 로그인 기능 개발 → 버전 릴리스 → 긴급 버그 수정이라는 흐름을 Git Flow 전략에 따라 진행해보겠습니다.


1️⃣ 프로젝트 초기화

# 기본 브랜치(main)는 이미 존재한다고 가정
git checkout -b develop
git push -u origin develop
  • main은 항상 배포 가능한 안정 코드
  • develop은 다음 릴리스를 위한 통합 개발 브랜치

2️⃣ 기능 개발 (로그인 기능)

# develop에서 새로운 기능 브랜치 생성
git checkout develop
git checkout -b feature/login

# 로그인 기능 개발 작업
# 파일 수정, 커밋...
git add .
git commit -m "feat: 로그인 기능 구현"

# 기능 완료 후 develop에 병합
git checkout develop
git merge feature/login
git branch -d feature/login

🔄 정리

  • feature/login 브랜치에서 기능을 개발하고
  • 완료되면 develop으로 병합 후 삭제

3️⃣ 릴리스 준비 (v1.0.0)

# release 브랜치 생성
git checkout develop
git checkout -b release/1.0.0

# 테스트 중 발견된 마이너 이슈 수정
git commit -am "fix: 로그인 버튼 색상 조정"

# 릴리스 완료 → main에 병합
git checkout main
git merge release/1.0.0
git tag -a v1.0.0 -m "🎉 Release v1.0.0"

# develop에도 병합 (테스트 수정사항 반영)
git checkout develop
git merge release/1.0.0

# release 브랜치 삭제
git branch -d release/1.0.0

✅ main은 최신 배포 버전
✅ develop은 다음 기능 개발 준비 완료


4️⃣ 긴급 버그 수정 (v1.0.1)

배포 후 로그인 시 예외 발생 보고됨! 🔥

# main에서 hotfix 브랜치 생성
git checkout main
git checkout -b hotfix/login-crash

# 문제 수정
git commit -am "fix: 로그인 시 NullPointerException 발생 문제 해결"

# 수정 완료 → main에 병합
git checkout main
git merge hotfix/login-crash
git tag -a v1.0.1 -m "🔧 Hotfix: 로그인 버그 수정"

# develop에도 병합 (다음 개발에 반영)
git checkout develop
git merge hotfix/login-crash

# hotfix 브랜치 삭제
git branch -d hotfix/login-crash

🔄 전체 흐름 요약

main
 └─ release/1.0.0 → 🔀 merge → main + develop (릴리스)
 └─ hotfix/login-crash → 🔀 merge → main + develop (버그 수정)

develop
 └─ feature/login → 🔀 merge → develop (기능 개발)

📌 브랜치별 용도 다시 보기

브랜치 용도
main 운영 중인 최종 코드 (배포 버전)
develop 다음 릴리스를 위한 통합 개발 브랜치
feature/* 기능 단위 개발 (개발자 개인 작업 공간)
release/* 배포 전 테스트/수정/버전 태깅
hotfix/* 운영 중 긴급 수정 및 패치

🧠 팁: Git Flow는 언제 쓰면 좋을까?

  • ✅ 협업 인원이 3명 이상이고
  • ✅ 기능/릴리스/버그 수정이 병렬적으로 발생하며
  • ✅ 릴리스 주기가 명확히 존재할 때

이런 상황이라면 Git Flow는 버전 관리의 복잡성을 줄이고, 팀 간 충돌을 줄여줍니다.


✅ 마무리

Git Flow는 단순히 브랜치를 나누는 것이 아니라,
기능 개발, 테스트, 릴리스, 유지보수 작업의 전체 흐름을 시각적으로 설계하게 해줍니다.

실제 프로젝트에서도 이번 예시처럼

  • 기능 단위로 feature/* 브랜치를 만들고
  • 안정성 테스트를 release/*에서 진행하며
  • 문제가 생기면 hotfix/*로 바로 대응하는 방식이
    협업의 효율성과 서비스 안정성을 크게 높여줍니다.

 

 

'Git > GitHub' 카테고리의 다른 글

Git Branch 전략 - Git Flow  (0) 2025.05.03
GitHub - Image 올리기 (README, Issue, PR)  (0) 2021.08.22

🚦Git Flow 전략 완벽 정리
- 협업을 위한 체계적인 브랜치 관리 전략


✅ Git Flow란?

Git Flow는 Vincent Driessen이 제안한 Git 브랜치 관리 전략으로,
여러 명이 협업할 때 개발, 배포, 수정 작업을 안정적으로 나누어 진행할 수 있도록 체계를 잡아주는 방법입니다.

기본적으로 역할이 명확한 브랜치를 정의하고,
기능 개발 → 테스트 → 배포로 이어지는 일련의 과정을 브랜치 흐름으로 시각화합니다.


🏷️ Git Flow의 5가지 주요 브랜치

브랜치 역할
main 최종 배포된 제품 버전이 존재 (항상 안정적인 코드)
develop 다음 버전을 위한 통합 개발 브랜치, 기능들이 이곳에 모임
feature/* 새로운 기능 개발용 브랜치 (feature/login 등)
release/* 배포 전 단계에서 테스트/버그 수정 진행 (release/1.0.0)
hotfix/* 배포된 main 브랜치에 치명적 버그가 발생했을 때 긴급 수정용 (hotfix/urgent-bug)

🧭 Git Flow 작업 흐름

1. main → 가장 안정적인 배포 코드
2. develop → 기능들을 병합해가는 통합 브랜치

[기능 개발 단계]
- develop → feature/* → develop

[배포 준비 단계]
- develop → release/* → main + develop

[긴급 버그 수정]
- main → hotfix/* → main + develop

🧪 예시 흐름 보기

✅ 기능 개발

git checkout develop
git checkout -b feature/login
# 작업 후
git commit -m "Add login feature"
git checkout develop
git merge feature/login
git branch -d feature/login

✅ 릴리즈 준비

git checkout develop
git checkout -b release/1.0.0
# 테스트 및 버그 수정
git commit -m "Fix minor issues"
git checkout main
git merge release/1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"
git checkout develop
git merge release/1.0.0
git branch -d release/1.0.0

✅ 긴급 수정

git checkout main
git checkout -b hotfix/urgent-fix
# 버그 수정
git commit -m "Fix production bug"
git checkout main
git merge hotfix/urgent-fix
git tag -a v1.0.1 -m "Hotfix release"
git checkout develop
git merge hotfix/urgent-fix
git branch -d hotfix/urgent-fix

📦 Git Flow 전략의 장점

항목 설명
✅ 역할 구분 명확 브랜치마다 목적이 분리되어 협업에 유리
✅ 배포 시점 관리 쉬움 release, hotfix로 안정된 배포 프로세스 가능
✅ 충돌 관리 용이 기능 별 feature 브랜치로 분산 작업 가능
✅ 안정성 확보 main은 항상 배포 가능한 상태로 유지됨

⚠️ 단점 및 실무에서의 보완점

항목 설명
❗ 브랜치가 많아짐 브랜치 관리가 복잡해지고 무거워질 수 있음
❗ 빠른 배포와는 거리 있음 CI/CD 파이프라인과 속도가 안 맞을 수 있음
❗ 릴리즈 주기가 짧으면 비효율 release 브랜치가 너무 자주 생기면 오히려 불편함

💡 실무 팁

  • 1~3인 규모의 사이드 프로젝트에는 단순한 main + feature/*만 써도 충분함
  • 단순화된 GitHub Flow 또는 Trunk Based Development와 혼용하기도 함
  • 릴리즈 자동화(CI/CD)와 함께 쓰려면 release 브랜치를 과감히 생략하기도 함

🔚 마무리

Git Flow는 역할이 명확한 브랜치 전략으로,
개발/테스트/배포 과정을 체계적으로 관리할 수 있게 도와주는 훌륭한 도구입니다.

협업이 많아지고 릴리즈 주기가 명확한 팀이라면,
Git Flow는 팀 생산성과 품질을 동시에 높여줄 수 있는 브랜치 전략입니다.

 

 

 

'Git > GitHub' 카테고리의 다른 글

Git Flow 전략 - 실전 예시  (0) 2025.05.03
GitHub - Image 올리기 (README, Issue, PR)  (0) 2021.08.22

GitHub - Image 올리기 (README, Issue, PR)

 

GitHub - Image 올리기

 

 

GitHub를 사용해서 코드를 관리하다 보면, 가끔 사진(Image) 파일을 올려야할 때가 종종 있다. 예를 들면, 프로젝트의 설명을 작성하는 README.md 파일에 이해를 돕기 위해 프로그램 일부를 캡쳐해서 포함시키거나, 문제를 제기하는 Issue나 문제를 해결했다는 Pull Request를 작성할 때에도 다른사람들이 빠르게 이해할 수 있도록 글 이외에 그림을 넣는 경우들이 있다. 하지만, GitHub는 코드를 관리하기 위한 목적으로 이용되기 때문에, 코드 이외에 사진 파일이나 압축 파일 등의 다른 파일들에 대한 지원을 쉽게 하고 있지 않다. 아래 몇가지 방법으로 Github에서 이미지와 함께 글을 작성하는 방법을 소개한다.

 

 

 

Issue 글을 작성할 때와 Pull Request(PR) 글을 작성할 때 Image 올리기

Issue 글과 PR 글을 작성할 때 Image를 업로드하는 방법은 동일하다. 아래 설명은 Issue 글을 올리는 상황에 대한 설명을 하고 있으나, PR 글을 작성할 때도 동일한 방법으로 글과 Image를 함께 작성하면 된다. 

 

우선, Issue 글 작성하기를 눌렀다면, 아래처럼 글을 쓰는 공간에 이미지를 복사(Ctrl+C) & 붙이기(Ctrl+V)를 하거나 이미지 파일을 드래그(Drag) & 드롭(Drop)을 하면 된다. 붙이기를 하면 아래 캡처한 화면처럼 사진이 바로 삽입되는 것이 아니라, "![Uploading <업로드할 image>]()" 라는 문자열이 잠깐 동안 삽입이 되는 것을 확인할 수 있다. 이 문자열과 동시에 하단에 "Uploading your files..." 라는 표시가 나온다. 업로드 하는 사진의 용량에 따라 시간이 다르게 나오는데, 이 때, 알아두어야할 점은, png 이미지로 변환해서 올려진다는 것이다. 만약에 올리려는 사진의 확장자가 png 가 아닌 jpg, jpeg 등의 다른 확장자라면 png로 올라갈 것이다. 아마도 Github 에서 Issue와 PR에 올리는 사진은 참고용으로만 작성하는 것이기 때문이라고 가정하고 원본 파일을 올리지 않는 것 같다.

 

 

[ upload 진행 중 ]

 

 

약 1~5초 정도가 지나면 화면 문구가 "![image](<업로드된 url>)" 형태로 변환될 것이다. 이때, <업로드된 url>은 실제로 주소창에서 호출하면 해당 이미지가 뜨기 때문에 Github는 특정 공간에 저장시키는 것을 알 수 있다. 주소가 내 Git Repository 주소가 아니기 때문에 아마도 시간이 어느정도 지난후 Image를 포함하는 Issue나 PR이 필요없어질 때 쯤? 아니면 Git Repository가 삭제되면? 등의 특정 시간에 제거되지 않을까 생각된다. 하지만, 일반적으로 Issue나 PR은 오랜시간 동안 유지되는 글이 아니기 때문에, 상관없을 것이다.

 

 

[ upload 완료 ]

 

 

만약, 2개 이상의 사진을 추가하고 싶다면, 앞에서 했던 것과 동일하게 간단히 끌어다 놓으면 된다. 추가된 그림도 일반적인 글처럼 인식한다. 다시 말해서, 그림을 추가한다고 해서 자동으로 엔터가 붙지 않는다. 아래 그림은 세로와 가로로 작성 하는 방법을 나눠놨지만, 간혹 첨부된 이미지 이름이 길기 때문에 아래 그림처럼 내가 엔터를 쳤는지, 치지 않았는지 헷가릴 때가 있다. 따라서, 이미지가 세로로 보이기를 원한다면 그림 + 엔터, 이미지가 가로로 보이기를 원한다면 그림 + 스페이스로 작성하면 된다.

 

 

[ 2개 이미지 upload 완료 ]

 

 

너무 큰 이미지를 삽입하거나 너무 작은 이미지를 삽입해서 이미지의 크기를 조정하고 싶은 경우가 있다면, 위 첨부한 그림처럼 HTML 태그의 <img> 태그를 사용하면 된다. 앞 설명에서 이미지를 끌어다 놓은 순가 이미 Github에 이미지는 업로드되며 URL이 출력된다고 하였다. 이를 이용하면 <img src="<업로드된 url>">로 변경할 수 있다. 그리고 <img> 태그에서 제공하는 width 속성을 이용하면 삽입되는 이미지의 크기 또한 조절이 가능하다. 아래 화면은 위의 Issue 글이 작성되었을 때의 모습이다.

 

 

[ 2개 이미지 upload 완료 화면 ]

 

 

 

 

README.md 파일에 Image 올리기

리서치 해본 결과, 아래의 4가지 방법들을 사용해서 Image를 업로드하는 방법을 찾을 수 있었다. 개인적으로 [방법1]과 [방법3]이 사용하기에 적당할 것이라고 생각된다. README.md 파일을 빨리 작성해서 누군가 보여줘야 한다면 [방법1]을 사용하고, 누군가에게 프로젝트를 배포해야한다거나 장기간 안정적으로 유지되어야하는 프로젝트에 작성되어야하는 README.md 파일을 만들어야 한다면 [방법3]을 사용하는 것이 적당할 것이라고 생각된다. 

 

[방법1] Issue와 PR을 이용해서 Image를 올린 후, 링크를 거는 방법 (=이미지를 Github가 관리하는 어딘가에 보관 / 언제 없어질지 모름)

1. 위에서 설명했던 것처럼 Issue와 PR을 통해 사진을 삽입한 후, 글 작성을 완료한다.

2. README.md에 업로드된 이미지 URL을 링크로 삽입한다.

 

[방법2] Issue와 PR을 이용해서 Image를 올린 후, 링크를 거는 방법 (=이미지를 Github가 관리하는 어딘가에 보관 / 언제 없어질지 모름)

1. 위에서 설명했던 것처럼 Issue와 PR을 통해 사진을 삽입한 후, 글 작성을 완료하지 않는다.

2. README.md에 업로드된 이미지 URL을 링크로 삽입한다.

 

[방법3] Git에 직접 Image를 올린 후, 링크를 거는 방법 (=이미지를 Repository에서 직접 보유하는 방법)

1. Image가 사용될 Git Repository에 directory를 생성하고 Image를 올린다.

2. README.md에 업로드된 이미지 URL을 링크로 삽입한다.

 

[방법4] Git에 직접 Image를 올린 후, 링크를 거는 방법 (=이미지 전용 Repository 생성하는 방법)

1. Image와 관련없는 Git Repository에 directory를 생성하고 Image를 올린다.

2. README.md에 업로드된 이미지 URL을 링크로 삽입한다.

 

README.md 파일에 이미지를 삽입할 때는 아래처럼 마크다운 포멧으로 혹은 HTML 포멧으로 작성하면 된다.

마크다운 포멧으로 작성
![<이미지 이름>](<업로드된 이미지 URL>)
![sample](https://...../sample.png)

HTML 포멧으로 작성
<img src="<업로드된 이미지 URL>">
<img src="https://...../sample.png">

 

 

 

참고

: https://caileb.tistory.com/201

'Git > GitHub' 카테고리의 다른 글

Git Flow 전략 - 실전 예시  (0) 2025.05.03
Git Branch 전략 - Git Flow  (0) 2025.05.03

+ Recent posts