IT업계, 오픈소스 프로젝트 버전 관리 시스템 두고 ‘이견’ 지속
“DVCS, 중앙집중에서 자유로워” vs “CVCS, 일탈 ‘포킹’ 제어”

사진은 '2021 국제인공지능대전'에 출품한 업체의 제품으로 본문 기사와는 직접 관련없음.
사진은 '2021 국제인공지능대전'에 출품한 업체의 제품으로 본문 기사와는 직접 관련없음.

 

[애플경제 김홍기 기자] “이전에는 서브버전이 최고인줄만 알고 있다가 최근엔 분산버전관리인 DVCS(Distributed Version Control System)를 익히기 시작했습니다. 사용해보니 중앙저장방식(CVCS. Central Version Control System)보다 훨씬 편하더군요”

오픈소스를 이용해 협업하고 공유하며 프로그램을 개발할 수 있는 버전 관리 시스템에서 중앙서버와 네트워크를 둔 CVCS냐, 아니면 개발자나 참여자들에게 분산된 DVCS냐를 둔 논쟁이 새삼 벌어지고 있다. 한 동안은 DVCS의 장점이 주로 부각되어왔다. 앞서 판교의 한 프로그램 개발업체에 근무하는 Y씨처럼 “깃 허브(Git hub)로 네트워크 없이도 버전 관리 시스템을 사용할 수 있고, 중앙서버를 왔다갔다 하며 파일을 운반할 필요도 없어 좋다”며 DVCS를 높이 평가하는 목소리가 많았다.

그러나 최근엔 CVCS 나름의 ‘고유의 장점’을 강조하며, 그 필요성을 부각시키거나 아예 양자를 병행해야 한다는 주장도 속출하고 있다. 이런 주장을 펴는 전문가들은 특히 “적대적 포킹(forking)은 기업 세계에선 마치 적대적 인수와 맞먹는 오픈 소스인데, 이를 적절히 제어할 수 있는게 CVCS”라는 주장도 나오고 있다. 즉 CVCS는 오픈 소스에 기반해 클론(복제)과 변경을 수없이 하며 생성된 파일을 ‘가지 치기’하며, 애초 공유된 프로그램 소스의 취지와는 어긋난 일탈 행위가 벌어지는 것을 통제한다는 것이다.

애초 DVCS은 중앙 집중 방식의 문제를 해결한다는 취지에서 각광을 받고 있다. 한국정보통신기술협회 IT용어사전에 따르면 CVCS는 공동 버전 시스템(CVS)이나, 서브버전, 퍼포스(Perforce) 등과 같은 중앙서버를 통해 모든 파일의 버전을 저장, 관리하고 오픈 소스를 공유한 다수의 참여자들이 중앙 서버에서 파일을 가져와서 사용하는 방식이다. 바로 이 점이 DVCS의 장점이라는 얘기다.

즉 CVCS는 중앙서버에 장애가 발생하면 파일을 꺼내오거나 사용할 수 없고, 망가진 데이터를 복구할 수도 없다. 그러나 DVCS에서는 참여자들이 아예 파일 저장소를 통째로 복제하여 자신만의 서버처럼 사용한다. 설령 중앙 서버에 문제가 발생해도 클라이언트는 복제된 저장소를 다시 서버에 복사하여 그 안에서 데이터를 복원할 수 있다. 이에 필요한 웹 호스팅 서비스인 깃허브는 오픈소스 공유와 개발 관리 시스템인 깃(Git)을 비롯해 프로젝트 관리를 위한 버그 추적이나 작업 관리 등 다양한 기능까지 제공해서 호응을 얻고 있다.

