Skip to content

시멘틱 버저닝

KIM DAEUN edited this page Aug 22, 2024 · 1 revision

1. 시멘틱 버저닝이란?

시멘틱 버저닝(Semantic Versioning)은 소프트웨어의 버전을 관리하는 체계적인 방법입니다. 이는 MAJOR.MINOR.PATCH 형식을 따르며, 각 숫자는 다음과 같은 의미를 가집니다:

  • MAJOR: 호환되지 않는 API 변경
  • MINOR: 이전 버전과 호환되는 기능 추가
  • PATCH: 이전 버전과 호환되는 버그 수정

예를 들어, 버전 2.3.1은 두 번째 주요 릴리스의 세 번째 minor 업데이트이며, 그 이후 한 번의 패치가 적용되었음을 의미합니다.


2. 시멘틱 버저닝의 필요성

시멘틱 버저닝은 다음과 같은 이유로 중요합니다:

  1. 명확한 의사소통: 소프트웨어의 변경 사항을 명확하게 전달합니다.
  2. 안정성: 사용자가 업데이트로 인한 영향을 예측할 수 있게 해줍니다.
  3. 개발 흐름: 프로젝트의 진행 상황과 중요한 변경 사항을 쉽게 추적할 수 있습니다.

3. 우리 팀의 시멘틱 버저닝 기준

3.1 MAJOR

사용자의 서비스 이용 흐름에 현저한 변화가 생긴 경우

  • Domain을 기준으로, 새로운 API 연결 및 Endpoint 생성이 이루어졌을 때
  • 신규 route 혹은 기능 추가
  • 기존 기능/페이지의 완전한 대체

3.2 MINOR

사용자의 서비스 이용 흐름에 큰 변화는 없으나 기능적인 변경사항을 실감할 수 있는 경우

  • 기존 Domain에 기능이 추가된 경우
  • 기존 페이지, 컴포넌트에 기능 혹은 스타일 변경이 적용된 경우
  • 스타일 변경
  • 웹 접근성 개선
  • 전체적인 서비스에 크게 영향을 미치진 않으나 자잘한 컴포넌트/훅이 추가

3.3 PATCH

사용자가 기능적인 변경사항을 실감할 수 없는 경우

  • 보안 개선사항
  • 리팩토링
  • 렌더링 성능 개선
  • 빌드 속도 개선
  • 의존성 패키지의 마이너/패치 업데이트
  • 오타 수정
  • 버그 수정

4. 브랜치별 버저닝 전략

우리 팀은 developmain 두 개의 주요 브랜치를 운영하고 있습니다. 각 브랜치는 다른 환경에 배포되므로, 다음과 같은 버저닝 전략을 적용합니다:

4.1 main 브랜치 (www.cruru.kr)

  • 공식 릴리스 버전을 나타내는 시멘틱 버저닝을 사용합니다.
  • 예: 1.2.3, 2.0.0
  • 이 버전은 안정적이고 사용자에게 공개된 버전을 의미합니다.
  • MAJOR, MINOR, PATCH 업데이트는 이 브랜치를 기준으로 결정됩니다.

4.2 develop 브랜치 (beta.cruru.kr)

  • 이 버전은 다음 릴리스를 위해 개발 중인 버전을 의미합니다.
  • 프리릴리스 버전을 나타내는 접미사를 사용합니다.
  • 예: 1.3.0-beta.1
  • 베타 버전: beta.1, beta.2

4.3 버전 관리 워크플로우

  1. develop 브랜치에서 새로운 기능 개발 시작:
    • 현재 main 버전이 1.2.3이라면, develop1.3.0-beta.1로 시작
  2. develop에서 릴리스 준비가 완료되면:
    • 1.3.0-beta.1로 변경하고 최종 테스트 진행
  3. 릴리스 승인 후 main으로 병합:
    • main 브랜치의 버전을 1.3.0으로 업데이트
    • 태그 생성 및 CHANGELOG 업데이트
  4. main에서 새로운 develop으로 분기:
    • develop 브랜치의 버전을 다음 개발 버전(예: 1.4.0-beta.1)으로 설정

4.4 핫픽스 관리

  • 긴급한 버그 수정이 필요한 경우, main에서 직접 핫픽스 브랜치를 생성합니다.
  • 수정 후 main으로 병합하면서 PATCH 버전을 증가시킵니다. (예: 1.3.1)
  • 이후 develop에도 해당 수정사항을 병합합니다.

5. (추후 적용) Git Tag 사용 및 릴리즈 노트 생성 자동화

  • develop 브랜치의 코드가 main 브랜치로 병합되면, 해당 병합 커밋에 버전 번호가 포함된 Git 태그를 추가합니다. 예를 들어, v1.3.0과 같은 형식으로 태그를 생성합니다.
  • 이렇게 생성된 태그를 기준으로 릴리즈 노트를 작성합니다. 릴리즈 노트를 자동으로 생성할 수 있도록 스크립트나 도구를 설정하여, 수작업 없이 릴리즈 노트가 자동으로 작성되도록 합니다. (GitHub Docs - 자동으로 생성된 릴리스 정보 참고)