Unity 검색

버전 관리 시스템 선택 시 고려해야 할 8가지 요소

Laptop with race car
Laptop with race car
다루는 주제
공유

버전 관리 시스템을 처음으로 구현하거나 새로운 시스템으로 변경하는 일이 쉽지는 않지만 장기적으로 보면 큰 효과가 있습니다. 이번 포스팅에서는 버전 관리 시스템을 선택하기 전 고려해야 하는 사항을 소개합니다.

게임 제작은 보람이 있지만 때로는 복잡한 일이기도 합니다. 개발 중에는 제작 프로세스에 맞추어 기술 수준이 서로 다른 많은 팀원들이 같은 프로젝트에서 협업합니다. 동시에 둘 이상의 사람들과 협력하는 일은 쉽지 않으며, 팀의 규모가 커질수록 협업은 더욱 더 어려워집니다.

문제가 발생할 경우 이를 파악해서 수정하는 데 많은 시간이 걸리므로 모든 작업과 팀원들의 업무 처리 속도가 느려지게 됩니다. 따라서 목표에 따라 적합한 버전 관리 시스템(VCS)을 선택하는 것이 중요합니다.

버전 관리의 작동 원리

버전 관리를 사용하면 프로젝트 전체를 한눈에 파악할 수 있으며, 반복 작업을 빠르고 효율적으로 수행할 수 있는 기본 체계가 마련됩니다. 버전 관리 시스템의 원리는 무엇일까요?

프로젝트 파일은 저장소 또는 '리포(repo)'라고 불리는 공유 데이터베이스에 저장됩니다. 이 방식을 사용하면 정기적으로 프로젝트를 백업하고, 수정 사항을 철회하고 싶을 때 이전 버전으로 간편하게 되돌릴 수 있습니다.

버전 관리 시스템을 사용하면 여러 가지 개별적인 변경 사항을 적용하고 단일 소스로 '커밋(commit)'할 수도 있습니다. 변경 사항을 하나의 그룹으로 취급하므로 이전 버전으로 되돌리면 같은 그룹에 있는 모든 변경 사항이 취소됩니다. 실제로 하나의 '커밋'으로 그룹화된 각 변경 사항을 검토하고 수정하거나 '커밋'을 모두 실행 취소할 수 있습니다. 전체 내역에 액세스할 수 있으므로 버그를 추적해서 없애기가 더 쉬우며 이전에 제거했던 기능을 복원할 수도 있습니다.

그뿐 아니라 버전 관리는 보통 클라우드나 분산 서버에 저장되기 때문에 서로 다른 시간대와 지역에 위치한 개발 팀 간의 협업을 지원하며, 원격 근무가 보편화되면서 이 장점의 중요성이 점점 커지고 있습니다.

새 버전 관리 시스템으로 전환하는 이유

버전 관리 시스템의 전환은 부담스러운 작업인데, 팀에서 프로젝트 중간에 사용하던 기술을 바꿔야 하는 경우라면 특히 그렇습니다. 하지만 새로운 시스템을 도입하기 전에 정보에 기반해 의사 결정을 내린다면 그 과정이 더 수월할 겁니다.

새 버전 관리 시스템을 구현하거나 전환하는 일반적인 이유는 다음과 같습니다.

  • 다양한 팀 간의 협업 강화
  • 대규모 바이너리 파일 및 에셋 관리의 신속한 지원
  • 전체 프로젝트 빌드를 다운로드하지 않고도 특정 파일을 변경할 수 있는 파일 기반 워크플로
  • 일부가 아닌 모든 팀원들이 동시에 작업할 수 있는 유연하고 강력한 브랜칭 솔루션
  • 기존 개발 툴과의 통합 향상
  • 강화된 보안으로 프로젝트 보호

버전 관리 시스템 선택 시 고려 사항

버전 관리 시스템을 선택할 때 고려해야 하는 8가지 주요 요소는 다음과 같습니다.

1. 팀의 상황