그럼에도 불구하고 최근엔 CVCS 나름의 명분과 장점에 주목하는 움직임이 일고 있다. 한 개발업체 관계자는 “사실 그런 (CVCS의 장점을 강조하는) 움직임은 그 동안 오픈소스 프로젝트 참여자들이 애당초 오픈소스를 개발하게 된 취지를 망각하는 행동을 하면서 발생한 것”이라고 풀이했다. 실제로 참여자들 가운데는 실행 중인 프로세스의 복사본(클론)을 과다하게 반복하며, 때론 애초 오픈 소스 프로젝트와는 엇나간 ‘변경’을 일삼는 경우도 많다. 이처럼 다른 목적의 클론과 변경을 일삼는 것을 일컬어 ‘포크’ 내지 ‘포킹’이라는 경멸섞인 명칭을 붙이기도 했다.

기존의 CVCS에선 포킹을 막기 위해서 아예 표준 코드베이스를 중앙 서버에 저장하고 있다. 그래서 개발자들이 코드의 현재 상태를 ‘체크(인)’한 후 변경하도록 제한하고 있다. 예를 들어 어떤 문제를 해결하기 위해 프로세스를 업데이트하고자 하면, 다른 사용자가 주 리포지토리(저장소)에 ‘체크 인’했는지, 했으면 어떤 변경을 시도했는지를 확인하게 한다. 필요할 경우 자신의 프로세스와 병합하고, 프로젝트의 다른 모든 사용자가 변경 내용을 가져올 수 있도록 자신의 변경 사항도 오픈소스 취지에 맞는지를 체크인해야 한다.

실제로 많은 오픈 소스 프로젝트는 DVCS를 사용하는 경우에도 그것의 ‘분산 처리를 통해 획득하려는’ 작동 방식과 유사한 방식으로 중앙의 표준 서버 저장소를 효과적으로 유지 관리하고 있다. CVCS를 사실상 병행한다는 의미다. 실제로 특정 프로젝트에선 중앙 집중화된 시스템이 더 나을 수 있다는 평가가 나오는 것도 그 때문이다. 물론 “중앙 집중식 프로젝트 관리 모델을 사용하는 경우에도 오픈 소스 프로젝트는 역시 DVCS를 사용하는 것이 좋다.”는 주장이 우세하지만, 역시 이견에 부딪히기는 마찬가지다.

또한 정서적 문제도 작용한다. 개발자와 사용자 모두 소프트웨어에 대한 자신들의 개인적 취향과 의도를 그 바탕에 깔고 있다. 그러나 유력한 오픈 소스 프로젝트일수록 그런 정서가 팽배하다. 그럼에도 이런 ‘이너 서클’ 밖에 있는 커뮤니티 참여 개발자와 사용자들에 의한 ‘포킹’에 대해선 적개심에 가까운 태도를 보이고 있다. 결과적으로 이는 오픈 소스 프로젝트 자체의 정당성과 효율성을 훼손한다는게 CVCS 옹호론자들의 주장이다.

그럼에도 불구하고 DVCS의 장점은 꾸준히 부각되고 있다. 무엇보다 “중앙 서버가 작동 상태가 아닐 때 정말 짜증난다”는 불만이 이를 대변한다. 즉 개발자나 프로그래머들의 커뮤니티 사이트엔 “중앙 서버가 고장이라도 나면 코드를 체크인하는 참여자들로선 화가 나고 불편할 수 밖에 없다”는 목소리가 많다. 또 “이미 리눅스 커널이나, 안드로이드, 제이커리(jQuery), 루비온레일스 같은 여러 오픈소스 프로젝트의 버전 관리 시스템으로 채택되고 있는 마당에 뭔 소리냐?”고 반박하는 사람들도 많다.

DVCS는 사실 그 편의성과 기능성으로 날로 각광을 받고 있다. 이미 사내 개발 워크플로어를 DVCS로 전환했다는 구로 디지털 단지의 한 SW업체 관계자는 “모든 개발자의 코드베이스 복사본이 자체 버전 제어 저장소에 있어 개발자 단독으로 작업하고, 변경 사항을 맘대로 적용하며, 임의로 백업하기 좋다”면서 “목표 달성을 위한 최상의 워크플로우를 아무런 영향 없이 진행하는데엔 적격임이 입증된지 오래”라고 했다.

