본문 바로가기
GIT

[Git] Semantic Release를 활용한 자동 버전 관리 및 릴리스 자동화 가이드

by haheehee 2025. 3. 7.
728x90

1. Semantic Release 개요

Semantic Release는 커밋 메시지에 포함된 정보를 분석해 Semantic Versioning 규칙에 따라 자동으로 버전을 결정하고, 릴리스 노트를 생성하며, 태깅 및 배포까지 수행하는 도구다. 이 도구는 개발자가 수동으로 버전 번호를 관리하거나 릴리스 노트를 작성하는 번거로움을 줄여주며, CI/CD 환경에서 배포 프로세스를 효율적으로 관리한다.

2. 작동 원리

  • 커밋 메시지 분석:
    개발자가 작성한 커밋 메시지가 Conventional Commit 형식을 따르는지 확인한다.
  • 버전 결정:
    커밋 메시지의 키워드에 따라 다음 버전 업데이트 유형을 결정한다.
    • feat: 새로운 기능 추가를 의미하며, 마이너 버전 업데이트가 일어난다.
    • fix: 버그 수정을 의미하며, 패치 버전 업데이트가 일어난다.
    • BREAKING CHANGE: 하위 호환성이 깨지는 큰 변경 사항을 의미하며, 메이저 버전 업데이트가 일어난다.
  • 릴리스 노트 생성:
    변경 내역을 기반으로 자동으로 릴리스 노트를 생성한다.
  • 배포:
    새 버전을 태깅하고, npm이나 GitHub 등 지정된 배포 대상에 자동으로 배포한다.

3. 커밋 메시지 키워드 정리

Conventional Commit 규칙에 따라 사용되는 주요 커밋 메시지 키워드를 정리하면 아래와 같다.

  • feat:
    새로운 기능 추가를 의미하며, Semantic Release에서는 마이너 버전 업데이트가 이루어진다.
  • fix:
    버그 수정을 의미하며, 패치 버전 업데이트가 이루어진다.
  • BREAKING CHANGE:
    기존 기능과 호환되지 않는 변경 사항을 의미하며, 메이저 버전 업데이트가 이루어진다.
  • docs:
    문서 관련 변경(문서 수정, 추가 등)을 의미하며, 버전 업데이트에는 영향을 주지 않는다.
  • style:
    코드 포맷팅, 들여쓰기, 공백 등 스타일 관련 변경을 의미하며, 기능 변경 없이 배포 과정에 영향을 주지 않는다.
  • refactor:
    코드 리팩토링을 의미하며, 기능 추가나 버그 수정 없이 구조 개선을 나타낸다.
  • perf:
    성능 개선 관련 변경을 의미하며, 기능 개선으로 패치 버전 업데이트가 이루어지는 경우가 많다.
  • test:
    테스트 코드 추가 또는 수정을 의미하며, 배포 버전 업데이트에는 영향을 주지 않는다.
  • build:
    빌드 관련 변경(빌드 스크립트 수정, 의존성 업데이트 등)을 의미하며, 배포 로직에 직접적인 영향을 주지 않는다.
  • ci:
    CI 설정 변경(GitHub Actions, Travis CI 등)을 의미하며, 버전 업데이트에는 영향을 주지 않는다.
  • chore:
    그 외 기타 관리 작업(리팩토링 외의 잡다한 작업)을 의미하며, 배포 버전 업데이트에는 영향을 주지 않는다.
  • revert:
    이전 커밋을 되돌리는 변경 사항을 의미하며, 상황에 따라 버전 업데이트가 발생할 수 있다.

위 키워드들의 버전 업데이트 기준은 일반적인 Conventional Commit 및 Semantic Release의 기본 설정에 따른 것이며, 일부 프로젝트에서는 커스터마이징할 수 있다.

4. 설정 파일 예시

Semantic Release를 사용하기 위해 프로젝트 루트에 설정 파일(예: release.config.js)을 작성한다. 아래는 기본적인 설정 파일 예시다.

module.exports = {
  branches: ['main'], // 배포를 진행할 브랜치를 지정한다.
  plugins: [
    '@semantic-release/commit-analyzer',       // 커밋 메시지를 분석한다.
    '@semantic-release/release-notes-generator', // 릴리스 노트를 생성한다.
    '@semantic-release/npm',                     // npm 배포를 수행한다. (필요 시)
    '@semantic-release/github'                   // GitHub 릴리즈를 생성한다. (필요 시)
  ]
};

5. CI/CD 통합 예시

CI/CD 환경에서 Semantic Release를 실행한다. 예를 들어, GitHub Actions 워크플로 파일을 아래와 같이 구성한다.

 
name: Release

on:
  push:
    branches:
      - main

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'
      - name: Install dependencies
        run: npm install
      - name: Run Semantic Release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
        run: npx semantic-release

6. 참고 자료


 

 

 

 

 

출처: Semantic Release 공식 문서, Semantic Versioning 공식 사이트.

728x90

댓글