⬆️

효과적으로 버전 관리하기

Created
2024/01/19 00:33
안녕하세요 볼드나인 프론트엔드 개발자 장예지입니다.
개발을 하다 보면 새로운 기능의 추가, 버그의 수정, 성능 향상 등 다양한 변경사항이 빈번하게 발생하는 만큼,
이를 체계적으로 관리하기 위한 효과적인 버전 관리 시스템이 필수입니다. 이글에서는 버전을 효과적으로 관리하는 방법에 대해서 설명해 보겠습니다.

1. 버전 관리의 필요성

1.
팀 협업의 원활성: 여러 개발자가 동시에 작업하는 환경에서 버전 관리는 팀 협업을 원활하게 만듭니다. 각자의 작업 내용을 명확히 파악하고, 변경사항을 충돌 없이 통합하는 데 도움이 됩니다.
2.
안정성 및 신뢰성 확보: 새로운 기능 추가나 버그 수정과 같은 변경사항을 통제된 프로세스로 배포하기 위해서는 버전 관리가 필수입니다. 안정성과 신뢰성을 유지하기 위해 각 버전은 특정 시점의 안정된 상태를 반영해야 합니다.
3.
문제 해결 및 디버깅 용이성: 특정 버전에서 발생한 문제에 대한 디버깅이 필요할 때, 해당 버전의 코드를 빠르게 확인하고 수정할 수 있습니다. 각 버전은 고유한 식별자를 가지므로 문제 발생 시 특정 버전으로 돌아가기 용이합니다.

2. 시맨틱 버전 (Semantic Versioning)

버전관리의 필요성에 대해서는 알겠는데 그렇다면 어떤 규칙으로 버전을 관리해야할까요?
소프트웨어 버전을 효과적으로 관리하기 위해서는 시맨틱 버전이라는 규칙 세트가 도움됩니다.
이 규칙은 명확하게 정의된 형식으로 버전을 관리함으로써 소프트웨어의 변경사항을 명확히 표현하고, 버전 간의 호환성을 보장합니다.
주로 개발자와 사용자 간의 커뮤니케이션을 개선하며, 프로젝트의 안정성과 확장성을 높이기 위해 사용됩니다.

버전 형식

시맨틱 버전의 형식은 주 버전, 부 버전 및 수립 버전으로 이루어져 있습니다.
1.
주 버전(Major Version): 호환성이 깨지는 변화가 있을 때 증가합니다. 새로운 기능이나 API 변경으로 기존 코드와 호환되지 않을 때 주 버전을 올립니다.
2.
부 버전(Minor Version): 기능이 추가되거나 변경되었지만, 기존 코드와의 호환성은 유지되는 경우 증가합니다. 새로운 기능이나 개선 사항이 있을 때 부 버전을 올립니다.
3.
수립 버전(Patch Version): 기존 기능의 버그를 수정했을 때 증가합니다. 호환성을 유지하면서 발생한 작은 수정 사항에 해당합니다.
version example : 1(Major).2(Minor).3(Patch)
JavaScript
복사

버전 번호 규칙

각 버전 번호는 음이 아닌 정수입니다.
버전 번호는 점으로 구분됩니다.
각 숫자는 왼쪽에서 오른쪽으로 높은 수준의 변화를 나타냅니다.

3. Release/Tag 생성

버전을 생성했으면 이 버전을 release하고 tag를 해야 합니다. release하고 tag하는 방법은 아래와 같습니다.
1.
마지막 commit에 tag달기
git tag "tag이름"
Plain Text
복사
2.
GitHub 레포지토리로 이동: 프로젝트 레포지토리에 들어가서 "Releases" 탭으로 이동합니다.
3.
새로운 Release 만들기: "Draft a new release" 버튼을 클릭하여 새로운 릴리스를 생성합니다.
4.
릴리스 정보 입력: 제목, 태그 버전, 릴리스에 대한 설명 및 변경 사항 등을 입력합니다.
5.
릴리스 발행(Publish release): 정보를 모두 입력한 후, "Publish release" 버튼을 클릭하여 릴리스를 생성하고 발행합니다.
그러나 이러한 수동적 버전 발행에는 불편함이 있습니다.
첫째로, 매번 수동으로 정보를 입력하는 것은 번거롭고 반복적인 작업으로 이어집니다. 이는 시간을 소모하며 개발자들에게 불필요한 작업 부담을 줄 수 있습니다.
두번째로, 수동으로 버전 번호를 입력하거나 릴리스 설명을 작성하는 과정에서 인간 에러가 발생할 가능성이 있습니다. 버전 번호나 릴리스 설명에 실수가 포함되면 프로젝트의 안정성에 영향을 미칠 수 있습니다.
셋째로, 팀 멤버 간에 릴리스를 만드는 방식이 각자 상이할 수 있어 프로세스의 일관성이 부족할 수 있습니다. 이로 인해 협업이 어려워지고 팀 전체의 업무 효율성이 저하될 수 있습니다.
이러한 문제들을 해결하고 프로세스의 효율성을 높이기 위해서는 버전의 자동화가 필요합니다.

4. 버전 자동화

버전 자동화를 위해서 시맨틱 릴리즈를 사용하면 좋습니다.
시맨틱 릴리즈는 버전 관리를 자동화하고 의미 있는 버전 번호를 생성하기 위한 도구입니다.
시맨틱 릴리즈의 주요기능으로는 자동버전 관리, 릴리즈 노트 자동생성, 자동 태깅이 있습니다.
GitHub Actions으로 자동화
name: Release on: push: branches: ['staging'] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} run: npx dlx semantic-release
JavaScript
복사

결론

개발에서 효과적인 버전 관리는 프로젝트의 안정성과 팀 협업의 핵심입니다.
Semantic Release를 도입함으로써, 의미 있는 버전을 자동으로 생성하고 변경사항을 효율적으로 관리할 수 있습니다. 이를 통해 프로젝트의 품질을 향상시키고 개발자들은 보다 창의적이고 생산적인 작업에 집중할 수 있게 될 것입니다.
reference