2019.04.29

SW 변경 주체, 대상, 시점을 추적한다··· ‘버전 관리’ 솔루션 가이드

Bob Violino | InfoWorld
‘버전 관리’의 반대말은 어쩌면 ‘혼란’이다. 개발팀이 다양한 작업 버전을 관리하지 않으면 걷잡을 수 없는 상황이 이내 펼쳐질지 모른다.

소프트웨어 구성 관리 솔루션의 한 요소인 버전 관리 소프트웨어는, 조직이 문서, 프로그램, 웹사이트, 기타 개발 계획의 변경사항을 관리하는데 도움을 준다. 오늘날 개발 프로젝트의 경우 동시에 같은 파일을 작업하는 팀들에 다수 존재하곤 하며, 만약 버전 관리가 제대로 이뤄지지 않는다면 심각한 문제가 발생할 수 있다.
 
ⓒ NESA by Makers . Credit URL: https://unsplash.com/photos/IgUR1iX0mqM


버전 관리의 정의
소프트웨어를 개선하기 위해서는 개발자가 문제가 있는 버전을 파악할 수 있도록 다양한 버전의 소프트웨어를 검색하고 실행할 수 있는 능력이 필요하다. 또 버전 관리는 변경 관리로도 볼 수 있다. ‘버전 관리’란 조직이 소스 코드의 변경사항을 관리하고 이런 변경사항의 이력을 관리하는 방법이라고 가트너의 토마스 머피 컨설턴트가 말했다.

여기에는 2가지 접근 방식이 있다. 하나는 1명이 문서를 작성할 때 다른 사람이 동시에 변경하지 못하도록 하는 것이다. 다른 방법은 여러 사용자가 동시에 변경할 수 있도록 허용하는 것이다. 

머피는 "구글 독스에서 2명의 작성자가 같은 문서를 작성하는 것으로 생각하면 된다"라고 설명하며, 오늘날의 버전 관리 소프트웨어는 대개 변경사항과 순서를 추적해 두 사례를 모두 지원할 수 있다고 전했다.

또한 버전 관리 소프트웨어를 이용할 경우 개발자는 변경사항이 효과가 없을 때 기존 코드를 잃을 수 있다는 두려움 없이 코드를 변경하고 시험할 수 있다고 포레스터 리서치의 수석 분석가 제프리 해먼드가 말했다.

그는 "워드 문서나 파워포인트 프레젠테이션이 있고 여러 사용자의 편집을 해결하거나 일부 내용을 삭제해야 하지만 영구적으로 삭제될까 두려웠던 적이 있다면 버전 관리의 필요성을 이해할 것이다"라고 말했다. 

한편 소프트웨어 개발이 증가하면서 버전 관리 소프트웨어에 대한 수요도 증가해왔다. 하지만 지금까지 개발 시장을 넘어 확대되지 않았으며 로우 코드/노 코드 영역도 마찬가지다.

버전 관리 플랫폼 옵션
포레스터의 시장 분석에 따르면 대부분의 개발팀은 일종의 버전 관리 도구를 사용하고 있다. 2018년에 공개된 최근의 FBTDS(Forrester Business Technographics Developer Survey)에서 포레스터는 기업 조직에서 근무하는 개발자와 개발 관리자 중 90% 이상이 소스 코드 관리 시스템을 사용하고 있음을 발견했다.

개발팀은 여러 프로그램 버전의 여러 사본을 보존한 후 적절한 라벨을 적용하는 원시적인 접근방식을 취할 수 있지만 유사한 프로그램 사본이 많은 경우 효율적이지 못하고 오류로 이어질 수 있다. 이 때문에 버전 관리 소프트웨어가 필요한 것이다.

그렇다면 조직이 어떻게 필요에 적합한 플랫폼을 선택할 수 있을까?

우선은 플랫폼들 사이의 미묘한 차이를 알 필요가 있다. 기본적으로 오늘날 거의 모든 버전 관리 플랫폼의 핵심은 소프트웨어 개발 중 소스 코드의 변경사항을 추적하는 오픈소스 분산형 버전 관리 시스템인 기트(Git)이다. 프로그래머들 사이에서 작업을 조율하기 위해 개발된 이 시스템은, 여러 파일의 변경사항을 추적하는데 사용할 수 있다.

머피는 "이제 기트를 기반으로 구축하지 않는 경우는 특수 시장을 위해 개발된 소수에 불과하다. 기트 이전에도 해당 시장은 오픈소스로 전향했으며, 이로 인해 상업 시장이 급격히 붕괴됐다”라고 말했다.

