회사에서 1주일에 한번 스터디해서 발표하는 것을 한다해서 나는 형상관리에 관한 내용을 준비하였다.

형상관리란?
- 형상관리 또는 소프트웨어 구성 관리(SCM: Software Configuration Management)는 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것
- 일반적인 단순 버전관리 기반의 소프웨어 운용을 좀 더 포괄적인 학술분야의 형태로 넓히는 근간
- 소프트웨어 소스코드, 개발환경, 빌드구조 등 전반적인 환경, 내역에 대한 관리 체계를 정의
- 소프트웨어의 BOM(Bill of Materials)을 운용하는 체제
↓
- 형상관리는 포괄적인 개념
- 통상적으로는 버전, 소스 관리 등으로 생각합니다
- 정보를 여러 버전으로 관리하는 것
형상관리의 목적
- 소프트웨어 시스템의 변경 통제
- 협업 및 조정 지원
- 버전 제어 제공
- 복제 및 배포 용이
형상관리의 장점
- sw 변경관리에 필요한 시간과 노력을 줄임으로써 생산성과 효율성 향상
- 모든 변경사항을 적절히 테스트하고 검증하여 오류 및 결함의 위험을 줄임
- sw 산출물에 대한 중앙 저장소를 제공하여 팀원간 협업 및 커뮤니케이션 강화
- 모든 변경사항을 제어 관리하여 sw 품질 및 안정성을 개선
형상관리의 단점
- 복잡성과 오버헤드 증가
- 종속성 관리 어려움
- 대규모 개발팀에서는 충돌과 지연의 가능성이 있다
버전관리 사용이유
- 각 파일 또는 프로젝트를 통째로 이전 상태로 되돌릴 수 있다.
- 시간에 따라 수정 내용을 비교할 수 있다.
- 누가 문제를 일으켰는지 추적이 가능 하다.
- 누가 언제 만들어낸 이슈인지 확인 가능하다.
버전관리의 종류
버전관리 시스템의 종류로는 로컬 버전 관리 시스템(local VCS), 중앙 집중식 버전 관리 시스템(CVCS), 분산 버전 관리 시스템(DVCS)가 있다.
로컬 버전 관리 시스템(Local Version Control System)
간단한 데이터베이스를 이용해서 파일의 이력(변경정보)를 관리하는 시스템, 대표적으로 RCS(Revision Control System)이다. RCS는 파일의 변경되는 부분만 기억하여 용량문제를 해결했다.
문제점
로컬 버전 관리 시스템은 로컬에서만 동작하기에 다른 개발자들과 협업하기가 쉽지 않다.
중앙 집중식 버전관리 시스템(Centralized Version Control System)
변경이력 등을 로컬이 아닌 서버에 저장하여 관리하고 각 클라이언트들이 특정 버적을 받아서 사용한다. 모든 클라이언트가 하나의 DB을 향함으로 동기화 문제가 없고 관리가 용이하다.
문제점
중앙 서버의 문제가 생기면 문제가 발생
분산 버전 관리 시스템(Distributed Version Control System)
중앙 집중식 버전관리의 문제는 서버가 모든 정보를 가지고 있기에 발생하는 문제이다. 분산버전 관리 시스템은 각 클라이언트들이 파일만을 받는 것이 아닌 변경 이력 등 서버의 백업본을 받는 방식이다. 서버가 문제가 생겨도 복구가 가능하고 협업이 편하다. 대표적으로 git이 있다.
문제점
관리가 복잡하고 동기화 문제가 있다.
git이란?
git은 2005년도에 리눅스를 개발한 리누스 토발즈가 개발한 분산 버전 관리 시스템이다. 컴퓨터 파일의 변경사항을 추적하고 여러명의 사용자들 간에 파일에 대한 작업을 조율하는 데 사용한다.
Github와 Bitbucket의 차이점
Github
- 오픈 소스 위주(비공개도 가능은 함)
- 오픈 소스 프로젝트에 적함
Bitbucket
- 비공개 리포지토리 지향
- 회사의 프로젝트 호스팅에 많이 사용
- atlassian 생태계에서 사용이 유용함