Git Tag로 버전 관리하기

Minsu·2025년 6월 8일

회사에서 진행하던 광고주 페이지 프로젝트가 정식 출시된 이후, 새로운 요구 사항에 맞춰 기능이 계속 추가되면서 릴리즈 버전 관리의 필요성이 생겼다.

처음엔 버저닝을 적용하지 않았기 때문에 팀원들과 논의해서 그때그때 필요한 방식으로 일단 적용해 사용했지만, 점점 더 효율적인 방법에 대한 고민이 생기기 시작했다. 그래서 주변 개발자들에게 물어보고 구글링(+지피티 선배 문답)도 해봤고, 여러 가지 방법이 있다는 걸 알게 되었다.

그러던 중, 지인한테서 버전 관리를 도입하는 “목적”에 대해 다시 한번 생각해보라는 얘기를 들었다. 앱은 업데이트 여부에 따라 사용자마다 다른 버전을 사용하기 때문에 호환성이나 관리해야 할 사항이 많지만, 웹 프로젝트에서는 버전 업그레이드가 이루어지면 모든 사용자가 최신 버전을 사용하게 된다. 그래서 웹 서비스에서는 앱 서비스만큼 버전 관리가 중요한 요소가 아닐 수 있다.

이렇게 버전 관리의 필요성과 목적에 대해 다시 한번 생각하게 되었다.

현재 배포 버전 관리가 필요한 나름의 이유

  • 기능 추가 및 변경 관리
    정식 출시 후 기능이 계속 추가되면서, 언제 어떤 기능이 들어갔는지 추적할 수 있어야 함. 버전 관리를 통해 명확한 히스토리를 확보할 수 있음.

  • 디버깅 및 롤백 이슈 대응
    특정 버전에서만 발생하는 버그를 빠르게 찾고, 이전 안정 버전으로의 롤백도 용이함.

  • 협업 효율성
    어떤 기능이 어느 시점에 반영됐는지 팀원 간 명확한 커뮤니케이션이 가능함. QA, 기획, PO가 모두 버전 기준으로 소통 가능함.

  • 병렬 개발 및 분기 전략
    여러 기능을 병렬로 개발하고 순차 배포할 때, 혼선 없는 릴리즈 플랜 수립이 가능함.

  • 의사결정 기록
    버전은 코드의 상태이자, 당시에 내렸던 모든 기술적·비즈니스적 결정의 결과물이므로, 당시 의사결정 기록 추적을 위해 필요하다고 생각함.

팀원들과의 조사를 통해 git tag를 활용한 버전관리 방법이 있다는 것을 알게되었다.
git tag에 대해 알아보기에 앞서, 먼저 버전 관리에서 중요한 개념 중 하나인 시멘틱 버저닝에 대해 알아보자.

시멘틱 버저닝(Sementic Versioning)

시멘틱 버저닝이란?

  • “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

git tag란?

특정 커밋(해시 값)에 이름을 부여하는 기능으로, 주로 소프트웨어 릴리즈 버전을 관리하거나 중요한 지점을 나타내기 위해 사용됨.

→ 태그는 커밋에 대한 참조를 제공하며, 일반적으로 변경 사항을 특정 버전으로 표시하거나, 중요한 순간을 기록할 때 유용하다!

tag 종류

  1. 주석 태그(Annotated Tag)
    • 태그 이름 + 정보(태그 작성자, 태그 시각, 태그 메시지) 포함
  2. 일반 태그(Lightweight Tag)
    • 태그 이름만 포함

git tag 명령어

  • 주석 태그 생성

    $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
    • -m 사용 불가능 → 메시지 생성 불가
  • 태그 정보 보기

    태그 이름, 작성자, 생성 시각, 메시지 표시

    $git show v1.0.0
  • 태그 삭제
    $git tag -d v1.0.0
  • 태그 원격 저장소에 push하기
    // 특정 태그 push
    $git push origin v1.0.0
    
    // 모든 태그 push
    $git push origin --tags

계획

git tag 활용법에 대해 알게 되었으니, 이제 팀 내 조율을 통해 git tag를 활용한 효율적인 버전 관리 전략을 적용해보면 좋겠다.
시행착오가 있을 수 있겠지만 하나씩 직접 경험해보면서 현 상황에 알맞은 최적화된 방법을 도출하는 것을 목표로 해야겠다.

profile
지식의 해상도를 높여가는 개발자 (っ'-')🖥️

0개의 댓글