형상 관리 (SCM) - 4가지 활동과 도구(CVS·SVN·Git)
요약
정보처리기사 실기 시험에서 자주 등장하는 소프트웨어 형상 관리(SCM, Software Configuration Management)의 정의, 4가지 활동(형상 식별·통제·감사·기록), 베이스라인 개념, 대표 도구(CVS, SVN, Git)를 정리하고 기출문제로 마무리합니다.
형상 관리(SCM, Software Configuration Management) 는 소프트웨어 개발 생명주기 동안 발생하는 산출물(소스 코드·문서·설정 파일 등)의 변경 사항을 체계적으로 추적·통제하여 무결성1을 유지하는 활동입니다. 4가지 활동(식별·통제·감사·기록)으로 구성되며 대표 도구로 CVS, SVN, Git 이 있습니다.
| 용어 | 키워드 |
|---|---|
| 형상 관리(SCM) | 변경 사항 추적·통제, 무결성 유지, 도구: CVS·SVN·Git |
| 베이스라인(Baseline) | 공식 검토·합의를 거친 형상 항목의 기준선 |
| 형상 식별 | 관리 대상(형상 항목) 정의 및 베이스라인 설정 |
| 형상 통제 | 변경 요구를 검토·승인하여 베이스라인에 반영 |
| 형상 감사 | 베이스라인의 무결성·일관성 확인 |
| 형상 기록 | 형상 항목의 변경 이력 기록·보고 |
형상 관리란?
형상 관리(SCM, Software Configuration Management) 는 소프트웨어 개발 과정에서 발생하는 변경 사항을 체계적으로 추적·통제하는 기법입니다.
소프트웨어 프로젝트는 시간이 흐르면서 소스 코드, 설계 문서, 빌드 설정, 테스트 스크립트 등 수많은 산출물이 끊임없이 변경됩니다. 누가, 언제, 어떤 이유로 무엇을 바꿨는지 기록되지 않으면 누가 마지막 수정자인지 모르는 코드, 재현 불가능한 빌드2, 사라진 설계 결정 같은 문제가 발생합니다.
형상 관리는 이런 산출물을 형상 항목(Configuration Item) 으로 식별해 변경 이력을 남기고, 변경 요청을 통제하며, 어느 시점의 산출물 모음으로도 다시 빌드·배포할 수 있도록 보장합니다.
Git으로 비유하면 형상 관리는 프로젝트를 Git 저장소로 관리하는 것과 같습니다. 파일을 고칠 때마다 커밋3을 남기면 누가·언제·왜 바꿨는지가 이력으로 쌓이고, 언제든 원하는 시점의 파일로 되돌아갈 수 있습니다.

대표 도구는 CVS, SVN, Git 같은 버전 관리 시스템(VCS)입니다.
베이스라인(Baseline)
베이스라인(Baseline) 은 공식 검토와 합의를 거쳐 확정된 형상 항목의 모음으로, 이후 변경의 기준이 되는 기준선입니다.

- 베이스라인이 설정되면 그 안의 형상 항목은 임의로 수정할 수 없으며, 반드시 정해진 절차(형상 통제)를 거쳐야 변경할 수 있습니다.
- 프로젝트 단계마다 요구사항 베이스라인 → 설계 베이스라인 → 제품 베이스라인 식으로 단계별 베이스라인이 누적됩니다.
- 베이스라인이 있어야 "어느 시점의 어떤 산출물 묶음"인지 명확해지며, 회귀(regression)4 시 비교 기준이 됩니다.
Git으로 비유하면 베이스라인은 검토를 마친 커밋에 v1.0 같은 태그5를 붙여 두는 것과 같습니다. 태그를 붙인 시점은 기준이 되어, 나중에 문제가 생기면 v1.0과 지금을 비교해 무엇이 바뀌었는지 찾을 수 있습니다.
형상 관리 4가지 활동
형상 관리는 4가지 활동으로 구성되며, 각 활동은 베이스라인의 무결성을 유지하기 위한 서로 다른 역할을 합니다.
| 활동 | 역할 | 핵심 키워드 |
|---|---|---|
| 형상 식별(Identification) | 관리 대상(형상 항목)을 정의하고 베이스라인을 설정 | 식별, 베이스라인 설정 |
| 형상 통제(Control) | 변경 요구를 검토·승인하여 베이스라인에 반영 | 변경 요구 검토·승인, CCB |
| 형상 감사(Audit) | 베이스라인의 무결성·일관성을 확인 | 검증, 감사 |
| 형상 기록(Status Accounting) | 형상 항목의 변경 이력을 기록·보고 | 변경 이력, 보고서 |
4가지 활동을 Git 작업 흐름에 대응시키면 다음과 같습니다.

