버전·형상·릴리스·배포·롤백
버전과 형상 기준선을 관리하고 릴리스 변경 내용, 배포 절차 및 롤백 조건을 정리한다.
핵심 범위
버전 관리는 소프트웨어의 변경 이력을 추적하고, 형상 관리는 소스 코드뿐 아니라 빌드 파일·문서·설정 등 제품을 구성하는 항목 전체를 식별하고 통제한다. 릴리스와 배포에서는 승인된 버전을 적용하고 문제가 생기면 이전 상태로 복구할 수 있어야 한다.
버전 관리와 형상 관리
| 구분 | 내용 |
|---|---|
| 버전 관리 | 파일의 변경 이력, 작성자, 시점, 이전 상태를 관리 |
| 형상 식별 | 관리할 형상 항목과 기준선을 정함 |
| 형상 통제 | 변경 요청을 검토·승인하고 반영 |
| 형상 상태 기록 | 변경·버전·배포 상태를 기록하고 보고 |
| 형상 감사 | 승인된 기준과 실제 형상이 일치하는지 확인 |
형상 항목에는 소스 코드, 빌드 스크립트, 설정 파일, 데이터 변경 스크립트, 테스트 자료, 매뉴얼 등이 포함될 수 있다.
변경 통제에서는 변경 요청을 접수하고 영향·비용·일정을 분석하여 권한 있는 주체가 승인·보류·거부를 결정한다. CCB는 이러한 변경 의사결정의 책임을 맡는 대표적인 조직 형태다.
저장소 기본 용어
- 저장소(Repository): 버전 이력과 파일을 보관한다.
- 커밋 또는 체크인: 변경 내용을 저장소에 기록한다.
- 체크아웃: 저장소의 특정 버전을 작업 공간으로 가져온다.
- 브랜치: 독립된 변경 흐름을 만든다.
- 병합(Merge): 분리된 변경 내용을 하나로 합친다.
- 태그(Tag): 릴리스 등 특정 시점을 식별한다.
대표 방식과 도구
| 방식 | 특징 | 대표 도구 |
|---|---|---|
| 로컬 파일 이력 관리 | 개별 파일의 수정 이력을 관리 | SCCS, RCS |
| 클라이언트·서버 방식 | 중앙 저장소를 기준으로 관리 | CVS, SVN |
| 분산 방식 | 각 개발자가 전체 저장소 이력을 보유 | Git, Mercurial |
버전 관리 도구의 자동 병합 성공이나 충돌 표시 제거는 의미적 정합성의 보증이 아니다. 병합 후 각 변경의 의도를 검토하고 관련 확인·회귀 테스트를 수행한다.
Git의 작업 상태
작업 디렉터리 → 스테이징 영역 → 로컬 저장소 → 원격 저장소를 구분한다. 수정한 내용을 스테이징하고 커밋하면 로컬 이력에 저장된다. 다른 개발자와 공유하려면 원격 저장소로 전송하는 과정이 필요하다.
파일을 B로 수정해 스테이징한 뒤 작업 파일만 C로 바꿨다면, 추가 스테이징 없이 커밋할 때 기록되는 내용은 B다. 병합 충돌은 양쪽 변경의 의도를 검토하고 관련 테스트로 확인한다.
버전 번호와 릴리스 노트
의미적 버전 관리(SemVer)의 주.부.수정 규칙은 공개 API의 호환성을 기준으로 다음처럼 해석한다. 모든 제품이 이 규칙을 따르는 것은 아니다.
- 주 버전: 호환되지 않는 큰 변경
- 부 버전: 기존 기능과 호환되는 기능 추가
- 수정 버전: 기존 기능과 호환되는 오류 수정
릴리스 노트에는 버전, 주요 변경 사항, 수정된 오류, 설치 전 조건, 호환성, 알려진 문제 등을 기록한다.
배포와 롤백
- 배포 대상 버전과 환경을 확인한다.
- 현재 상태와 중요 데이터를 백업한다.
- 승인된 패키지를 배포한다.
- 서비스 기동과 핵심 기능을 확인한다.
- 문제가 발생하면 중단 기준에 따라 이전 버전으로 복구한다.
- 배포 결과와 복구 여부를 기록한다.
롤백은 운영 환경을 이전의 정상 상태로 되돌리는 활동이다. 소스 코드만 이전 버전으로 되돌리는 것과 운영 데이터·설정까지 복구하는 것은 구분해야 한다.