주요 제공물이 모두 동일한 기트 엔진에 기초하여 개발되기 때문에 구매자는 미묘한 차이를 보고 가장 적합한 것을 선택해야 한다. 머피는 "차이가 거의 없는 경우에는 콜렉션, 개인적인 선호도, 각 측면에서의 패키지화 방식이 더 중요해진다"라고 말했다.

오늘날 선택지들 중에서믄 먼저 마이크로소프트의 기트허브(GitHub)가 있다. 머피는 현재 가장 큰 오픈소스 저장소를 제공하고 소프트웨어 프로젝트/커뮤니티 관리하는 툴이 있으며 추가 기능으로 지원하는 광범위한 파트너를 보유한 플랫폼이라고 설명했다.

또한 마이크로소프트는 기업 시장용 기트허브 엔터프라이즈와 팀 파운데이션의 계보를 잇는 애저 데브옵스도 제공하고 있다. 애저 데브옵스는 더욱 통합된 애플리케이션 개발 라이프 사이클을 원하는 조직을 위한 툴 콜렉션이다. 기트허브와 기능은 유사하지만 여기에 애자일 계획과 시험 관리를 결합했다.

기트랩(GitLab)은 또 다른 오픈소스 솔루션으로 팀들이 코드를 자동으로 시험하고 제공할 수 있는 통합된 프로젝트 및 연속 통합 기능 등을 제공한다. 프로젝트의 모든 측면에 접근하고 코드를 확인할 수 있다.

아틀라시안 비트버킷은 다른 아틀라시안 툴 사용자들이 배치하는 경우가 많다. 다른 버전 관리 제품과 마찬가지로 핵심 소스 저장소가 워크플로와 결합되는 방식 및 변경사항을 개발 및 시험하는 시스템에 가치와 차별점이 있다고 머피는 말했다.

IBM은 개발자에게 애자일 애플리케이션 라이프사이클 관리를 위한 기능을 제공하는 재즈(Jazz)와 이클릭스(Eclipse)에 기초한 다중 플랫폼 팀 협업 툴인 RTC(Rational Team Concert)를 제공하고 있다. RTC의 특징으로는 통합된 계획, 과업 추적, 팀 및 프로세스 인식, 프로젝트 건전성 추적, 여러 플랫폼들 사이의 일관된 인터페이스 등이 있다. 

또한 오래되었지만 모든 작업과 일련의 파일의 변경사항을 추적하고 여러 개발자들이 협업할 수 있는 무료 시스템인 CVS(Concurrent Versions System)도 사용할 수 있다. CVS는 같은 파일의 여러 버전을 효율적으로 보관하기 위해 델타 압축을 사용하며, 이는 버전마다 차이점이 거의 없는 대형 텍스트 파일(소스 코드 파일 등)에 적합하다.

버전 관리 소프트웨어의 핵심 기능
기업이 선택의 폭을 좁히려면 우선 비용 구조, 소프트웨어 사용 계획, 사용자에 대한 소프트웨어 배포 계획을 고려해야 한다. 일반적인 추가 고려사항은 다음과 같다.

- 버전 관리 소프트웨어를 로컬 서버, 기업 소유 데이터 센터, 클라우드 등을 통해 배치할 수 있는가? 대부분의 애플리케이션이 클라우드로 이전되고 있지만 모든 조직이 모든 것을 클라우드화하려는 것은 아니다.

- 소프트웨어의 브랜칭 및 병합 지원이 적절한가? 개발자는 신속하게 코드 브랜치를 생성하고 변경하며 시험한 후 다시 메인 소스 트리에 병합하고 싶을 수도 있다.

- 병합 충돌을 어떻게 해결하는가? 개발자가 일련의 코드 파일을 변경하고 그 중 일부가 다른 개발자의 변경사항과 충돌하는 경우 첫 번째 개발자는 변경사항을 비교하여 충돌 문제를 해결하고 싶을 것이라고 포레스터의 해먼드가 말했다. 이를 위해 첫 번째 개발자가 여러 버전의 코드를 한 줄씩 검토하여 수락해야 할 것을 확인해야 한다.

