본문 바로가기
코딩해보니/Git

[Git_02] SVN(Subversion) vs Git

by 위시랜 2022. 11. 2.

SVN(subversion)과 git
SVN(subversion)과 git

1. 버전 관리 시스템

버전 관리 시스템을 VCS라고 합니다. 
VCS는 Version Control System의 약어입니다. 
버전 관리 시스템을 구성하기 위한 방법은 여러 가지가 있습니다. 
여러 가지가 있다는 것은 버전 관리에 필요한 소프트웨어가 다양하다는 얘기와 같다고 할 수 있습니다. 
따라서, 결국 버전 관리 시스템은 버전 관리를 위해 어떤 소프트웨어를 사용하느냐에 따라 달라지게 됩니다.​

현재 버전 관리 소프트웨어는 대표적으로 SVN(Subversion)과 Git이 잘 알려져 있습니다. 
두 소프트웨어는 중앙집중형과 분산형 버전 관리의 대표격이라 할 수 있습니다. ​

■ 중앙집중형

SVN(Subversion)이 중앙집중형 버전 관리 소프트웨어의 대표주자입니다. 
중앙집중형은 하나의 메인 중앙 서버에 저장소를 두고 소스를 관리합니다.
그래서, CVCS(Centralized Version Control System) 라고 합니다. 
이 중앙집중형의 최대 단점은 중앙 서버에 문제가 생기면, 작업을 이어갈 수 없습니다. 
작업은 어찌 이어 갈 수 있다고 해도, 버전 관리가 되지 않습니다. 
버전 관리 시스템은 전체 개발 환경과 운영 서버로의 배포까지 맞물려 있는 경우가 대부분이기에

중앙 서버에 문제가 발생하면 심각한 상황이 될 수 있습니다. 
중앙에 저장소를 여럿이서 함께 사용하므로 속도가 느려 질 수 있습니다. 

■ 분산형

Git은 분산형 버전 관리 소프트웨어의 대표주자입니다. 
분산형 버전 관리 시스템은 저장소가 중앙집중형과 다르게

중앙 서버 저장소와 더불어 자신의 PC가 중앙 서버 저장소의 복제본으로써 저장소가 되어

저장소를 분산된 형태로 운영할 수 있습니다. 
그래서, DVCS(Distributed Version Control System)라고 합니다. 
이로써 중앙집중형이 가지는 가장 큰 단점을 상당히 보완되어 집니다. 


2. SVN(Subversion) 과 Git을 활용한 버전 관리 시스템의 차이

SVN의 경우 저장소 역할을 위한 서버 프로그램이 별도로 제공됩니다.

Git의 경우는 Git 설치와 함께 저장소 운영이 가능한데, 원격 저장소를 위해서는 별도 설정이 필요합니다.

저장소가 준비가 되면 이제 버전 관리 시스템이 준비가 되었습니다.

너무 간단하지 않나요?

여기서 저장소라는 얘기를 했는데,

레포지토리(Repository)라고 얘기하는 이 저장소는

버전을 관리할 소스가 최종적으로 저장되는 곳을 말합니다.

저장소에 소스와 함께 소스의 변경 이력이 모두 기록되어집니다.

이 저장소를 가지고 내 PC와 함께 버전 관리가 되어지는 전체 구성을 그림으로 표현해 보겠습니다.

SVN의 경우는 다음과 같습니다.

SVN(Subversion)을 이용한 버전 관리 시스템 구성 (단일 클라이언트)
SVN(Subversion)을 이용한 버전 관리 시스템 구성 (단일 클라이언트)

위 그림은 저장소를 별도 서버로 내 PC와 분리해 구성한 모습입니다.
"서버 저장소"를 "내 작업 PC"에 둔다고 해도 내부적으로 서버(저장소)와 클라이언트(작업공간)로 구분되어 집니다.
참고로 업데이트(Update)와 커밋(Commit)은 저장소에 있는 소스를 꺼내고 다시 넣는 동작입니다.

여기서 클라이언트(작업 PC)가 늘어나면 다음과 같은 그림이 됩니다.

SVN(Subversion)을 이용한 버전 관리 시스템 구성 (다중 클라이언트)
SVN(Subversion)을 이용한 버전 관리 시스템 구성 (다중 클라이언트)

SVN의 경우 매우 직관적이라고 할 수 있습니다.

"A 작업 PC"에서 소스를 "서버 저장소"에 올리면 즉시 반영이 되고,
따라서 다른 작업 PC(B와 C)에도 즉시 공유가 됩니다. 이렇게 직관적이라 사용하기 쉽다는 장점이 있습니다.

하지만, 앞서도 얘기했지만 중앙집중형은 "서버 저장소"에 문제가 생기면 매우 곤란해지는 상황이 됩니다.

다음은 Git의 경우 단일 클라이언트에서 버전 관리 시스템의 구성은 다음과 같습니다.

Git을 이용한 버전 관리 시스템 구성 (단일 클라이언트)
Git을 이용한 버전 관리 시스템 구성 (단일 클라이언트)

언뜻 보면, SVN과 뭐가 다르지?라고 생각할 수 있습니다만,

먼저, "서버 저장소"는 동일하지만, "내 작업 PC"(클라이언트)에도 "로컬 저장소"라는 저장소가 있습니다.

SVN은 커밋으로 중앙의 저장소(서버 저장소)로 소스를 올리게 되지만,

Git은 커밋을 하면 자신의 작업 PC에 저장소에 저장을 하게 됩니다.

그리고 "서버 저장소"에 올리기 위해서는 다시 푸시(Push)라는 명령을 사용합니다.

뭔가 복잡해졌습니다. ㅎㅎ

정리하면, SVN과 가장 큰 차이는 내 PC(작업 PC)가 하나의 저장소가 된다는 것입니다.

그래서 커밋을 하는 경우 SVN은 서버 저장소에 반영이 바로 되었지만,

Git은 내 작업 PC의 로컬 저장소에만 반영이 됩니다.

그럼, Git을 이용해 여러 사람이 함께 작업을 하면 어떤 모습일까요?

Git을 이용한 버전 관리 시스템 구성 (다중 클라이언트)
Git을 이용한 버전 관리 시스템 구성 (다중 클라이언트)

앞서 SVN을 이용한 버전 관리 시스템 구성도와 비교해서 보면 바로 차이를 알 수 있습니다.
내가 작업한 소스를 커밋한다고 해서 다른 작업 PC에 반영이 되지 않는다는 것을 알 수 있습니다.

여기까지 SVN과 Git의 차이를 큰 틀에서 비교해 보았습니다.

 

 

[전자책]Basic Git - 예스24

SVN을 사용할 때도 그랬지만, 버전 관리 시스템을 사용하면서 충분히 알지 못한 상태에서 당장 필요한 기능만을 익혀서 사용하는 경우가 대부분이었습니다. 어떻게 동작하는 지에 대한 이해는

www.yes24.com

 

댓글