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 공식 문서: https://semantic-release.gitbook.io/semantic-release/
- Semantic Versioning 공식 사이트: https://semver.org/
출처: Semantic Release 공식 문서, Semantic Versioning 공식 사이트.
728x90
'GIT' 카테고리의 다른 글
[git] 회원가입 비밀번호 추천 생성조건, 정규식 (0) | 2025.03.17 |
---|---|
[ssh] GitLab SSH 키 설정 및 문제 해결 시행착오 (MacBook) (0) | 2025.03.13 |
VS Code Tasks와 PowerShell로 백엔드 서비스 Git 업데이트 자동화하기 (0) | 2025.02.11 |
[Git] git 명령어 (0) | 2023.08.30 |
[Git] Git Data Structures (0) | 2023.08.30 |
댓글