DevOps/Git

[DO] 소스 코드 관리 도구 git 쓰세요? 아니면 SVN? 혹시 Plastic SCM?

anothel 2022. 2. 9.

정의

소프트웨어 형상 관리, 구성 관리(SCM, Software Configuration Management), 버전 관리 시스템(VCS, Version Control System), 소스 관리(source control), 소스 코드 관리(SCM, Source Code Management)는 일반적으로 모두 동일한 의미 하며, 특히 형상 관리는 소스 코드뿐 아니라 개발 환경, 빌드 구조 등 전반적인 환경 전반적인 내역에 대한 관리 체계를 정의한다.

 

 

즉, 하나의 소프트웨어 산출물(binary)을 생성하기 위해 필요로 하는 아이템들과 공정 방식의 정의, 그리고 재생성을 위한 전반적인 환경까지 베이스라인(baseline)화하여 관리하는 방식 전체를 의미하며, 이를 체계화한 사항을 형상 관리 시스템으로 정의하고 있다.

 

종류 및 특징: 그래 봐야, git 아니면 SVN. 그중에 나의 원픽은 git

어떤 사람은 git을 쓰지 않으면 다른 세상의 개발자라고도 했고, 어떤 책에서는 SVN에서 git으로 바꾸지 않을 이유는 전혀 없으며 만약 있다면, 새로운 것을 받아들이기 싫어하는 꼰대분들의 틀에 박힌 생각이 아주 큰 비중을 차지할 확률이 높다고 했다.

 

 

개발일을 업으로 삼아서 일을 해오면서 다양한 종류(그래 봐야, git 아니면 SVN)의 소스 코드 관리 도구들을 사용해봤는데, 나는 git과 SVN 나름대로의 장단점이 있다고 생각한다. 아울러, 정보처리기사를 준비할 때 배웠던 몇몇의 도구들도 있더라. 그래서 각 도구별 특징들을 정리해 봤다.

 

git

git에 미치지 않았고, SVN을 혐오하지 않는다. 단지 블록체인 코어 개발을 했던 회사 그리고 지금 회사에서 git을 사용했고 사용하고 있다. 국방 SI 및 영상처리 설루션 개발업체 그리고 인증 보안 설루션 개발업체에서는 SVN을 사용했는데, 그 당시에 SVN에서 git으로 넘어가는 것에 대해서 건의를 드렸었고, 받아들여지지 않았다.

 

대체 이해가 안가는 상황이다. 이 이미지가 뭐라고 이 이미지 때문에 쓰던 내용을 세번이나 날려먹고 지금 3트째 ^_^ 정말 화가 나지만 그래도 세번째쓰는 내용은 이전보다는 훨씬 더 나아있을 것이라고 예상해보기도 하고 남자는 삼세번이라고 누가 떠들었는지 찾아가서.... 대체 왜 나는 사서 고생하는지 잘 모르겠다. 이게 뭐라고. git 그게 뭔데 대체 그게 뭐길래 나를 이렇게 힘들게 하는 것일까. 그래도 이제 글이 잘 저장이 되는걸 확인했고 이제는 좀 맘놓고 다시 잘 써봐야겠다. 아마도 기존 사용했던 이미지 파일의 확장자가 일반 이미지 파일 형식인 jpg나 png 이런 것이 아니고 svg인가 하는 xml 기반의 파일 형식이어서 그런 것 같다. 남자는 삼세번이라고 떠들었던 사람 댓글 달아주시면 감사드리겠습니다. 대체 누군지..

 

그 이유로는 아랫분의 짧은 식견으로는 이렇다. 기존 잘 돌아가던 SVN에서 git으로 넘어가면 국방자료 및 회사의 기밀인 기술 유출이 우려되며, 기존 잘 돌아가던 SVN에서 git으로 넘어가면 그에 따른 시간 및 비용이 소요되기 때문에 윗분들이 반대하셨기 때문이다.

 

하지만 git은 SVN처럼 온프레미스 방식으로 사용할 수 있으며, git은 리누스 토르발스 아저씨가 만들었고 SVN처럼 GPLv2 기반의 오픈소스(무료)이다. 그래서 위의 두 개의 이유가 아니라면 다른 이유로는 아마도 새로운 것을 받아들이기 싫어하는 꼰머분들의 마인드 때문이지 않을까 싶다. 혹시 위의 세 개의 이유가 아닌 다른 이유로 반대하셨던 윗분들 혹시 보고 계신다면 댓글 달아주신다면 감사드리겠습니다.

 

나는 회사에서 git을 사용하기 위해서 GitLab, Sourcetree, VSCode의 각종 git을 위한 모듈 등을 사용한다. 이러한 툴들이 없는 개발환경은 상상조차 해볼 수 없다. 왜냐하면 이러한 것들을 잘 이용하는 것이 나의 직업 유지 비결이기 때문이다. git은 다루기가 살짝 어렵기 때문에 잘 배워둬야 한다는 단점 빼고는 장점밖에 없다고 생각하기 때문에 혹시 누군가 나에게 SVN 그리고 git 중 하나를 고르라면 나는 git이다. 그 장점은 작업자로 하여금 혹은 관리자까지 높은 퍼포먼스를 낼 수 있게끔 도움을 준다.

 