- 저장소 오픈라인 사용 또는 복제가 지원되는가? 개발자가 항상 기업의 네트워크나 인터넷에 연결되어 있다는 보장이 없다고 해먼드가 말했다. 누군가 기차나 비행기를 타고 이동하다가 오프라인 상태로 작업하기 위해 코드의 사본이 필요할 때가 있다. 그 사람은 방향을 바꾸기 위해 저장소를 복제하여 완전히 새로운 프로젝트 사본을 생성하고 싶을 수도 있다.

- 또 다른 기능은 변화 검토 워크플로이다. 대규모 프로젝트에서 아키텍트나 프로젝트 관리자는 개발자가 요청한 변경사항을 검토해야 할 수도 있다. 특히 대형 프로젝트에서는 매일 많은 변경사항이 적용되고 있기 때문에 이 워크플로를 가능한 원활하게 하는 것이 중요하다고 해먼드가 말했다.

- 그리고 많은 수의 개발 작업을 위해 필요한 통합 기능이 있다. 여기에는 문제 추적 시스템 및 시험 자동화 툴 등 다른 개발 및 데브옵스 툴과의 통합이 포함된다.

그 어떤 개발 툴도 고립되어서는 안 된다고 머피가 말했다. 다른 개발 작업과 연계되거나 통합되어야 하며, 개발자 커뮤니티의 지원이 필요하다. "이 시장에서 사용할 툴에 대한 주된 결정은 툴을 사용하는 사람이 내린다"라고 그는 말했다.

- 마지막으로 IT 및 개발 작업의 다른 측면과 마찬가지로 보안을 나중에 생각해서는 안 된다. 어떤 종류의 액세스 관리가 마련되어 있는가? 소스 코드와 해당 코드에 대해 수행되는 작업에 누가 액세스할 수 있는가? 보안 기능에는 데이터 암호화, 이중 인증, 비밀번호 보호 등이 포함되어 있을 수 있다.

현대 소프트웨어 개발과 이를 수행하는 팀의 복잡성을 고려할 때 적절한 버전 관리 소프트웨어 유형이 제공할 수 있는 이점이 쉽게 드러난다. 시간을 들여 적절한 제품을 선택하면 개발팀에 만연한 문제 중 적어도 일부가 현격히 감소될 것이다. 

* Bob Violino는 컴퓨터월드, CIO, CSO, 인포월드, 네트워크 월드에 기고하는 전문 저술가다.  ciokr@idg.co.kr



2019.04.29

SW 변경 주체, 대상, 시점을 추적한다··· ‘버전 관리’ 솔루션 가이드

Bob Violino | InfoWorld
‘버전 관리’의 반대말은 어쩌면 ‘혼란’이다. 개발팀이 다양한 작업 버전을 관리하지 않으면 걷잡을 수 없는 상황이 이내 펼쳐질지 모른다.

소프트웨어 구성 관리 솔루션의 한 요소인 버전 관리 소프트웨어는, 조직이 문서, 프로그램, 웹사이트, 기타 개발 계획의 변경사항을 관리하는데 도움을 준다. 오늘날 개발 프로젝트의 경우 동시에 같은 파일을 작업하는 팀들에 다수 존재하곤 하며, 만약 버전 관리가 제대로 이뤄지지 않는다면 심각한 문제가 발생할 수 있다.
 
ⓒ NESA by Makers . Credit URL: https://unsplash.com/photos/IgUR1iX0mqM


버전 관리의 정의
소프트웨어를 개선하기 위해서는 개발자가 문제가 있는 버전을 파악할 수 있도록 다양한 버전의 소프트웨어를 검색하고 실행할 수 있는 능력이 필요하다. 또 버전 관리는 변경 관리로도 볼 수 있다. ‘버전 관리’란 조직이 소스 코드의 변경사항을 관리하고 이런 변경사항의 이력을 관리하는 방법이라고 가트너의 토마스 머피 컨설턴트가 말했다.

여기에는 2가지 접근 방식이 있다. 하나는 1명이 문서를 작성할 때 다른 사람이 동시에 변경하지 못하도록 하는 것이다. 다른 방법은 여러 사용자가 동시에 변경할 수 있도록 허용하는 것이다. 

머피는 "구글 독스에서 2명의 작성자가 같은 문서를 작성하는 것으로 생각하면 된다"라고 설명하며, 오늘날의 버전 관리 소프트웨어는 대개 변경사항과 순서를 추적해 두 사례를 모두 지원할 수 있다고 전했다.

또한 버전 관리 소프트웨어를 이용할 경우 개발자는 변경사항이 효과가 없을 때 기존 코드를 잃을 수 있다는 두려움 없이 코드를 변경하고 시험할 수 있다고 포레스터 리서치의 수석 분석가 제프리 해먼드가 말했다.

