본문 바로가기

Programming

형상관리란? Git, SVN으로 SCM 개념 이해하기

1. 형상관리란?

형상관리는 영어로 SCM(Software Configuration Management)로 소프트웨어 개발에서 코드와 관련된 모든 변경사항을 체계적으로 추적하고 제어하는 프로세스를 말한다.

 

사실 ‘형상관리’라는 용어 자체가 좀 생소한데, 나도 첫 회사에 들어가서 처음 알게 됐던 개념이다.
형상관리 솔루션 엔지니어로 일했기 때문에 실무를 통해 자연스럽게 익히게 됐다.

 

개발자 친구들이 많았지만, 대부분 형상관리라는 말을 들으면 생소하게 받아들여서 설명해주기가 난감했던 기억이 난다.
그냥 "SVN 같은 거야!" 라고 했었으면 훨씬 빨리 이해했을 텐데 ... 😅

 

간단하게 설명하자면, 형상관리는 소스의 버전관리와 변경사항 추적하는 시스템이라고 보면 된다.
대표적인 형상관리툴은 Git, SVN 같은 도구가 있고, 많은 개발팀이 협업 시 사용하는 필수 툴이기도 하다.

나는 오히려 Git이나 SVN을 모르던 시절에 형상관리 솔루션을 먼저 다루는 현장에 투입돼서 그런 툴들을 나중에야 제대로 접해본 케이스다.
덕분에 ‘형상관리’의 개념을 조금 더 체계적으로 이해할 수 있었던 것 같다.

 

2. 주요 기능 

형상관리 툴마다 디테일한 기능은 다르겠지만, 대표적인 기능은 다음과 같다.

1. 버전 관리

  • 모든 파일과 디렉터리의 변경 이력을 기록한다.
  • 파일을 커밋 또는 체크인하여 파일 버전을 관리한다.

2. 충돌 관리 / 병합

  • 여러 사용자가 동일한 파일을 동시에 수정할 때 발생하는 충돌을 감지하고, 해결할 수 있도록 지원한다.
  • 하나의 파일의 작업내용을 병합할 수 있도록 도와준다.

3. 파일 잠금

  • 여러 사용자가 동시에 같은 파일을 편집하지 않도록 잠금을 설정하여 충돌을 방지할 수 있다.

4. 변경사항 추적

  • 파일 수정, 추가, 삭제, 이동 등의 모든 작업이 저장소에 기록되어 추적이 가능하다.
  • 누가 언제 무엇을 변경했는지 확인할 수 있다.

 

3. 사용하는 이유

사실 가장 중요한 것은 소스를 체계적으로 관리함으로써 안정성을 확보하고 품질을 향상시키는 것이 주된 목적이라고 생각한다. 그리고 최근에는 감사 목적으로 활용되는 경우도 많아지는 추세인 것 같다. 물론, 감사 목적에는 보통 배포현황까지 포함되겠지만.. 이 내용은 다음에 다루어 보겠다.

 

1. 소스 코드 변경 사항의 체계적 관리

  • 코드와 파일의 모든 변경 사항을 기록하고 관리하여 추적 가능성안정성을 확보합니다.
  • 변경 이력을 통해 이전 버전으로 쉽게 복원할 수 있어 문제 해결품질 보장에 유리합니다.

2. 협업 지원

  • 여러 개발자가 동시에 작업할 때 발생할 수 있는 충돌을 최소화하고, 팀 간 협업을 효율적으로 관리합니다.
  • 병렬 작업이 가능하도록 브랜치를 생성하고, 필요 시 병합하여 통합 작업을 원활하게 수행할 수 있습니다.

3. 안정성과 문제 방지

  • 코드 변경으로 인해 발생할 수 있는 오류를 방지하고, 기존 기능의 안정성을 유지합니다.
  • 테스트 및 배포 프로세스에서 문제를 사전에 감지하여 운영 환경의 안전성을 확보합니다.

4. 감사 목적으로 활용

  • 변경 기록을 통해 누가, 언제, 무엇을 변경했는지 파악할 수 있어, 감사 추적이 가능합니다.
  • 보안 및 규정 준수 측면에서도 중요한 역할을 하며, 프로젝트 투명성을 확보합니다.

 

4. 형상관리(SCM)과 CI/CD의 차이점

형상관리와 CI/CD가 비슷하다고 느낄 수 있지만, CI/CD는 형상관리가 포함된 더 넓은 프로세스라고 이해하면 된다.

CI/CD는 다음 포스팅에서 자세하게 다루겠다.

 

구분 형상관리(SCM) CI/CD
목적 코드 및 관련 자산의 변경과 버전을 관리 소프트웨어 빌드, 테스트, 배포 과정을 자동화하여 효율성 향상
사용 범위 코드, 문서, 설정 파일 등 다양한 자산의 변경 관리 코드 통합, 테스트, 배포 파이프라인 자동화
도구 Git, SVN 등 Jenkins, GitLab CI/CD, CircleCI 등
초점 변경 사항 추적 및 기록 지속적 통합과 배포를 통한 자동화된 릴리즈 프로세스