git의 특징

소스 코드 관리 도구의 대명사. git은 매우 빠른 속도와 분산형 저장소 지원이 특징이다. 회사에서 협업할 때 여럿이 달려들어 자기 맘에 드는 걸 하기도 하고, 또한 뭘 하나 잘못 붙였다 이상한 걸 건드려 팀장님께 혼나기 쉬운데, git는 이런 환경의 특성에 맞게끔 잘 만들어져 있다(git flow 그리고 git branch).

 

git의 작업 폴더는 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하고 있는 저장소이다. 즉 로컬에 모든 파일을 다 받아서 작업한다. 작업이 끝나면 git 원격 저장소로 다시 발행하는데, 여기에서 메인 저장소와 합치기(merge) 전 메인 저장소와 격리시키고 따로 개발할 수 있는 가지(branch)라는 걸 만들어 가지의 개발이 완료될 시 메인 저장소와 합치고(merge) 가지는 삭제(브랜치 삭제)시키는 가지치기를 할 수 있으며, 또한 개발 중간중간 꼬리표(tag)를 매겨 개발을 더 수월하게 할 수 있다.

 

SVN

한 번은 면접 볼 때 우리 회사는 SVN을 사용하는데?라고 말씀하셨던 면접관이 계셨다. 그 말씀을 하시기 전 나는 신나게 git의 장점(그래 봐야 SVN과 비교해서 조금 더 사용에 편리한 branch 기능)을 말씀드렸었다. 만약 그때의 면접관분께서 SVN 그리고 git 중 하나를 고르라고 하신다면 저는 무조건 SVN입니다. 왜냐하면 SVN은 git과 비교해서 또 다른 장점이 있으며 SVN만의 매력이 있습니다. 아울러, git에서 사용할 수 있는 모든 작업을 SVN 혼자서는 다 해낼 수 없긴 하지만  또 다른 도구(ex. Jenkins 등)를 사용하면 훨씬 더 강력한 퍼포먼스를 낼 수 있다고 생각합니다. 아울러, 저는 SVN, Git 모두 사용할 줄 아는 준비된 인재라고 강력하게 말씀드릴 수 있습니다. 그 당시의 면접관님 댓글 남겨주시면 감사드리겠습니다. 사실 아직 SVN을 사용하고 있다는 회사가 있다면 면접 박차고 일어나는 게 맞다고 생각하지만, 그 회사만큼은..

 

 

SVN의 특징

2000년대 중반까지 널리 쓰였으나, 2010년도 이후 git에 맹렬하게 추격당해 시장의 지배권을 내주었다. 중앙집중형 구조를 취하기 때문에 git에 비해 쓰기 쉽지만 협업에는 불리하다.

 

SVN을 사용하면 해당 파일의 아이콘에 레이아웃을 걸 수 있는데 이 파일이 현재 어떤 상태인지 보기가 편했던 것으로 기억한다. 또한 diff 기능이 편리했었는데 이 정도의 특징을 제외하면 SVN을 새로 배워서 써먹을 시간에 git을 조금 더 본 후 git을 쓰는 게 여러 가지 면에서 나을 것이라고 생각한다.

 

Plastic SCM

회사에서 어떤 종류의 소스 코드 관리 프로그램을 사용하는지 물어봤다. 대부분 git을 사용하고 있었고, 한 두 명 정도가 SVN을 사용하고 있었다. git은 당연히 사용하는 것이었고 GitLab이냐 GitHub냐 아니면 Bitbucket이냐 셋 중에 하나였다. 그러다 이전 회사에서 Plastic SCM이라는 툴을 사용했다고 하는 형이 있었는데 이 회사가? 하는 의아함이 있었지만 이 회사가 사용한다면 어떤 툴인지 한번 알아는 봐야겠다고 생각했다.

 

마무리: 소스 코드 관리 도구 git 왜 안 쓰세요?

사실 git을 쓰지 않아야 할 이유가 없다고 생각한다. 하지만 어쩔 수 없이 git이 아닌 다는 도구를 사용해야 한다면 말 그대로 어쩔 수 없지 않겠는가. git을 쓰는 회사로 이직을 하든지 아니면 git을 써보자고 윗분들을 설득하든지 그것도 아니면 집에서 혼자 git을 써보면서 아 이런 게 있구나 만족해보든지.

 

Resources

소스 코드 관리의 정의

- https://imgeeae.tistory.com/5

- https://ko.wikipedia.org/wiki/%EA%B5%AC%EC%84%B1_%EA%B4%80%EB%A6%AC

- https://ko.wikipedia.org/wiki/%EB%B2%84%EC%A0%84_%EA%B4%80%EB%A6%AC

- https://namu.wiki/w/%EB%B2%84%EC%A0%84%20%EA%B4%80%EB%A6%AC%20%EC%8B%9C%EC%8A%A4%ED%85%9C

git의 정의

- https://git-scm.com

- https://namu.wiki/w/Git

- https://git-scm.com/book/ko/v2

Plastic SCM

- https://www.plasticscm.com

- https://en.wikipedia.org/wiki/Plastic_SCM

댓글1