그는 "워드 문서나 파워포인트 프레젠테이션이 있고 여러 사용자의 편집을 해결하거나 일부 내용을 삭제해야 하지만 영구적으로 삭제될까 두려웠던 적이 있다면 버전 관리의 필요성을 이해할 것이다"라고 말했다. 

한편 소프트웨어 개발이 증가하면서 버전 관리 소프트웨어에 대한 수요도 증가해왔다. 하지만 지금까지 개발 시장을 넘어 확대되지 않았으며 로우 코드/노 코드 영역도 마찬가지다.

버전 관리 플랫폼 옵션
포레스터의 시장 분석에 따르면 대부분의 개발팀은 일종의 버전 관리 도구를 사용하고 있다. 2018년에 공개된 최근의 FBTDS(Forrester Business Technographics Developer Survey)에서 포레스터는 기업 조직에서 근무하는 개발자와 개발 관리자 중 90% 이상이 소스 코드 관리 시스템을 사용하고 있음을 발견했다.

개발팀은 여러 프로그램 버전의 여러 사본을 보존한 후 적절한 라벨을 적용하는 원시적인 접근방식을 취할 수 있지만 유사한 프로그램 사본이 많은 경우 효율적이지 못하고 오류로 이어질 수 있다. 이 때문에 버전 관리 소프트웨어가 필요한 것이다.

그렇다면 조직이 어떻게 필요에 적합한 플랫폼을 선택할 수 있을까?

우선은 플랫폼들 사이의 미묘한 차이를 알 필요가 있다. 기본적으로 오늘날 거의 모든 버전 관리 플랫폼의 핵심은 소프트웨어 개발 중 소스 코드의 변경사항을 추적하는 오픈소스 분산형 버전 관리 시스템인 기트(Git)이다. 프로그래머들 사이에서 작업을 조율하기 위해 개발된 이 시스템은, 여러 파일의 변경사항을 추적하는데 사용할 수 있다.

머피는 "이제 기트를 기반으로 구축하지 않는 경우는 특수 시장을 위해 개발된 소수에 불과하다. 기트 이전에도 해당 시장은 오픈소스로 전향했으며, 이로 인해 상업 시장이 급격히 붕괴됐다”라고 말했다.

주요 제공물이 모두 동일한 기트 엔진에 기초하여 개발되기 때문에 구매자는 미묘한 차이를 보고 가장 적합한 것을 선택해야 한다. 머피는 "차이가 거의 없는 경우에는 콜렉션, 개인적인 선호도, 각 측면에서의 패키지화 방식이 더 중요해진다"라고 말했다.

오늘날 선택지들 중에서믄 먼저 마이크로소프트의 기트허브(GitHub)가 있다. 머피는 현재 가장 큰 오픈소스 저장소를 제공하고 소프트웨어 프로젝트/커뮤니티 관리하는 툴이 있으며 추가 기능으로 지원하는 광범위한 파트너를 보유한 플랫폼이라고 설명했다.

또한 마이크로소프트는 기업 시장용 기트허브 엔터프라이즈와 팀 파운데이션의 계보를 잇는 애저 데브옵스도 제공하고 있다. 애저 데브옵스는 더욱 통합된 애플리케이션 개발 라이프 사이클을 원하는 조직을 위한 툴 콜렉션이다. 기트허브와 기능은 유사하지만 여기에 애자일 계획과 시험 관리를 결합했다.

기트랩(GitLab)은 또 다른 오픈소스 솔루션으로 팀들이 코드를 자동으로 시험하고 제공할 수 있는 통합된 프로젝트 및 연속 통합 기능 등을 제공한다. 프로젝트의 모든 측면에 접근하고 코드를 확인할 수 있다.

아틀라시안 비트버킷은 다른 아틀라시안 툴 사용자들이 배치하는 경우가 많다. 다른 버전 관리 제품과 마찬가지로 핵심 소스 저장소가 워크플로와 결합되는 방식 및 변경사항을 개발 및 시험하는 시스템에 가치와 차별점이 있다고 머피는 말했다.

IBM은 개발자에게 애자일 애플리케이션 라이프사이클 관리를 위한 기능을 제공하는 재즈(Jazz)와 이클릭스(Eclipse)에 기초한 다중 플랫폼 팀 협업 툴인 RTC(Rational Team Concert)를 제공하고 있다. RTC의 특징으로는 통합된 계획, 과업 추적, 팀 및 프로세스 인식, 프로젝트 건전성 추적, 여러 플랫폼들 사이의 일관된 인터페이스 등이 있다. 