새로운 버전 관리 시스템의 구현 또는 전환은 기본적으로 팀워크를 강화하기 위한 일입니다. 버전 관리는 사무실 또는 원격 근무에서 팀원이 독립적으로 일하면서도 다른 팀원과 조율할 수 있도록 지원합니다. 팀의 니즈를 충족하려면 먼저 이 질문들에 대해 생각해 보세요. "이 새로운 시스템을 몇 명이 사용할 것인가? 각자의 기술 전문성 수준은 어느 정도인가? 기존 시스템에 대해서는 어떻게 생각하며, 새로운 시스템에 바라는 점은 무엇인가?"

생산성을 높이기 위해서는 모든 팀원이 기술적인 도움 없이도 변화를 받아들일 준비가 되어 있어야 합니다. 아티스트를 포함해 기술 분야가 아닌 모든 팀원이 쉽게 사용할 수 있는 시스템을 선택하면 새로운 버전 관리 시스템으로 전환하는 데 따르는 감정적 충돌도 줄일 수 있습니다. 사용에 어려움이 적으면 도입도 빨라지고 결과도 빠르게 실현할 수 있습니다.

2. 파일 유형 및 크기

게임 산업이 확장되면서 소비자의 기대치도 높아졌습니다. 게이머들은 더 나은 그래픽을 추구하고 버그 없이 출시되기를 바라며, 출시 후에도 업데이트와 신속한 지원을 끊임 없이 기대합니다. 개발자는 높은 위험을 부담하며 이러한 위험은 계속 높아지고 있습니다.

게임 디자인의 복잡도가 높아지면 파일 유형은 더 다양해지고 파일과 리포 크기는 더 커져 더욱 복잡해진 프로젝트를 처리하고 관리해야 합니다. 원활한 워크플로와 신속한 병합을 위해서는 프로젝트를 대규모로 처리할 수 있는 버전 관리 시스템을 사용하면 됩니다. 버전 관리 시스템은 장기적인 안목을 가지고 선택해야 한다는 점을 기억하세요. 지금은 팀에서 대용량 파일을 처리하지 않더라도 언젠가는 요구 사항이 바뀌기 마련입니다. 개발에 차질이 없도록 미리 준비하세요.

3. 설정 및 유지 관리의 용이성

이 요소는 첫 번째 항목인 팀과 관련이 있습니다. 현재 팀에 새 버전 관리 시스템을 구현하고 유지 관리할 시간과 전문성 등 총체적 여력이 갖춰져 있나요? 얼마나 빠르게 구현할 수 있나요? 시스템 설치 후에도 지속적으로 운영을 지원할 수 있나요?

설정하기 쉬워야 더 빨리 사용할 수 있다는 사실을 기억하세요. 시스템을 시기적절하게 도입하면 팀에서는 더 여유를 가지고 변화에 대응하고 작업을 보다 효율적으로 시작할 수 있습니다. 설정과 유지 관리의 기술적인 측면이 걱정이라면, 고려 중인 패키지의 고객 성공률을 평가해 보세요. 먼저 리뷰를 읽어보면 목적에 가장 적합한 시스템을 결정하는 데 도움이 됩니다.

4. 워크플로

팀에서 일상적으로 사용하는 프로세스와 툴을 고려하는 것도 중요합니다. 다른 필수 도구와 원활하게 통합되는 버전 관리 시스템을 선택하면 구현 속도가 빨라지고 중단이 최소화됩니다.

워크플로 관련하여 고려해 볼 만한 또 다른 요소로는 버전 관리 시스템의 브랜칭 지원 여부가 있습니다. 브랜칭이란 특정 프로젝트 파일 세트에서 추가 또는 변경되는 사항을 메인 프로젝트 브랜치, 즉 '트렁크'로부터 분리하는 경우를 말합니다. 이렇게 하면 메인 브랜치에 영향을 주지 않고 변경 사항을 테스트할 수 있습니다. 새로운 변경 사항은 평가를 거쳐 안정성을 검증한 후 메인 브랜치에 병합하면 됩니다.