1. 형상 식별 (Configuration Identification)
- 어떤 산출물을 형상 항목으로 관리할지 결정하고 식별자를 부여합니다.
- 베이스라인을 정의하여 변경 통제의 기준을 마련합니다.
2. 형상 통제 (Configuration Control)
- 변경 요청(CR, Change Request)이 들어오면 변경 통제 위원회(CCB, Change Control Board) 가 영향도·일정·비용을 검토하고 승인 또는 기각합니다.
- 승인된 변경만 베이스라인에 반영됩니다. "변경 요구를 검토·승인하여 베이스라인에 반영"이라는 지문이 나오면 형상 통제입니다.
3. 형상 감사 (Configuration Audit)
- 베이스라인이 요구사항을 충족하는지, 형상 항목의 무결성과 일관성이 유지되는지 검증합니다.
- 기능 감사(FCA, Functional Configuration Audit), 물리 감사(PCA, Physical Configuration Audit)로 나뉩니다.
- 기능 감사(FCA): 만든 소프트웨어가 요구사항에 적힌 기능을 실제로 수행하는지 테스트 결과로 확인합니다. 예를 들어 요구사항의 "회원 가입 시 이메일 인증" 기능이 테스트에서 실제로 동작했는지 봅니다.
- 물리 감사(PCA): 배포할 산출물(실행 파일·소스 코드·문서)이 베이스라인에 기록된 내용과 똑같이 갖춰져 있는지 확인합니다. 예를 들어 배포 패키지에 들어간 소스 코드 버전과 사용자 매뉴얼이 베이스라인의 목록과 일치하는지 봅니다.
4. 형상 기록 (Status Accounting)
- 형상 항목의 식별 정보, 변경 이력, 베이스라인 상태를 기록·보고하여 누구나 현재 상태를 추적할 수 있도록 합니다.
형상 관리 도구
형상 관리 도구는 소스 코드와 산출물의 변경 이력을 추적·통제하는 버전 관리 시스템(VCS, Version Control System) 을 가리킵니다. 시험에서 자주 등장하는 도구는 다음 세 가지입니다.
중앙 집중식 vs 분산형
- 중앙 집중식(Centralized VCS): CVS, SVN. 단일 중앙 서버에 모든 이력이 저장되며 클라이언트13는 서버에 의존합니다. 서버 장애 시 작업이 어려워집니다.
- 분산형(Distributed VCS): Git, Mercurial. 모든 개발자가 전체 이력을 가진 로컬 저장소를 보유합니다. 오프라인 작업과 빠른 분기·병합14이 가능합니다.
Git으로 비유하면 git clone으로 저장소를 받는 순간 내 PC에도 전체 이력이 복사됩니다. 그래서 GitHub 서버가 잠시 멈춰도 내 PC에서 커밋을 계속 쌓고 이력을 볼 수 있습니다. 반대로 SVN은 커밋할 때마다 중앙 서버에 접속해야 합니다.

정보처리기사 실기 기출문제
Footnotes
-
무결성: 데이터가 허락 없이 바뀌지 않고 온전하게 유지되는 상태입니다. ↩
-
재현 불가능한 빌드: 예전에 만들어 배포한 프로그램을 똑같이 다시 만들어 낼 수 없는 상태입니다. 그때 어떤 버전의 소스 코드와 설정 파일을 썼는지 기록이 없으면, 고객이 쓰는 버전에서 난 오류를 다시 일으켜 보거나 고칠 수 없습니다. ↩
-
커밋(commit): Git에서 파일 변경 내용을 설명 메시지와 함께 이력 한 칸으로 저장하는 것입니다. ↩
-
회귀(regression): 새로 고친 코드 때문에 예전에는 잘 되던 기능이 다시 망가지는 것입니다. 베이스라인과 비교하면 무엇이 바뀌어 문제가 생겼는지 찾을 수 있습니다. ↩
-
태그(tag): 특정 커밋에
v1.0처럼 이름표를 붙여 나중에 바로 찾아갈 수 있게 하는 Git 기능입니다. ↩ -
브랜치(branch): 원본 이력에서 갈라져 나와 따로 작업하는 작업 갈래입니다. main 브랜치는 보통 배포 기준이 되는 원본 갈래입니다. ↩
-
Pull Request: 내 브랜치의 변경을 main 브랜치에 합쳐 달라고 요청하고, 다른 사람이 검토·승인하는 GitHub 기능입니다. ↩
-
git log: 저장소의 커밋 이력(작성자·날짜·메시지)을 보여 주는 Git 명령입니다. ↩ -
오픈소스: 소스 코드가 공개되어 누구나 무료로 쓰고 고칠 수 있는 소프트웨어입니다. ↩
-
디렉토리: 파일을 담는 폴더, 즉 폴더 구조를 말합니다. ↩
-
메타데이터: 파일 내용이 아니라 파일 이름·속성처럼 파일에 딸린 부가 정보입니다. ↩
-
로컬 저장소: 서버가 아니라 개발자 자기 PC에 있는 저장소입니다. ↩
-
클라이언트: 서버에 접속해 작업하는 개발자 PC입니다. ↩
-
분기·병합: 작업 갈래를 나눴다가(분기) 다시 하나로 합치는(병합) 것입니다. ↩