아마 게임을 해본 사람이라면 "v1.5.2"와 같이 버전이 존재하는 것을 알 수 있다.
게임은 이러한 버전 관리를 통해 3가지 업무를 수행한다.
그리고 컴퓨터 프로그래밍 쪽에서 말하는 버전 관리 또한 이와 다르지 않다.
컴퓨터 프로그래밍에서의 버전 관리는 "내가 원하는 시점(버전)으로 이동할 수 있게 해주는 것"을 의미한다.
그리고 이러한 버전 관리를 도와주는 툴(Tool)을 "버전 관리 시스템"이라고 한다.
당연히 내가 원하는 시점으로 이동하기 위해선 해당 시점에 코드가 어떤 형태로 존재했는지 저장되어 있어야 할 것이다.
따라서 버전 관리 시스템은 파일이 변경될 때마다 이를 기록함으로써 특정 시점 파일이 어떤 상태였는지를 저장하고 있어야 한다.
그래서 버전 관리를 다르게 말하자면 "파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 파일을 다시 꺼내올 수 있는 시스템"이라고도 말할 수 있다.
위에서 설명했듯 프로그래밍에서의 버전 관리와 게임의 버전은 큰 차이가 없다.
그렇다면 롤로 한번 비교해보자.
내 코드가 12.2 패치에서 12.3 패치로 업그레이드되었다고 가정하자.
이 패치에는 3개의 큰 패치가 있었다.
1개의 아이템 삭제(기능 제거), 1개의 챔피언 추가(기능 추가), 그리고 사일러스라는 챔피언의 버프(기능 변경)가 그것이다.
또 이전 버전에 우물에서 광클하면 아이템이 2번 사지는 버그가 있어 이를 해결했다. (오류 수정)
그런데 게임을 하다 보니 사일러스 버프가 너무 심해서 빠르게 롤백시켜야 할 필요가 생겼다. 이때 사일러스 캐릭터만 12.2 패치 버전으로 백업시킬 수도 있어야 한다. (부분 백업/핫픽스)
마지막으로, 롤이라는 게임은 프로 리그가 존재하는데 프로 리그 버전은 현 버전보다 조금 느리다.
따라서 프로게이머들은 선수끼리 연습을 할 때 해당 버전으로 연습을 할 필요가 있을 것이며 그들은 게임할 때 12.1패치로 되돌린 후 게임을 할 필요가 있다.(전체 백업)
여러 버전 관리 기능 중 핵심 기능만 몇 개 말해봤는데, 다른 기능도 매우 많다.
만약 "버전 관리 시스템으로 이것이 될까?"라는 의문을 가진다면, "게임 유지보수 시 이런 기능이 존재할까?"라고 생각해보자.
만약 게임 유지 시 있을 것 같은 기능이라면, 100% 버전 관리에도 있는 기능일 것이다.
아마 Github라는 말은 개발자가 아니더라도 들어봤을 것이다.
너무 유명한 말이라 그런지 Github = Git, 혹은 Github 에서 개발한 시스템이 Git이라고 생각하는 사람도 있을 것이다.(왜냐면 제가 처음에 그랬거든요.)
하지만 이는 순서의 역전이라고 볼 수 있다.
Git은 소스코드 버전 관리 시스템(VCS)로써 위에서 말했던 버전 관리 시스템 중 하나라고 할 수 있다.
특히 여러 버전 관리 시스템 중 "소스코드"의 버전 관리에 집중하는 시스템이 바로 Git이다.
그리고 Github는 이런 Git 시스템을 조금 더 편하게 사용할 수 있게 도와주는 여러 호스팅 사이트 중 하나인데, 어떻게 도와주는지 알기 위해선 형상 관리 툴 종류 중 "Client/Server 타입"과 "분산 저장소 타입"에 대해 알 필요가 있다.
항목 | Client/Server 타입 | 분산저장소 타입 |
---|---|---|
버전 관리 방식 | 중앙 시스템(서버)에 버전 관리 자료 저장 | 하나의 원격 저장소와 분산된 개발자 PC마다 존재하는 로컬 저장소에 자료 저장 |
버전 관리 위치 | 서버에서만 가능 | 개발자 로컬 PC와 원격 저장소 어디에서나 가능 |
서버 장애 발생 | 서버에서만 버전 관리가 가능하므로 복구되기 전까진 협업 및 버전 관리 불가 | 개발자 로컬 PC에서도 버전 관리가 가능하므로 끊김이 없는 버전 관리 가능 |
협업 안정성 | 중앙 시스템에서만 버전관리를 수행하므로 충돌이 나거나 문제가 생길 가능성이 높음 | 개발자 PC에서 한 번 문제를 해결하고 원격 저장소에 Push 할 수 있으므로 Commit 실수가 바로 모든 개발자에게 영향을 주진 않음 |
대표 Tool | SVN | Git |
둘의 차이점을 설명하려 만든 표인데 어쩌다 보니 분산 저장소 타입의 장점을 열거한 표가 되어버렸다.
위에서 볼 수 있듯 분산 저장소 타입은 중앙 시스템에 큰 영향을 받지 않는다는 장점과 협업을 조금 더 유연하게 해준다는 장점 때문에 많이 활용되고 있다.
이러한 분산 저장소 타입(Git)도 결국 원격 저장소를 가지고는 있어야 한다. 그래야지만 다른 개발자들과 나의 코드가 최신 버전으로 업데이트될 수 있기 때문이다.
이러한 원격 저장소를 Git에서는 Git Repository라고 부르며 이러한 Repository에 대한 원격 액세스를 제공하는 사이트들이 바로 Git 호스팅 사이트이다.
그리고 이 호스팅 사이트 중 대표적인 것이 Github이다.
Git 호스팅 사이트에는 Github 말고도 다양한 사이트가 존재하는데, 그중 가장 많이 활용되는 Github, GitLab, Bitbucket에 대해 알아보자.
아래 설명은 https://disbug.io/en/blog/github-vs-gitlab-vs-bitbucket 를 기반으로 정리했습니다.
가장 대중적으로 활용되는 툴
깃허브 이슈를 통해 프로젝트 추적/관리가 쉬움
깃허브 위키를 통해 다른 개발자와 정보를 공유할 수 있음
(개인적인 느낌) Pull Request 창이 가장 체계적으로 되어 있어 협업이 쉬워지고 요구사항이 명확해짐
깃허브 마일스톤을 통해 진행 상황을 다른 개발자와 공유할 수 있음
GitLab의 기반은 CI/CD 자동화이므로 다른 GIT 저장소와 다르게 전체 DevOps 주기를 지원
에픽, 그룹 및 마일스톤을 사용하여 포트폴리오 계획 및 관리 가능
JIRA 티켓 및 버그를 가져올 수 있음
Gitlab 문제는 첨부 파일로 이메일을 통해 전달할 수 있고 CSV 파일로 내보낼 수 있음
코드 품질 보고, 취약성 관리, 코드 보안 스캐닝 등을 통해 보안 솔루션을 활용할 수 있음
협업 계획 도구를 사용하여 프로젝트를 효율적으로 관리할 수 있고 비즈니스 성과를 감독할 수도 있음
Jira, Trello 및 Confluence를 개발한 Atlasian에서 만든 서비스
한 때 무한하고 비용이 들지 않는 개인 리포지토리를 제공하는 유일한 회사였기에 시장에서 두각을 나타냄
Git과 유사한 버전 관리 툴인 Mercurial(머큐리얼)을 사용할 수도 있음
모회사 서비스(Jira, Confluence, Trello, Bamboo 및 Opsgenie)와의 자연스러운 인터페이스를 통해 CI/CD 배포 및 모든 내부 프로세스를 진행할 수 있어 프로젝트 관리에 큰 강점을 가짐
항목 | Github | Gitlab | Bitbucket |
---|---|---|---|
오픈 소스 | X | O | X |
서비스 간 통합 | Marketplace 수백 개의 애플리케이션 연동 가능 | Jira 및 기타 문제 추적기와 연동 가능 | 모회사 서비스와의 통합 가능 |
커뮤니티 | 사용하기 쉽고 Git 사용 시 처음 접하는 툴이다 보니 커뮤니티가 강력함 | 오픈 소스이지만 Github보단 적음 | 기업용으로 많이 사용되어 커뮤니티 코어 X |
배포 | 조직 수준에서의 배포 | 그룹 프로젝트 배포 지원(그룹 구성원에게 프로젝트 코드에 대한 액세스 및 공유 권한 부여) | 팀 수준에서의 배포까지 가능 |
DevOps | Marketplace와의 통합을 통해 발전 중 | 선두권 | 모회사 서비스와의 통합을 통해 발전 중 |
가격(달러) | 0, 4, 21 | 0, 9, 99 | 0, 15, 30 |