게임을 개발하는 동안, 수많은 브랜치를 지원하고 이를 신속하게 만들어야 합니다. 디렉토리 기반 시스템에서는 브랜칭이 부적절하게 이루어지고 병합 충돌이 자주 일어나 메인 브랜치에 다시 병합하는 데 어려움을 겪을 수 있습니다. 

브랜칭을 통해 프로젝트 안정성에 우선순위를 둘 수 있으므로 팀원들은 다른 작업에 영향을 주지 않으면서 공동의 목표를 향해 계속 나아갈 수 있습니다.

Plastic window

5. 시스템 구현 타이밍

버전 관리 시스템을 구현하면 힘든 적응 과정을 거치게 됩니다. 결과적으로 이러한 변경을 통해 기존 워크플로와 툴을 완전히 정비할 수 있습니다. 

버전 관리 시스템의 구현 시점을 전략적으로 결정하면 기존 프로젝트에 미치는 영향을 줄이고 새 시스템의 도입 속도를 높일 수 있습니다. 따라서, 선택한 버전 관리 시스템을 새 프로젝트 시작 시 또는 막 출시한 제품의 사후 관리 단계에 구현하는 것이 이상적입니다.

물론 계획과 달리 상황이 흘러가서 프로젝트 중간에 새로운 버전 관리 시스템으로 마이그레이션해야 할 수도 있습니다. 이상적인 상황은 아니지만, 불가능한 일은 아닙니다.

아래에서 Unity Collaborate 프로젝트를 Plastic SCM으로 마이그레이션하는 방법에 대해 자세히 알아보세요.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

6. 지출 및 절감 항목

버전 관리 시스템은 비교적 경제적인 DevOps 툴에 속하며, 실제 비용은 구현 시에 발생합니다. 이 사실을 염두에 두고 시스템의 이점을 알아보고, 결과적으로 비용 절감에 어떻게 도움이 될지 평가해 보세요.

기술적 배경에 관계없이 팀 전체가 쉽게 액세스할 수 있는 제품을 선택하는 것도 좋습니다. 앞서 언급했듯이, 모든 구성원이 자율적으로 기여할 수 있는 기회가 주어져야 합니다. 팀원들의 요구 사항이 충족되지 않을 경우 생각하지 못했던 복병이 나타날 수 있습니다.

예를 들어 사용하기 어려운 버전 관리 시스템이라면 사용 방법을 교육하고 버전 관리 베스트 프랙티스에 관한 내부 문서를 꼼꼼하게 작성하느라 더 많은 시간을 할애해야 할 수도 있습니다. 또한 팀원들이 독립적으로 일할 수 없다면 내부적으로 불만이 생길 수도 있습니다. 무엇을 선택하든 절대 팀의 효율적인 협업을 방해하면 안 됩니다.

7. 보안 요구 사항

버전 관리는 게임 소스 코드 관리 이상의 기능이 있습니다. 선택하는 시스템에는 비즈니스 문서와 절차 문서, 디자인 파일, 툴 구성 등 다른 에셋도 저장됩니다.

이러한 파일을 안전하게 유지하려면 시스템이 여러 수준의 보호와 권한을 제공해야 합니다. 이를 통해 코드와 IP 에셋을 외부의 침입으로부터 안전하게 보호하고, 내부 유출 가능성도 차단할 수 있습니다.

8. 유연성 수준

팀의 규모는 어느 정도인가요? 사무실에 모여 일하나요, 아니면 각자 업무 장소가 다른가요? 이와 같은 요소에 따라 버전 관리 시스템에 필요한 유연성의 수준이 달라집니다. 이외에도 중앙 집중식, 분산식 또는 멀티사이트 워크플로 중 어떤 것을 선택할지 결정해야 합니다. 각 워크플로의 이점을 살펴보겠습니다.

중앙 집중식 워크플로

