SCM이란?
SCM은 Software Configuration Management의 약자이다.
경영학에서 사용하는 Supply Chain Management(공급망 관리)도 약자가 같아서 혼동하기 쉽다. 그 SCM이랑 이 SCM은 다르다.
공급망관리; SCM(Supply Chain Management)이란?
1. 공급망이란 어떤 경제활동을 위해 형성된 공급자 => 수요자의 모든 망을 말한다.
(제품/서비스의 생산부터 소비를 경제활동이라고 하자)
2. 공급망(Supply Chain)에서 자원은 한정되어 있다.
3. 한정된 자원 하에서 어떻게 하면 가장 효율적인, 최대의 가치를 생산할 수 있을지를 논하는 것이 SCM이다.
참조해보면 좋을 글
형상관리와 버전관리?
형상(Configuration)관리는 버전관리를 포함하는 용어이다.
형상관리를 한다는 것은, 아래의 내용들을 포함하여 버전관리보다 더 큰 내용을 다룬다는 것이다.
- 소스코드에 대한 접근제어(누구에게 어떤 접근권한을 줄 것인지)
- 버전에 대한 관리(변경 기록, 롤백, 사용될 소스에 대한 관리 등)
- 빌드와 문서에 대한 관리(빌드 구조, 개발환경, 문서화 등)
흔히 이야기하는 Git이나 SVN, RCS는 형상관리보다 버전관리를 위한 것이다.
이것들은 등장하게 된 이유와, 세대를 거듭하며 진화한 역사가 있다.
제일 처음에 로컬 컴퓨터를 위한 버전관리 시스템이 등장했다.
파일을 복사해두고 이전 작업을 백업하는 것만으로는 부족하다.
어디가 어떻게 변경되었는지 변경기록도 남아야 한다는 것이다.
그래서 RCS(Revision Control System)이 등장했다.
RCS는 로컬에서 생성, 변경, 삭제한 내용들을 기록으로 남기고 보관한다.
그래서 혼자 개발할 때 쓸 수 있는 것이며, 여러 명이서 함께 개발할 때는 활용가치가 떨어진다.
공동 작업을 위해 다음 세대가 등장한다.
중앙 집중식 버전관리 시스템(centralized version control system)이 등장한 것이다.
이 시스템은 여럿이 같이 개발할 때 버전관리의 불편함을 해소하고자 등장한다.
중앙에 소스를 두고, 그 소스의 일부를 로컬에 가져오고 다시 중앙으로 보내는 식이다.
가져오고 보내고를 영어로 말하면, 가져올 때는 체크아웃, 다시 서버에 넣는 경우 체크인한다고 말한다.
(누가 체크아웃을 한 파일이 있으면 다른 사람은 그 파일에 손 댈 수(체크아웃)할 수 없다. 충돌나니까)
중요한 점은 모든 변경기록이 서버에 보관되어 있다는 것이다
그래서 이름도 중앙집중식(Centralized)이다.
서버에 변경기록과 소스를 관리하니 팀원간 소스를 공유하면서 동시에 변경기록도 관리가 가능해졌다.
다음 세대는 중앙 집중식이 아니라 분산형 버전관리 시스템이다.
중앙 집중식 버전관리 시스템도 이미 좋은 것 같은데 왜 다음 세대가 있을까?
변경기록은 매우 매우 중요한 기록이다.
이게 서버에만 있다. 갑자기 서버에 문제가 생기면?
아주아주 커다란 프로젝트를 진행하는 이들의 마음속에 우환이 생길 것이다.
살아있는 전설인 Linux Torvalds 또한 그런 우환을 가졌다.
그래서 직접 솔루션을 만들었다. (대단하다.)
중앙 서버에 집중된 변경기록을 잃을 수 있는 리스크를 해결하려면?
해결하려면 어떻게할까? 단순하게 생각하면..
서버를 백업하고, 변경기록이 추가될 때마다 백업한 서버에 반영하는 해결책을 생각할 수도 있다.
다른 괜찮은 방법이 하나 더 있다.
사용자의 시스템에 분산하는 것이다.
그래서 만든 게 Git이다.
참고로 Git은 상당히 젊다. 2005년 중순에 만든거다.
다만 아예 새로운 개념으로 만들어 진 건 아니다.
비트키퍼나 다른 오픈소스 분산형 버전관리 시스템들이 있었다.
그 솔루션들이 토르발스의 입맛에 맞지 않았던 것이다. (참고로 비트키퍼는 98년생이다.)
분산 버전관리시스템은 버전관리 기록을 여러 컴퓨터에 분산보관하겠다는 것이다.
소스와 편집기록이 저장된 서버가 있는 점은 중앙 집중형과 동일하지만 로컬에 소스와 기록까지 같이 Clone한다.
트래픽은 당연히 늘어나겠지만 어차피 소스코드는 대부분 텍스트 데이터이고, 2000년대로 올라가면서 네트워크도 같이 빨라졌다.