이들이 말하는 DVCS의 장점은 많다. 또 다른 예로는 임의의 두 가지 코드베이스 복사본 간에 변경 사항을 병합할 수도 있다. 즉, 하나의 코드베이스 위에서 공동 작업을 하려는 2명의 개발자라면, 각자의 개별 소스 코드 저장소에서 변경 사항을 추적하고 코드베이스를 동기화하는 것이 좋다고 합의된 시점에 해당 코드를 쉽게 공유할 수도 있다. 나아가선 그 중 좀더 핵심 역할을 하는 개발자가 관리하는 표준 코드베이스에 자신들의 변경 사항을 적용할 수도 있다. 그야말로 오픈소스를 통해 이루고자 하는 개발 목표에 매우 유연하고 효율적으로 다가갈 수 있다는 얘기다.

DVCS 옹호론자들은 복사본을 둘러싸고 말이 많은 ‘포킹’에 대해서도 반박하고 있다. 즉 “수많은 개별 분산 리포지토리에 저장된 다양한 코드베이스는 실제로는 복사본이 아니고, 우연히 같은 유전적 조상을 가진 코드를 저장하는 개별 저장소일 뿐”이라며 “CVCS에서처럼 ‘복사본’을 꺼내오는게 아니라, DVCS 사용자가 코드베이스를 단순히 ‘복제’하는 것”이란 주장이다. 다시 말해 개별 복사본이 아니라, 대표적인 오픈 소스 DVCS인 깃(Git)이나 머큐리얼(Mercurial)처럼 클론 명령에 따라 다른 저장소에서 새 저장소를 생성하는 프로세스를 진행하는 것이란 설명이다.

그래서 개발자들은 DVCS임을 강조하는 소프트웨어 유형을 점점 더 선호할 수 밖에 없다는 주장이다. “개발자가 코드베이스의 변경 사항을 추적하여 필요한 경우 해당 변경 사항을 취소할 수 있다”면서 “그 덕분에 개발자가 코드의 모든 변경 사항을 위반할 수 있다는 ‘포킹’의 우려를 할 필요도 없다”는 설명이다. 또한 한 번에 둘 이상의 개발자의 변경 사항을 병합하거나 새 릴리스 버전을 작업하는 동안, 이전 버전에 대한 업데이트를 유지할 수 있는 원활한 프로세스도 DVCS의 장점으로 꼽고 있다.

다만 양자를 병행하는게 최상이라는 의견도 적지 않다. 앞서 개발업체 근무자 Y씨도 DVCS를 처음 접했을 때의 기억을 되살리며 “처음엔 깃보다는 머큐리얼로 배우기는 했지만 (CVCS와 DVCS) 두 가지는 개념이나 명령어나 상당히 비슷하기 때문에 둘을 같이 쓰는 것은 큰 부담은 없는 것 같았다.”면서 “본래 중앙저장소 방식에 너무 익숙해진 나머지 분산버전관리라는 것이 낯설긴 했지만, 두 가지 모두를 사용하다보니 그렇게 편리할 수 없다”고 들려줬다.

양자를 둔 이런 논쟁이 계속 이어지자 최근 IT업계에선 이를 화두로 한 토론회나 세미나를 여는 모습도 눈에 많이 띈다. 더욱이 아직까지 유명 게임회사나 글로벌 반도체 회사들은 CVCS, 즉 중앙 집중식 버전관리 시스템 사용을 확대하고 있는 점도 작용하고 있다. 곧 이를 주제로 한 웨비나를 개최할 계획이라는 SW업체 P사는 “DVCS, 즉 분산형 버전관리 시스템이 모든 곳에 가장 좋은 대안이 될 수는 없다는 이론이 속출하는 점을 감안해 아예 데브옵스 버전관리 시스템에 대해 알아야 할 핵심내용을 전달하고자 한다”고 취지를 밝혔다.

저작권자 © 애플경제 무단전재 및 재배포 금지