[개발이야기#049] 소프트웨어 버전 관리 시스템은 무엇인가?

in #kr6 days ago

소프트웨어 버전 관리 시스템이란 무엇일까?

안녕하세요, 가야태자 @talkit입니다.
오늘은 간단하게 버전 관리 시스템(Version Control System, VCS)에 대해 이야기해 보겠습니다.

버전 관리 시스템이란?

버전 관리 시스템은 말 그대로 소프트웨어의 소스 버전을 관리하는 시스템입니다.
ChatGPT에게 물어보니 아래와 같이 정의해 주더군요:

버전 관리 시스템(Version Control System, VCS)은 파일이나 소프트웨어의 변경 이력을 추적하고 관리할 수 있는 도구 또는 시스템입니다. 주로 소스 코드의 변경을 관리하며, 협업 환경에서도 여러 사용자가 작업한 내용을 효율적으로 추적하고 통합할 수 있습니다.

이처럼 버전 관리 시스템은 현대 소프트웨어 개발에서 필수적인 도구입니다. 그렇다면, 버전 관리 시스템이 없던 시절에는 어떻게 버전 관리를 했을까요?


버전 관리 시스템이 없던 시절

사실, 없었다기보다는 우리가 몰랐던 시절에도 나름의 방법으로 버전 관리를 해왔습니다.

1. 폴더와 날짜로 관리

가장 간단한 방법은 날짜별로 폴더를 만들어 파일을 복사하는 것이었습니다.
변경 전으로 복원할 일이 생기면 어제의 폴더에서 데이터를 복사해와서 수정하는 방식이었죠.
혼자 작업하는 경우에는 어느 정도 이 방식이 가능했습니다.

2. 협업 시의 버전 관리

팀 단위로 협업할 경우에는 각자 위와 같은 방식으로 파일을 관리하면서, 공통된 파일을 합치기 위해 머지 데이(Merge Day)라는 개념을 도입했습니다.
머지 데이는 일주일에 한 번씩 모든 개발자가 자신이 작업한 내용을 공통 버전에 반영하는 날이었습니다. 물론 이 과정은 많은 수작업과 시간이 필요했습니다.


버전 관리 시스템의 발전

버전 관리 시스템은 이러한 비효율성을 극복하기 위해 등장했습니다.
대표적인 세 가지 세대를 소개합니다:

1세대: CVS (Concurrent Versions System)

CVS는 초기의 버전 관리 시스템 중 하나로, 파일 단위로 버전을 관리했습니다.

  • 장점: 파일의 변경 이력을 추적하고, 팀 협업이 가능.
  • 단점: 폴더 단위의 관리가 불가능하며, 충돌 발생 시 해결이 번거로움.

CVS는 당시로서는 획기적이었지만, 한계를 극복하기 위해 더 나은 시스템이 필요했습니다.


2세대: SVN (Subversion)

SVN은 CVS의 단점을 보완한 중앙화된 버전 관리 시스템입니다.
SVN은 파일뿐만 아니라 폴더 단위로도 버전 관리가 가능하며, 데이터베이스(버클리 DB)를 기반으로 동작합니다.

주요 기능

  • Update, Commit, Merge 모두 지원.
  • 삭제된 폴더와 파일도 이력을 통해 복구 가능.
  • 중앙 서버에서 모든 데이터를 관리.

특징

SVN은 중앙화된 방식을 사용하여, 클라이언트가 중앙 서버와 통신하여 변경 사항을 주고받습니다.
이는 협업 환경에서 데이터 관리와 통합이 매우 편리하게 이루어지도록 합니다.


3세대: Git

Git은 리누스 토르발스가 2005년에 개발한 분산 버전 관리 시스템입니다.
Git은 Linux 커널 프로젝트를 위한 버전 관리 도구로 만들어졌으며, 현재는 가장 널리 사용되는 시스템입니다.

Git의 특징

  • 분산 저장소: 각 개발자는 로컬 저장소를 가지고 있으며, 원격 저장소와 동기화 가능합니다.
  • Push와 Pull: 로컬 저장소와 원격 저장소 간 데이터를 주고받는 명령어.
  • 빠른 브랜치와 병합: Git의 브랜치와 병합 기능은 매우 강력하고 유연합니다.

Git의 장점

Git은 분산 구조 덕분에 독립적으로 작업할 수 있어, 협업이 훨씬 자유롭습니다.
그러나 Push를 하지 않으면 팀원이 최신 데이터를 공유할 수 없기 때문에 관리 측면에서 추가적인 노력이 필요합니다.


중앙화 vs. 분산화

CVS와 SVN은 중앙화된 시스템, Git은 분산화된 시스템입니다.
중앙화된 시스템은 데이터 관리가 용이한 반면, 분산화된 시스템은 독립성과 유연성이 강점입니다.
현재는 Git과 같은 분산 시스템이 대세지만, 사용 환경에 따라 SVN을 선호하는 경우도 많습니다.


제가 선호하는 버전 관리 시스템은?

저는 주로 PM이나 AA 역할을 수행하는 입장이라, SVN이 더 편하다고 느낍니다.
Git은 분산 구조 덕분에 유연성이 높지만, Push를 깜빡하면 곤란한 상황이 생기기도 하고, Merge Request를 관리해야 하는 추가 작업도 생깁니다.

그래서 저는 여전히 SVN에 한 표를 던지고 싶습니다!
물론, Git도 익숙해지면 편리하다는 점은 인정합니다. 😊


참고

이 글은 Obsidian을 사용하며 작성한 글입니다.
관련 내용은 아래 글에서 확인하실 수 있습니다:

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.