본문 바로가기
프로그래밍/소프트웨어 공학 (완)

11장 - 소프트웨어 형상 관리의 모든 것 (73)

by 서가_ 2025. 6. 22.
반응형

소프트웨어 형상 관리의 모든 것

소프트웨어 개발 과정에서 가장 큰 골칫거리 중 하나는 변경 관리입니다. "어제까지 잘 되던 기능이 갑자기 안 된다", "누가 언제 무엇을 수정했는지 모르겠다", "이전 버전으로 되돌리고 싶은데 방법을 모르겠다" 등의 문제를 경험해보신 적이 있으실 겁니다. 이런 문제들을 해결하는 핵심이 바로 형상 관리(Configuration Management)입니다.

 

소프트웨어 변경의 불가피성

변경이 발생하는 이유

소프트웨어는 태생적으로 변화를 피할 수 없습니다. 에릭 브라우디(Eric Braude)는 이를 다음과 같이 표현했습니다:

"프로젝트는 진행되어가면서 새로운 산출물들이 축적되고, 축적된 산출물들은 계속해서 버전 업이 된다. 이렇게 변경되는 산출물들을 관리하는 것이 형상 관리다"

변경의 주요 원인

1. 업무 환경의 변화

  • 고객 요구사항 변경: 사용자의 니즈가 변화하거나 새로운 요구사항이 추가
  • 일정 및 예산 조정: 프로젝트 중간에 일정이나 예산이 변경되는 경우
  • 법규나 정책 변화: 관련 법령이나 회사 정책이 바뀌는 경우

2. 기술 환경의 변화

  • 하드웨어 사양 변경: 서버 성능 향상이나 클라우드 마이그레이션
  • 운영체제 업데이트: OS 버전 업그레이드나 보안 패치
  • 개발 도구 변경: 새로운 프레임워크나 라이브러리 도입

버소프(Pressman)도 이에 대해 다음과 같이 언급했습니다:

"시스템은 소프트웨어 개발 생명주기의 모든 단계에서 변경이 일어나고, 시스템을 변경하고자 하는 욕구는 개발 생명주기 동안 지속적으로 일어날 것이다"

버전 관리의 기초

버전의 개념

소프트웨어에서 버전(Version)은 개발 단계나 순서를 번호로 표시한 것입니다. 파일의 변경 이력과 차이점을 체계적으로 관리하여 애플리케이션의 안정성과 추적성을 보장합니다.

버전 번호 체계

일반적으로 사용되는 버전 번호 체계는 다음과 같습니다:

  • 주 번호 변경 (Major Version): 2.0 → 3.0
    • 기능이 크게 변화하거나 호환성이 깨지는 경우
  • 부 번호 변경 (Minor Version): 1.1 → 1.2
    • 새로운 기능 추가나 작은 개선사항
  • 패치 번호 변경 (Patch Version): 1.1.1 → 1.1.2
    • 버그 수정이나 보안 패치

버전 관리가 필요한 이유

1. 협업 효율성

여러 개발자가 동시에 작업할 때, 각자 다른 버전의 파일로 작업한다면 최종 결과물에 일관성이 없어집니다. 버전 관리를 통해 모든 팀원이 같은 기준으로 작업할 수 있습니다.

2. 변경 추적성

어떤 파일이 언제, 누구에 의해, 왜 변경되었는지 추적할 수 있어 문제 발생 시 원인을 빠르게 파악할 수 있습니다.

3. 안정성 보장

문제가 발생했을 때 이전 안정 버전으로 쉽게 되돌릴 수 있어 서비스 중단 시간을 최소화할 수 있습니다.

형상 관리의 개념과 정의

형상 관리란?

IEEE-Std-1042에서는 형상 관리를 다음과 같이 정의합니다:

"형상 관리 절차를 중심으로 형상 항목을 식별해 그 기능적·물리적 특성을 문서화하고, 그러한 특성에 대한 변경을 공식적으로 통제하고, 변경 처리 상태를 기록 및 보고하고, 명시된 요구사항에 부합하는지 확인하는 일련의 활동"

간단히 말하면, 소프트웨어의 변화하는 모든 요소들을 체계적으로 관리하는 기법입니다.

소프트웨어 형상 관리(SCM)의 목적

  • 가시성 확보: 현재 시스템의 상태를 명확히 파악
  • 추적성 보장: 변경 사항의 이력을 체계적으로 관리
  • 생산성 향상: 효율적인 변경 관리를 통한 개발 생산성 증대
  • 품질 향상: 체계적인 관리를 통한 소프트웨어 품질 개선
  • 유지보수 용이성: 향후 유지보수 작업의 효율성 증대

형상 관리의 4가지 핵심 활동

1. 형상 식별 (Configuration Identification)

목적: 관리할 대상과 방법을 명확히 정의

형상 항목 선정

변경 통제가 필요한 산출물을 식별하고 선정합니다. 모든 파일을 관리할 필요는 없으며, 프로젝트에 중요한 영향을 미치는 항목들을 선별적으로 관리합니다.