또한 오래되었지만 모든 작업과 일련의 파일의 변경사항을 추적하고 여러 개발자들이 협업할 수 있는 무료 시스템인 CVS(Concurrent Versions System)도 사용할 수 있다. CVS는 같은 파일의 여러 버전을 효율적으로 보관하기 위해 델타 압축을 사용하며, 이는 버전마다 차이점이 거의 없는 대형 텍스트 파일(소스 코드 파일 등)에 적합하다.

버전 관리 소프트웨어의 핵심 기능
기업이 선택의 폭을 좁히려면 우선 비용 구조, 소프트웨어 사용 계획, 사용자에 대한 소프트웨어 배포 계획을 고려해야 한다. 일반적인 추가 고려사항은 다음과 같다.

- 버전 관리 소프트웨어를 로컬 서버, 기업 소유 데이터 센터, 클라우드 등을 통해 배치할 수 있는가? 대부분의 애플리케이션이 클라우드로 이전되고 있지만 모든 조직이 모든 것을 클라우드화하려는 것은 아니다.

- 소프트웨어의 브랜칭 및 병합 지원이 적절한가? 개발자는 신속하게 코드 브랜치를 생성하고 변경하며 시험한 후 다시 메인 소스 트리에 병합하고 싶을 수도 있다.

- 병합 충돌을 어떻게 해결하는가? 개발자가 일련의 코드 파일을 변경하고 그 중 일부가 다른 개발자의 변경사항과 충돌하는 경우 첫 번째 개발자는 변경사항을 비교하여 충돌 문제를 해결하고 싶을 것이라고 포레스터의 해먼드가 말했다. 이를 위해 첫 번째 개발자가 여러 버전의 코드를 한 줄씩 검토하여 수락해야 할 것을 확인해야 한다.

- 저장소 오픈라인 사용 또는 복제가 지원되는가? 개발자가 항상 기업의 네트워크나 인터넷에 연결되어 있다는 보장이 없다고 해먼드가 말했다. 누군가 기차나 비행기를 타고 이동하다가 오프라인 상태로 작업하기 위해 코드의 사본이 필요할 때가 있다. 그 사람은 방향을 바꾸기 위해 저장소를 복제하여 완전히 새로운 프로젝트 사본을 생성하고 싶을 수도 있다.

- 또 다른 기능은 변화 검토 워크플로이다. 대규모 프로젝트에서 아키텍트나 프로젝트 관리자는 개발자가 요청한 변경사항을 검토해야 할 수도 있다. 특히 대형 프로젝트에서는 매일 많은 변경사항이 적용되고 있기 때문에 이 워크플로를 가능한 원활하게 하는 것이 중요하다고 해먼드가 말했다.

- 그리고 많은 수의 개발 작업을 위해 필요한 통합 기능이 있다. 여기에는 문제 추적 시스템 및 시험 자동화 툴 등 다른 개발 및 데브옵스 툴과의 통합이 포함된다.

그 어떤 개발 툴도 고립되어서는 안 된다고 머피가 말했다. 다른 개발 작업과 연계되거나 통합되어야 하며, 개발자 커뮤니티의 지원이 필요하다. "이 시장에서 사용할 툴에 대한 주된 결정은 툴을 사용하는 사람이 내린다"라고 그는 말했다.

- 마지막으로 IT 및 개발 작업의 다른 측면과 마찬가지로 보안을 나중에 생각해서는 안 된다. 어떤 종류의 액세스 관리가 마련되어 있는가? 소스 코드와 해당 코드에 대해 수행되는 작업에 누가 액세스할 수 있는가? 보안 기능에는 데이터 암호화, 이중 인증, 비밀번호 보호 등이 포함되어 있을 수 있다.

현대 소프트웨어 개발과 이를 수행하는 팀의 복잡성을 고려할 때 적절한 버전 관리 소프트웨어 유형이 제공할 수 있는 이점이 쉽게 드러난다. 시간을 들여 적절한 제품을 선택하면 개발팀에 만연한 문제 중 적어도 일부가 현격히 감소될 것이다. 

* Bob Violino는 컴퓨터월드, CIO, CSO, 인포월드, 네트워크 월드에 기고하는 전문 저술가다.  ciokr@idg.co.kr

X