티스토리 뷰

IT 일반

형상 관리와 버전 관리

야라바 2015. 8. 11. 22:41


PM, PMO, 스프트웨어 공학(SE), 형상 관리, 버전관리, 테스트 케이스 작성과 테스트, 정적 코드 검사, Unit test...... 개발자들이 그리 탐탁치 않게 여기는 것들이 아닌가 싶습니다. 필요한 기능을 빨리 개발해 내면 되지 실질적으로는 별로 도움이 되지 않는것 같은 복잡한 절차를 왜 자꾸 만들지? 하는 의문이기도 합니다. 이러한 의문이 어떤 경우에는 설득력이 있는 경우도 있습니다. 절차라는 것이 진짜 형식일 뿐인 경우도 있으니 까요. 그런나 1인 개발 체제를 넘어서서 여러 사람이 함께하는 협업 개발 환경으로 전환되거나, 소프트웨어의 생존 기간이 길어지고 업데이트와 업그레이드 과정이 반복되다 보면, 위에서 그리 탐탁치 않게 여기던 것들이 "아, 이래서 필요한 것이었구나!"하는 공감을 하게 되곤 합니다. 그중에 대표적인 것이 형상 관리, 버전 관리 입니다.

소프트웨어 형상 관리(SCM : Software Configuration Management)는 Configuration을 Change and Configuration 이라 할 정도로 소프트웨어의 "변화"에 초점을 두고 있습니다. 몰론 SCM이 등장하게 된 배경에는 소프트웨어 품질 관리와 생산성 향상이라는 목적이 있습니다. 어떠한 소프트웨어도 개발 이후에 "변화"를 만나지 않는 것은 없습니다. 많은 사람이 사용하는 소프트웨어(SW, Software), 다양한 운영체제(OS, Operating System)에서 사용할 수 있는 SW, 오랜 기간 꾸준하게 사용되는 살아있는 SW 일수록 "변화"는 숙명과도 같은 것입니다. 이런 "변화"를 체계적으로 준비해서 관리하려는 것이 바로 SCM입니다. 개발자들이 SCM에 대하여 긍정적 시각을 갖지 못하는 배경에는 많은 경우 ISO, SPICE, CMMI와 같은 인증에 떠밀려서 실제로 실무에는 현실화되지 않은 것까지 형식적으로 자료를 제출하는 경험 때문이 아닌가 싶기도 합니다. 경영자는 어떻게 해서든 인증을 받아 제품과 기업의 활로를 찾아보려하고 개발자는 형식적인 틀에 떠밀리고 싶지 않고......이 간격이 좁히려는 노력이 있는 소프트웨어 개발 조직이 좋은 품질의 SW를 만들어 낼것임에는 틀림없습니다. 

형상 관리의 대상은 소스 코드와 다양한 프로그램 자원 뿐만아니라 SW 생애 주기(Life Cycle)에 걸친 모든 정보를 포함합니다. 가장 기본이 되는 스펙(Spcification)과 설계(Design) 자료를 비롯하여 테스트 케이스(Test case), 제품 빌드 시스템, 제품 출시후의 사용자 피드백과 버그 트래킹 정보에 이르기 까지 변화하는 모든 정보를 포함합니다. 소프트웨어 형상 관리의 한 요소가 바로 버전 관리 시스템입니다.

다양한 문서와 소스코드, 이미지등의 프로그램 자원(Resource), 트래킹 정보에 이르기 까지 모든 변화 과정을 기록 관리하여 누가 언제 무엇을 수정했는지 추적할 수 있도록 해줍니다. 여러 사용자가 원활하게 협업할 수 있는 것 또한 버전 관리 시스템 도입으로 누릴 수 있는 효과입니다. 버전 관리(Version control) 시스템은 리비전 관리(Revision control), 소스 관리(Source control)로도 불립니다. 문서 및 코드의 변화는 각각 리비전이라는 숫자에 의해 인식할 수 있으며 최초의 관리 대상은 리비전 1로 변화의 단위마다 리버전은 1씩 증가하게 됩니다. 이 리비전을 기준으로 특정 리비전으로 돌아가거나 일부를 합치는 등의 작업을 할 수 있습니다.

형상 관리 시스템과 버전 관리 시스템을 혼동하거나 비슷하게 여기는 가장 큰 이유는 버전 관리 시스템을 지원하는 도구 때문이지 않나 싶습니다. 대표적인 버전 관리 시스템으로는 오픈 소스인 CVS(Concurrent Version System)와 Subversion, 마이크로소프트의 VSS(Visual Source Safe), IBM의 Rational Clearcase 등이 있고 최근에는 Git가 많이 사용되고 있습니다. 이전에는 하나의 저장소(리포지토리, Repository)를 두는 중앙 집중식의 버전 관리 시스템을 주로 사용했으나 깃(Git), Mercurial의 경우에는 분산형 버전 관리 시스템으로 중앙 집중식 도구의 단점을 해소한 특성이 있습니다.

버전 관리 기능은 앞서 언급한 전문적인 버전 관리 시스템 뿐만아니라 워드와 같은 오피스 프로그램이나 위키와 같은 협업 문서 작성 시스템에서도 채용하고 있습니다. 아래의 그림은 위키 시스템에서 제공하는 리비전 체계를 기반으로 리비전간 위키 문서의 차이를 비교한 모습입니다.



아래의 그림은 전문적인 버전 관리 시스템인 서브버전(Subversion)을 채용한 네이버 개발자센터의 큐브리드 프로젝트의 내용입니다. 각 디렉토리의 최종 리비전과 수정일, 개발자, 리비전 번호를 확인할 수 있습니다.





댓글
댓글쓰기 폼