형상 식별자 규칙

팀원들이 파일의 용도와 버전을 쉽게 알 수 있도록 명명 규칙을 설정합니다.

예시: TIS_Design_UC_V1.0

  • TIS: 종합정보시스템(프로젝트명)
  • Design: 설계 단계
  • UC: 유스케이스 다이어그램
  • V1.0: 버전 1.0

베이스라인 (Baseline)

특정 시점에서 승인된 형상 항목들의 집합입니다. 베이스라인은 변경의 기준점 역할을 하며, 모든 변경은 베이스라인을 기준으로 관리됩니다.

베이스라인 설정 예시:

Ver.2023 릴리스 베이스라인:
- 요구분석서: V1.3
- 설계서: V1.2  
- 소스코드: V1.4
- 테스트케이스: V1.3

브랜치 (Branch)와 병합 (Merge)

  • 브랜치: 기존 개발 라인에서 분기하여 독립적인 개발 진행
  • 병합: 분기된 개발 내용을 다시 메인 라인에 통합

2. 형상 통제 (Configuration Control)

목적: 변경 요청을 체계적으로 검토하고 승인

변경 관리 프로세스

1단계: 변경 요청

  • 고객이나 개발자가 변경 요청서 작성
  • 변경 사유, 범위, 예상 영향도 명시

2단계: 변경 심사

  • 형상통제위원회(CCB)에서 검토
  • 검토 항목:
    • 변경 이유의 타당성
    • 기술적 실현 가능성
    • 일정과 비용에 미치는 영향
    • 다른 시스템에 미치는 영향

3단계: 변경 실시

  • 승인된 변경사항 개발 수행
  • 체크아웃 → 수정 → 테스트 → 검토

4단계: 변경 확인

  • 변경 결과 검증
  • 새로운 버전 번호 부여
  • 체크인을 통한 저장소 업데이트

3. 형상 상태 보고 (Configuration Status Accounting)

목적: 형상 항목의 현재 상태를 투명하게 공개

보고 내용

  • 프로젝트의 총 변경 횟수
  • 최신 버전 정보
  • 베이스라인 상태
  • 변경 요청 처리 현황
  • 형상통제위원회 활동 내역

보고의 중요성

팀 전체가 현재 프로젝트 상황을 정확히 파악할 수 있어 의사결정에 도움이 됩니다.

4. 형상 감사 (Configuration Audit)

목적: 형상 관리가 계획대로 수행되고 있는지 검증

감사 항목

  • 승인된 변경사항이 올바르게 반영되었는가?
  • 승인되지 않은 변경이 포함되지 않았는가?
  • 관련 문서들이 일관성 있게 업데이트되었는가?
  • 형상 관리 절차가 준수되고 있는가?

형상 관리의 역할과 책임

형상 관리 담당자

주요 책임:

  • 형상 관리 환경 구축
  • 베이스라인 설정 및 관리
  • 형상 항목 식별 및 관리
  • 정기적인 상태 보고
  • 형상 감사 수행

형상통제위원회 (CCB: Configuration Control Board)

구성원: 프로젝트 관리자, 기술 리더, 품질 담당자, 고객 담당자 등

주요 역할:

  • 변경 요청 검토 및 승인/거부 결정
  • 베이스라인 승인
  • 형상 관리 정책 수립
  • 중대한 변경사항에 대한 최종 의사결정

현대적 형상 관리 도구와 실무 적용

주요 도구

  • Git: 분산 버전 관리 시스템의 표준
  • SVN: 중앙집중식 버전 관리 시스템
  • Perforce: 대용량 프로젝트에 적합
  • Azure DevOps: Microsoft의 통합 개발 플랫폼

실무 적용 팁

1. 브랜치 전략 수립

  • Git Flow: feature, develop, release, hotfix 브랜치 구조
  • GitHub Flow: 간단한 브랜치 전략으로 지속적 배포에 적합

2. 커밋 메시지 규칙

feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
style: 코드 포맷팅
refactor: 코드 리팩토링
test: 테스트 추가

3. 코드 리뷰 프로세스

모든 변경사항은 최소 1명 이상의 동료 검토를 거쳐 메인 브랜치에 병합되도록 설정합니다.

마무리

형상 관리는 단순히 파일을 관리하는 것이 아니라, 소프트웨어 개발의 품질과 안정성을 보장하는 핵심 활동입니다. 체계적인 형상 관리를 통해:

  • 개발 효율성 향상: 변경사항 추적과 롤백이 용이
  • 품질 보장: 체계적인 변경 통제를 통한 안정성 확보
  • 협업 강화: 팀 전체의 일관된 작업 환경 제공
  • 위험 관리: 변경으로 인한 부작용 최소화

다음 포스팅에서는 소프트웨어가 배포된 후의 관리인 유지보수(Maintenance)에 대해 알아보겠습니다. 소프트웨어의 생명주기에서 가장 긴 기간을 차지하는 유지보수의 유형과 전략을 함께 학습해보시기 바랍니다.

반응형