티스토리 뷰

 수 많은 버전 관리 방법, 그 중에 나의 선택은?

 GitHub, PyPI 를 통해, 오픈 소스 커뮤니티 활동을 시작하면서, 소프트웨어 배포에 대해 고민을 하게 되었다. 패키지를 어떻게 만들어서 배포하는지 알아가면서 자연스럽게 버전 관리까지 확장되었다.

 '호기심이 많은 나이라 그래.' 얼마 전에 스터디 모임에서 다른 사람의 몫까지 진행하다가 나온 말이다. 큰 프로젝트를 계획하고 있는 것은 아니기에 버전 관리도 깊이 파고들 필요는 없는 주제였다. 하지만 이미 나의 지적 호기심이 자극되어 알아봤던 내용 중, 나중에 한번 더 읽어보면 좋을 내용과 곧 배포를 시작할 python-theo-framework 에서 적용할 Semantic Versioning 에 대해서 정리해두려 한다.

 소프트웨어 버전 관리, 그리고 Semantic Versioning

 소프트웨어 버전 관리는 역사적으로도 오래된 기술이다. 소프트웨어 마다의 목적에 맞게 버전도 다르게 관리되고 있으며, 그 방법은 위키백과에도 잘 정리되어 있다. (https://en.wikipedia.org/wiki/Software_versioning)

 숫자 혹은 알파벳을 이용하여 순차적으로 번호를 붙여가는 방식 혹은 빌드, 배포 날짜를 붙여가는 방식을 선택하거나 조합하여 적용한다. 소프트웨어 배포 단계를 베타, 릴리즈 단계로 나누어서 분리하고 각 번호 위치에 의미를 부여하는 것이 일반적이다. 예를 들어, 0.0.0 과 같이, 3개의 숫자를 표기하고, 앞에서부터, 공식적 배포 단계, 기능 추가, 기타 수정을 의미하도록 계획을 할 수도 있다. 더 간단하게는 2018.12.19-001 과 같이 빌드 날짜, 해당 날짜의 빌드 순번으로도 버전을 관리할 수 있다.

 파이썬 (https://www.python.org/) 에서는 PEP 440 Version Identification and Dependency Specification (https://www.python.org/dev/peps/pep-0440/) 와 같이 버전 관리 방법을 가이드하고 있다. 이 방법은 큰 영역에서 정리된 내용으로 작은 프로젝트에서 이 모든 가이드를 적용할 필요는 없다.

 그래서 더 알아보던 중, Semantic Versioning (https://semver.org/, https://semver.org/lang/ko/) 을 알게 되었고, 이를 골격 그대로 가져오고, 프로젝트에 맞게 의미를 더 붙여 활용하려 한다.

 Semantic Versioning (https://semver.org/)

 버전에 의미를 부여하는 방법이다. 요약되어 있는 내용을 그대로 직역하자면, 메이저, 마이너, 패치, 세 개의 숫자로 버전을 메이저.마이너.패치 와 같은 형식으로 만든다. 호환되지 않도록 API 의 변경이 있을 경우, 메이저 버전을 올리고, 새로운 기능이 추가되었을 경우 마이너 버전을 올리고, 버그 수정 등, 기능에 변화가 없을 경우, 패치 버전을 올리는 방식이다. 자세한 내용은 링크를 따라가면 자세한 설명과 FAQ 등이 있다.

 나는 작은 오픈 소스 프로젝트를 진행할 예정이고 (https://github.com/TheodoreWon/python-theo-framework), 이를 위해 Semantic Versioning 의 방법을 따르면서, 간단한 규칙을 몇가지 덧붙였다.

 1. Major.Minor.Patch 형식으로 버전을 표기한다.

 2. Major 버전은 큰 기능 셋이 추가될 경우 (신규 Class), 기존 API (Class 에서 제공하는 Methods 의 Interface) 가 변경되는 경우에 올린다.

 3. 첫번째 정식 Release 전에는 Major 버전은 0 으로 고정하고 Minor 버전만 올린다.

 4. Minor 버전은 기존 Class 에서 API 가 추가될 경우 올린다.

 5. Patch 는 Bug 를 수정하거나, Comment 수정, test 코드 수정, document 업데이트 등과 같이 기능에 변경이 없을 경우에 올린다.

 가이드와 같이 README 에 Semantic Versioning 을 따름과 조금 더 자세하게 정의한 내용을 추가할 예정이다.

댓글