중앙 집중식 워크플로는 체크인/푸시 워크플로를 사용해 메인 서버에 연결합니다. 변경 사항이 있을 때마다 저장소에 새 버전으로 저장됩니다. 이렇게 하면 저장소를 여러 머신에 복제하지 않고도 강력한 브랜칭 및 병합을 활용할 수 있습니다. 이는 간단하면서도 안전한 솔루션입니다.

분산식 워크플로

분산식 워크플로를 사용하면 메인 서버에 연결하지 않고도 원하는 시간에 체크인, 브랜칭, 병합을 수행할 수 있습니다. 이 경우 팀원들이 원격으로 신속하게 일할 수 있으며 느린 네트워크나 VPN을 걱정할 필요가 없다는 장점이 있습니다.

멀티사이트 워크플로 

멀티사이트는 중앙 집중식 워크플로와 분산식 워크플로를 혼합한 것과 같습니다. 저마다의 위치에서 팀원들은 일종의 소규모 형태의 중앙화된 워크플로로 작업하며, 여기에서 브랜치와 진행 상황을 공유하여 팀원 간에 손쉽게 병합하고 조율한 다음, 각자 원하는 시간에 메인 서버에 최종적으로 푸시할 수 있습니다.

멀티사이트 워크플로는 여러 도시 또는 국가에서 코드베이스를 공유하여 작업하는 팀에 적합합니다. 이 상황에서는 각 작업 사이트에 호스트 서버를 구성한 다음 서버 간에 변경 사항을 복사해야 합니다. 그렇지 않으면 서버가 없는 사이트에서 작업하는 팀은 다른 팀보다 느린 응답을 받게 됩니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

주요 버전 관리 시스템

지금까지 버전 관리 시스템을 선택할 때 유의해야 할 점을 살펴보았습니다. 이제 몇 가지 주요 시스템을 평가해 보겠습니다.

Git

무료이며 사용하기 쉬운 오픈 소스인 Git은 가장 인기 있는 버전 관리 시스템에 속합니다. 분산된 리포와 강력한 브랜칭 및 병합 기능을 갖추고 있지만, 대용량 바이너리 파일을 시중의 다른 솔루션만큼 효과적으로 처리하지는 못합니다.

Perforce(Helix Core)

Helix Core는 EA나 Ubisoft와 같은 게임 스튜디오에서 사용하는 엔터프라이즈급 버전 관리 시스템입니다. 이 시스템은 중앙화된 리포를 갖추고 있으며 대용량 바이너리 파일을 처리합니다. 하지만 시각화된 리포를 갖추고 있지 않으므로, 기술적 배경이 없는 개발자가 사용하기에는 까다로울 수 있습니다.

Apache Subversion

Git과 마찬가지로 Apache Subversion은 무료 오픈 소스 버전 관리 시스템입니다. 중앙화된 리포를 갖추고 있고 대용량 바이너리 파일을 처리할 수 있지만, 메인 서버에 연결해야 사용할 수 있으므로 오프라인으로 작업하기에는 적합하지 않으며, 대규모 팀이나 분산되어 있는 팀에는 적합하지 않을 수 있습니다.

Plastic SCM

Plastic SCM은 프로그래머와 아티스트 모두를 지원하는 유연한 버전 관리 시스템입니다. 대규모 리포와 바이너리 파일을 처리하는 데 탁월하며, 파일 및 변경 세트 기반 솔루션이므로 프로젝트 빌드 전체가 아닌 작업 중인 특정 파일만 다운로드할 수 있습니다.

게다가 Plastic SCM은 시중에서 시각화된 브랜칭을 갖춘 유일한 버전 관리 시스템입니다. 수천 개의 브랜치를 한 번에 처리할 수 있으며 중앙 집중식 워크플로와 분산식 워크플로 중에 선택하지 않아도 됩니다.

Unity가 제공하는 기능을 더 알고 싶으신가요? Unity 솔루션을 확인하여 개발 과정에서 생긴 문제를 해결해보세요.

다루는 주제