회사에서 진행하던 광고주 페이지 프로젝트가 정식 출시된 이후, 새로운 요구 사항에 맞춰 기능이 계속 추가되면서 릴리즈 버전 관리의 필요성이 생겼다.
처음엔 버저닝을 적용하지 않았기 때문에 팀원들과 논의해서 그때그때 필요한 방식으로 일단 적용해 사용했지만, 점점 더 효율적인 방법에 대한 고민이 생기기 시작했다. 그래서 주변 개발자들에게 물어보고 구글링(+지피티 선배 문답)도 해봤고, 여러 가지 방법이 있다는 걸 알게 되었다.
그러던 중, 지인한테서 버전 관리를 도입하는 “목적”에 대해 다시 한번 생각해보라는 얘기를 들었다. 앱은 업데이트 여부에 따라 사용자마다 다른 버전을 사용하기 때문에 호환성이나 관리해야 할 사항이 많지만, 웹 프로젝트에서는 버전 업그레이드가 이루어지면 모든 사용자가 최신 버전을 사용하게 된다. 그래서 웹 서비스에서는 앱 서비스만큼 버전 관리가 중요한 요소가 아닐 수 있다.
이렇게 버전 관리의 필요성과 목적에 대해 다시 한번 생각하게 되었다.
기능 추가 및 변경 관리
정식 출시 후 기능이 계속 추가되면서, 언제 어떤 기능이 들어갔는지 추적할 수 있어야 함. 버전 관리를 통해 명확한 히스토리를 확보할 수 있음.
디버깅 및 롤백 이슈 대응
특정 버전에서만 발생하는 버그를 빠르게 찾고, 이전 안정 버전으로의 롤백도 용이함.
협업 효율성
어떤 기능이 어느 시점에 반영됐는지 팀원 간 명확한 커뮤니케이션이 가능함. QA, 기획, PO가 모두 버전 기준으로 소통 가능함.
병렬 개발 및 분기 전략
여러 기능을 병렬로 개발하고 순차 배포할 때, 혼선 없는 릴리즈 플랜 수립이 가능함.
팀원들과의 조사를 통해 git tag를 활용한 버전관리 방법이 있다는 것을 알게되었다.
git tag에 대해 알아보기에 앞서, 먼저 버전 관리에서 중요한 개념 중 하나인 시멘틱 버저닝에 대해 알아보자.

“Sementic - 의미론적인” → 숫자 세자리에 의미를 부여해 만든 버전
Dependency들의 버전을 효과적으로 관리할 수 있도록 해준다!
숫자별 의미
Major: 이전버전과 호환되지 않는 Breaking Cange가 일어났음을 의미
// 1.0.0 → 2.0.0
export interface A {
walk: () => void;
}
export interface A {
run: () => void;
}
Minor: 기능이 추가되었음을 의미 (호환이 깨지지 않는 선에서)
// 1.0.0 → 1.1.0
export interface A {
walk: () => void;
}
export interface A {
walk: () => void;
run: () => void;
}
Patch: 버그픽스와 같은 수정이 일어났음을 의미
→ 숫자의 변화는 그 변화의 규모를 의미하는 것은 아님
→ Major 숫자가 0으로 시작하면 아직 초기 개발 중인 제품임을 의미 → 정식 버전은 1부터 시작 “1.0.0”
(기획자로 일했던 곳에서도 시맨틱 버저닝으로 버전 관리를 했었기 때문에 해당 개념에 대해 어느정도 알고 있었는데, 개발자로서 다시 이 개념에 대해 다루게 되어서 묘한 기분이 들었다)
특정 커밋(해시 값)에 이름을 부여하는 기능으로, 주로 소프트웨어 릴리즈 버전을 관리하거나 중요한 지점을 나타내기 위해 사용됨.
→ 태그는 커밋에 대한 참조를 제공하며, 일반적으로 변경 사항을 특정 버전으로 표시하거나, 중요한 순간을 기록할 때 유용하다!
주석 태그 생성
$git tag -a v1.0.0 -m 'first version'
$git tag -a v1.0.0
// -> vim으로 메시지 설정하도록 열림
$git tag -a v1.1.0 commitID -m "Release version 1.1.0"
// 특정 커밋에 태그 붙이기
// -a 안붙이면 일반 태그로 생성됨
일반 태그 생성
-a 를 안붙이고 이름만 생성하는 태그
$git tag v1.0.0
태그 정보 보기
태그 이름, 작성자, 생성 시각, 메시지 표시
$git show v1.0.0
$git tag -d v1.0.0// 특정 태그 push
$git push origin v1.0.0
// 모든 태그 push
$git push origin --tagsgit tag 활용법에 대해 알게 되었으니, 이제 팀 내 조율을 통해 git tag를 활용한 효율적인 버전 관리 전략을 적용해보면 좋겠다.
시행착오가 있을 수 있겠지만 하나씩 직접 경험해보면서 현 상황에 알맞은 최적화된 방법을 도출하는 것을 목표로 해야겠다.