anothel의 지식 창고
형상 관리 도구의 선택: Git, SVN, 그리고 DevOps 환경에서의 최적화 본문
1. 형상 관리 도구란?
소프트웨어 형상 관리(SCM, Software Configuration Management) 혹은 구성 관리, 버전 관리 시스템(VCS, Version Control System), 소스 관리 등 다양한 용어가 있지만, 핵심은 소프트웨어 개발 환경을 체계화하고 관리하는 것에 있다. 형상 관리 도구는 단순히 소스 코드만 관리하는 것이 아니라, 개발 환경과 빌드 구조 등 전반적인 개발 요소를 베이스라인(baseline)으로 정의해 안정적이고 재현 가능한 작업 환경을 제공한다.
이러한 형상 관리 도구는 하나의 소프트웨어 산출물(binary)을 생성하기 위한 모든 아이템과 공정을 체계적으로 관리하며, 프로젝트 전체의 변경 이력을 추적해 특정 버전으로 되돌릴 수 있도록 한다. 형상 관리 도구가 없었다면 개발자들이 안정적인 작업 환경을 유지하기는 어려울 것이다.
2. 종류 및 특징: Git 아니면 SVN?
형상 관리 도구는 다양하지만, 실제로 대부분의 개발 환경에서 선택하는 도구는 Git이나 SVN이 압도적이다. 필자 또한 여러 도구를 사용해 보았지만, 결국 주로 사용하게 되는 것은 Git과 SVN이었고, 두 도구는 각각의 장단점이 뚜렷하다. 개인적으로는 Git을 선호하지만, SVN도 그만의 매력이 있다. 두 도구의 특징을 아래와 같이 정리해 본다.
3. Git: 협업과 유연성에서 강력한 도구
Git에 특별히 집착하지는 않지만, 그렇다고 SVN을 싫어하는 것도 아니다. 다만 Git이 현대 개발 환경에서 유연성과 협업성 측면에서 더 뛰어나 많은 프로젝트에서 널리 애용되고 있다. 블록체인 코어 개발 회사와 현재 회사에서도 Git을 사용 중이며, 특히 GitLab, Sourcetree, VSCode 같은 모듈들을 연동해 개발 생산성을 극대화하고 있다.
사용 사례와 경험
SVN을 사용하는 국방 SI, 영상처리 솔루션, 인증 보안 솔루션 환경에서 일하면서 Git 전환을 제안한 적이 있다. 하지만 당시 기밀 보안과 전환 비용 문제로 인해 전환이 어려웠다. 때로는 이러한 반대가 "새로운 것을 받아들이기 싫어하는 보수적인 마인드" 때문이라는 생각도 들었다.
Git은 분산형 저장소를 기반으로 하여, 로컬과 원격 저장소를 자유롭게 넘나들며 작업할 수 있다. 이 덕분에 협업이나 유연한 작업 환경이 필수적인 팀에서는 Git이 특히 강력한 도구다. Git은 로컬에서 브랜치와 태그 기능을 통해 독립적인 작업을 유지할 수 있어 작업 효율성을 높이며, 원격 저장소와 병합해 이력을 쉽게 관리할 수 있다.
Git의 장단점
장점
- Git은 빠른 속도와 브랜치 기능의 유연성 덕분에 높은 퍼포먼스를 제공한다. 또한 GitLab, GitHub 등을 통해 DevOps와 통합할 수 있는 점이 매우 유리하다.
단점
- Git은 초반 학습 곡선이 높은 편이며, 커밋 기록 관리가 까다로워 초반에 다루기 어려울 수 있다.
4. SVN: 중앙 집중형 도구의 매력
Git이 많은 프로젝트에서 선택되지만, SVN의 장점도 무시할 수 없다. 과거 면접 자리에서 SVN을 사용하는 회사와 이야기한 적이 있는데, 나는 신나게 Git의 장점을 설명했으나, 면접관은 SVN의 단순성과 통제력을 강조하며 그만의 매력이 있다고 설득했다.
사용 사례와 경험
SVN은 중앙 집중형 구조로 모든 버전을 중앙에서 통제할 수 있어 통제력이 필요한 경우 유리하다. 국방 SI와 인증 보안 솔루션 프로젝트에서는 보안 문제로 인해 Git보다 SVN을 선호했는데, 특히 파일의 현재 상태를 쉽게 확인할 수 있어 작업 중 실수를 줄이는 데 도움이 되었다. 다만, Git에 비해 협업 측면에서는 유연성이 부족하다는 점에서 한계가 있었다.
SVN의 장단점
장점
- 중앙에서 일괄적으로 버전을 관리할 수 있어 통제력이 필요한 상황에서 특히 유리하다.
단점
- 협업 환경에서 유연성이 떨어지며, 분산형 Git과 비교하면 편리함이 부족하다.
5. Plastic SCM: 분산과 중앙 집중의 혼합 도구
Plastic SCM은 과거 회사에서 동료가 사용하던 도구로, 분산형과 중앙 집중형을 혼합해 사용할 수 있어 게임 개발과 같이 대규모 애셋 관리가 필요한 환경에서 주로 사용된다. Git과 SVN의 중간 형태로, 작업 중 충돌 방지를 위한 파일 잠금 기능을 제공하는 것도 Plastic SCM의 강점이다.
6. Bitbucket: 아틀라시안 소프트웨어와의 연동 강점
Bitbucket은 Atlassian에서 제공하는 웹 기반 버전 관리 도구로, 아틀라시안의 다른 소프트웨어들과 연동이 강점이다. 지라(Jira), 힙챗(Hipchat), 컨플루언스(Confluence), 뱀부(Bamboo) 등과의 연동이 용이해, DevOps 환경에서 개발 프로세스를 일원화하는 데 유리하다. 무료 플랜도 제공하며, 최대 5명의 사용자가 개인 저장소를 무제한으로 사용할 수 있는 장점이 있다.
아틀라시안이 데브옵스를 위해 여러 가지 패키지를 판매하고 있고, 그중에 소스 코드 관리 도구로써 빗버킷이 있다. 옆 건물 회사 로고에 파란색이 그득한 회사는 아틀라시안 패키지를 모두 구매해서 사용하고 있다고 전해 들었다(나는 안철수를 안 응원하지는 않는다.현재는 안철수님을 열열히 응원한다.). 원활한 개발 시스템이 구축되어 있는 환경에서 딱 개발만 신경 쓰면 되는 그런 환경이 너무 부럽다. 회사에서 개발 프로세스 개선 회의 중 옆 회사 얘기를 건너 들었다.
지금 회사에서 빗버킷을 이용할 수 없다. 왜냐하면 이미 깃랩을 사용하고 있어서 아틀라시안의 세트를 구매할 필요가 없기 때문이다. 돈도 돈인데 굳이 소스 코드 관리 도구는 깃랩을 쓰면서 다른 여타 패키지 이용을 위해서 빗버킷으로 바꾼다? 혹은 빗버킷 대신에 깃랩을 쓰고 나머지를 아틀라시안 패키지를 사용한다? 둘 다 이상하니, 아무래도 이미 아틀라시안 풀 패키지가 구축된 곳에 입사하는 게 가장 좋은 것 같다.
GitLab을 사용하는 회사에 다니다가 Bitbucket을 사용하는 회사로 이직한 지인께서 Bitbucket 너무 좋다고 그렇게 칭찬을 했더라도, Bitbucket은 GitLab이나 GitHub에 비해서 사용자수가 600만 명으로 조금 밀리고, 아틀라시안 풀 패키지를 구매해서 사용하지 않을 계획인 회사를 다니는 나의 입장에서는 아웃 오브 안중이다. 나중에 내 회사를 차릴 때쯤에나 다시 한번 알아보도록 하자.
이 글을 수정하고 있는 현재 2024년에는 아틀라시안 풀 패키지를 사용하고 있는 회사에서 근무하고 있다. 그 옆 회사로 이직하고 2년 넘게 다니고 있는데 너무 만족하면서 다니고 있다.
지인들께 어떤 종류의 소스 코드 관리 도구를 사용하냐고 질문했을 때 받은 대답 중 특이한 대답이 하나 있었다. 바로 git이었는데, 깃랩도 깃허브도, 빗버킷도 아닌 git이었다. 관리는 Sourcetree를 사용한다고 했다. 하긴 그 친구는 학생 때부터 그런 본연적인 것을 좋아했다. 예를 들어보자면 포토샵으로 할 일을 그림판으로 하는 그런 걸 좋아했던 친구이다.
나는 git으로만 사용하진 못하겠고, 잘 사용하게끔 도와줄 다른 플랫폼이 웬만하면 필요하다. 그게 GitLab, GitHub 아니면 Bitbucket이다. 이런 게 있으면 생산성 높은 일을 할 자신이 있다. 좋은 게 있는 데 사용하지 않아야 할 이유는 없다고 생각한다.(어차피 지금 회사에는 이미 있다) 아마도 대부분의 회사에는 이미 소스 코드 관리 도구가 있을 것이다. 없으면 입사를 취소하고, SVN이 있으면 입사를 고민해보는 것도 좋지 않을까 싶다.(물론 어떤 회사냐에 따라서 조금씩은 다르다)
7. GitLab과 GitHub: 무엇을 선택할 것인가?
GitLab과 GitHub는 많은 개발자들에게 고민의 대상이 된다. GitHub는 오래된 Git 호스팅 플랫폼으로 많은 개발자에게 익숙하며 커뮤니티도 잘 형성되어 있다. 그러나 회사에서는 GitLab의 CI/CD 및 DevOps 기능을 통해 DevOps 환경에 맞춘 기능들을 더욱 자주 활용하고 있다. GitLab은 전체 DevOps 라이프사이클을 단일 플랫폼에서 관리할 수 있으며, GitLab-runner 같은 도구로 효율성을 크게 높일 수 있다.
이용자 수를 한번 따져보자. 빗버킷: 약 600만 명, 깃랩: 약 3000만 명, 깃허브: 약 4000만 명 이상. 이용자 수만 봤을 때는 빗버킷보다는 깃랩, 깃허브가 훨씬 더 많은 이용자 수를 보유하고 있다. 그래서 깃랩을 쓰느냐 깃허브를 쓰느냐 이 두 개의 대결을 세기의 대결로 칭한다.
회사에 다니기 전 회사에 입사하기 위해, 자소설에 항상 썼던 말이 있다.
저는 프로그래밍을 잘하고 싶습니다.
그런데 회사에서 일을 한다는 것은 프로그래밍을 잘하게 되는 과정일 뿐인데, 회사에서는 돈을 줍니다.
이 얼마나 기쁜 일입니까? 저는 늘 기쁜 마음으로 일할 것입니다.
대충 이런 류의 이야기였던 것 같은데, 아마 실제의 나와 글이 달라서 회사에서는 잘 뽑아주지 않았던 것 같다. 나는 프로그래머가 되고 싶어서 컴퓨터공학과에 진학했고, 그뿐이었다. 개발언어 공부를 열심히 하거나, 미치도록 플젝을 하는 행동은 하지 않았다. 그리고 지난날들을 후회한다. 좀 더 열심히 할 걸(껄충맞음.).
개인적으로 GitHub는 기록용 커밋을 위해 사용하고, 회사에서는 GitLab을 사용하면서 두 플랫폼의 장점을 모두 활용 중이다.
그럼에도 왜인지 모르게 GitHub가 더 익숙하다. 아마도 2008년 시작 한 최초의 git 호스팅 플랫폼이기 때문에, 나뿐만이 아니고 많은 사람들에게 익숙할 것이다. 그래서 1일1커밋은 GitHub를 택했고 딱 그것뿐이다. 회사에서는 GitLab을 사용하다 보니 훨씬 편하다(지극히 주관적인 판단).
내가 GitHub와 Bitbuckete보다도 GibLab을 원픽으로 뽑은 이유는 간단하다. 회사에서 GibLab을 사용하고 있고, 세 개 중 가장 많이 사용해봤는데, 편하더라. 단지 그 이유뿐이다. GitLab은 전체 DevOps lifecycle에 단일 인터페이스를 제공하고, 개발자 작업에 필요한 도구가 제품에 통합되어있으며, 자체 호스트를 원한다면 사용하기 쉬운 플랫폼이다.
혼자서 기록용으로 혹은 오픈 소스 개발을 한다면 GitHub, 회사에 돈이 많아서 이것저것 편하게 써보고 싶으면서 그것을 윗 분들이 허락한다면(회사에 돈이 많다면) Bitbucket 세트 통째로, 회사에서 적당히 사용해야겠다 싶으면 GitLab이 적당하다. 나는 회사에서 GitLab을 사용 중이며, GibLab-runner를 사용한다. 능률이 아마 1000배는 잘 나오지 싶다.
나는 단지 설루션 회사에서 만드는 모듈을 빌드하고 테스트해서 한데 모아주는 것뿐이지만, 만약 이런 자동 사이클을 운영과 합쳐서 사용한다? 아마 10000배는 더 효율적이지 않을까 싶다. 내가 하는 일이 10000배는 더 큰 효율을 내게끔 만들어주는 그런 일을 하고 싶다.(대충 DevOps 팀에 들어가고 싶다는 뜻, 예전의 나는 이랬었구나)
8. Bitbucket, GitHub, GitLab: 도구 선택의 기준
도구 선택은 회사 환경과 프로젝트 특성에 따라 달라진다. Atlassian 풀 패키지를 사용하는 환경이라면 Bitbucket이 좋지만, 자체 호스팅이 필요하거나 CI/CD, DevOps 통합이 중요한 경우 GitLab이 유리하다. GitHub는 익숙한 인터페이스와 커뮤니티와의 연동이 좋아 오픈 소스 프로젝트나 개인 기록용으로 적합하다. 현재 회사에서는 GitLab과 GitLab-runner로 프로젝트 효율을 극대화하고 있으며, DevOps와 DevSecOps 환경 요구 사항을 만족하고 있다.
형상 관리 도구는 단순한 코드 저장소가 아닌, 자동화와 협업 효율성을 극대화하는 중요한 도구다. GitLab 같은 도구를 통해 운영과 통합하여 업무 효율성을 100배, 1000배 높일 수 있으며, DevOps 또는 DevSecOps 팀에서 GitLab을 활용해 업무 효율을 극대화하는 것이 목표다.
GitLab 관련 DevSecOps(SAST나 DAST) 구축에 대한 더 많은 정보를 찾고 있으며, 깃랩코리아에 정적 및 동적 분석 도구 문의를 해보았으나 아직 원하는 답변을 얻지는 못했다. 그래도 덕분에 미뤄둔 GitLab에 관한 글을 작성할 기회를 얻어 만족스럽다.
p.s. 깃랩에 DevSecOps 관련하여 정적 분석이나 동적 분석을 할 수 있는 툴이 있냐고 물어보는 질문을 했다가 원하는 답변은 못 듣고 GitLab관련 홍보 메일만 맨날 받고 있다. 그리고 오늘 쓸만한 정보가 담긴 괜찮은 영상을 알게 되어서 추천한다.
https://www.youtube.com/watch?v=dC574OWwIqA
참조URL
https://about.gitlab.com/devops-tools/github-vs-gitlab/ci-missing-github-capabilities/#gitlab-vs-github-cicd-security-comparison
https://dora-guide.com/gitlab-vs-github/
https://en.wikipedia.org/wiki/Plastic_SCM
https://git-scm.com
https://imgeeae.tistory.com/5
https://insight.infograb.net/blog/2021/02/05/gitlab-vs-github/
https://ko.wikipedia.org/wiki/%EA%B5%AC%EC%84%B1_%EA%B4%80%EB%A6%AC
https://ko.wikipedia.org/wiki/%EA%B9%83%EB%9E%A9
https://ko.wikipedia.org/wiki/%EA%B9%83%ED%97%88%EB%B8%8C
https://ko.wikipedia.org/wiki/%EB%B2%84%EC%A0%84_%EA%B4%80%EB%A6%AC
https://ko.wikipedia.org/wiki/%EB%B9%97%EB%B2%84%ED%82%B7
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
https://namu.wiki/w/Git
https://namu.wiki/w/GitHub
https://namu.wiki/w/GitLab
https://steemit.com/kr-newbie/@kkirida/kkiri-02-18-05-03
https://www.atlassian.com/ko/software
https://www.itworld.co.kr/news/109976
https://www.mule.co.kr/bbs/info/humor?v=v&idx=56367284
https://www.newswire.co.kr/newsRead.php?no=926555
https://www.plasticscm.com
https://www.samsungsds.com/kr/insights/github.html#:~:text=%EA%B9%83%ED%97%88%EB%B8%8C%EB%8A%94%202018%EB%85%84,%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A5%BC%20%EC%84%9C%EB%B9%84%EC%8A%A4%ED%95%98%EA%B3%A0%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.
https://www.smartcitytoday.co.kr/news/articleView.html?idxno=22212
'기술 노트' 카테고리의 다른 글
AIX에서 이상적인 PS1 프롬프트 설정하기: 효율적인 작업 환경 만들기 (1) | 2022.03.13 |
---|---|
애자일 선언과 소프트웨어 장인 정신: 더 나은 개발을 위한 나의 다짐 (0) | 2022.02.10 |
개발과 운영의 경계를 허물다: 데브옵스와 실무 경험기 (1) | 2022.02.08 |
MSVC 버전과 Visual Studio: _MSC_VER 매크로를 통한 버전 매칭 완벽 정리 (0) | 2022.02.07 |
GitLab Runner 설치 및 설정 가이드 (0) | 2022.01.21 |