업계: 게임 개발

사용한 JetBrains 제품: TeamCity

조직 규모: 500-1000

Gearbox가 TeamCity를 사용하여 CI/CD 프로세스를 간소화하는 방법

Gearbox Entertainment Company는 수상 경력에 빛나는 인터랙티브 엔터테인먼트 회사이자 텍사스주 프리스코에 기반을 두고 성장 중인 트랜스미디어 기업입니다. 지난 30년 동안 Gearbox Entertainment는 Borderlands 게임 시리즈를 비롯해 비디오 게임 역사상 가장 기념비적이고 상징적인 프랜차이즈, 캐릭터 및 경험을 개발하고 출시했습니다.

회사 정보

Gearbox는 달라스 인근 텍사스주 프리스코에 본사를 둔 미국 비디오 게임 회사입니다. 1999년에 설립된 Gearbox는 Half-Life, Brothers in Arms, Borderlands 등 역사상 가장 상징적인 비디오 게임을 제작했습니다.

Gearbox의 수석 릴리스 엔지니어인 Steve Fortier와 선임 릴리스 엔지니어인 Phillip Peterson과 마주 앉아 회사에서 JetBrains TeamCity를 도입하여 CI/CD 프로세스를 표준화하고 개선할 수 있는 방법에 대해 이야기했습니다.

팀 정보

Steve와 Phillip은 Gearbox 핵심 릴리스 엔지니어링 팀의 일원입니다. 이 팀은 퀘벡 시티, 몬트리올, 프리스코에 분산되어 있으며 회사의 모든 프로젝트를 처리하고 각 프로젝트의 요구 사항이 충족되도록 자동화를 수립하는 임무를 맡고 있습니다. 새 프로젝트가 시작될 때마다 팀은 즉시 Perforce에 디포를 마련하고 TeamCity에 연결 프로젝트가 생성되도록 합니다.

프로젝트마다 한 명씩 전담시키는 것이 팀의 의도입니다. 각각의 릴리스 엔지니어는 릴리스 팀원이면서 게임 프로젝트도 함께 맡습니다. 이를 통해 팀은 자동화 측면에서 각 프로젝트의 요구에 즉각적으로 대응할 수 있습니다.

또한 릴리스 엔지니어가 TeamCity 모범 사례에 대한 지식을 공유하고 다른 프로젝트에 도움이 필요한 경우 바로 참여할 수 있습니다. 표준화된 CI/CD 방식과 재사용 가능한 프로젝트 템플릿 덕분에 모든 문제에 신속하게 대응할 수 있습니다.

Gearbox의 기술 스택

팀은 버전 관리 시스템으로 Perforce를 사용하고 게임 엔진으로 Unreal을 사용합니다. 이들은 Unreal를 기반으로 하고 TeamCity가 상호 작용하는 C# 스크립트를 작성했습니다. 이 레이어는 전체 CI에 범용적이어서 Unity 및 Unreal 프로젝트와 함께 작동할 수 있습니다.

또한 팀은 Artifactory를 통한 빌드 시스템과 스토리지에 AWS를 사용하며, 여기에 TeamCity JFrog 플러그인을 이용합니다.


팀이 새로운 CI/CD 솔루션을 찾기로 결정한 이유

Gearbox가 사용했던 이전 CI/CD 솔루션에는 몇 가지 제한이 있었습니다. 즉, 솔루션이 Perforce와 제대로 통합되지 않았습니다. 또한, 이 CI/CD 도구는 TeamCity에서 사용할 수 있는 개별 빌드를 제공하지 않았고 빌드 단계 간에 정보를 전달하기가 어려웠습니다.

“오랫동안 사내에서 사용하던 제품이 있었습니다. 다른 경쟁사 제품으로 바꾸려고 했지만 어느 것도 효과적이지 못했습니다. 그러던 차에 다른 게임 회사에서 일했던 동료 직원 몇 명이 "저희는 TeamCity라는 걸 사용했거든요"라고 말하더군요. 그래서 이 제품을 살펴보게 되었고 TeamCity가 많은 문제를 해결해준다는 사실을 알게 되었습니다.”

— Phillip Peterson, 선임 릴리스 엔지니어

TeamCity로 빌드 단계를 간단히 연결

Gearbox가 이용하던 경쟁사 제품에서는 두 빌드 단계를 서로 연결하는 프로세스가 상당히 번거로웠습니다. 예를 들어, 아티팩트를 생성하는 하나의 빌드 단계가 있고 이 아티팩트의 이름을 후속 작업에 전달해야 하는 경우가 있습니다. 두 빌드 단계가 서로 소통하게 만드는 데 상당한 애로가 있었습니다. 이와 달리 TeamCity에서는 이 과정이 매우 간단하게 해결되는 것 같았습니다.

팀이 어려움을 겪던 또 다른 문제는 빌드 단계 간에 빌드 결과를 전달하는 것이었는데, TeamCity는 종속성을 통해 이 문제를 해결해주었습니다.


새로운 CI/CD 솔루션의 선택 기준

프로젝트 전체에 변경 사항 일괄 적용

새로운 CI/CD 솔루션에서 팀은 크게 두 가지를 얻고자 했습니다. 하나는 프로젝트 전체에 변경 사항을 일괄적으로 쉽게 적용할 수 있는 기능입니다. 이전에는 각 프로젝트를 처음부터 시작해야 했습니다. 프로젝트 수가 늘어남에 따라 팀은 프로젝트 설정을 복사하여 붙여 넣고 이름을 변경하고 프로젝트를 실행하기 위한 템플릿의 필요성을 느끼기 시작했습니다.

친근한 UI

두 번째 요구 사항은 최종 사용자와 관리자가 새로운 CI/CD 도구를 쉽게 사용할 수 있도록 해주는 친근한 UI였습니다.

"경쟁사 제품의 UI는 사용하기가 매우 불편했습니다. 훌륭한 CI/CD 시스템을 접할 때 사람들이 갖는 느낌은 매우 다부지고 어떤 작업도 든든하게 처리해줄 것이라는 믿음입니다. 매우 잘 짜여지고 세련된 UI를 가지고 있는 TeamCity는 바로 그러한 신뢰를 줍니다."

— Steve Fortier, 수석 릴리스 엔지니어

TeamCity UI의 예
TeamCity UI의 예

TeamCity의 세련된 UI는 새로운 솔루션에 대한 거부감을 없애주었습니다. 팀이 이 개념의 효과를 입증하면서 사람들에게 새 CI/CD 솔루션을 보여주고 전환하도록 설득하기가 너무나 쉬웠습니다.

액세스 관리

Gearbox가 새로운 CI/CD 솔루션을 선택한 또 다른 요인은 액세스 관리와 이 관리 기능이 TeamCity에서 작동하는 방식 때문이었습니다. 팀은 프로젝트별로 사용자 액세스를 변경할 방법을 찾고 있었습니다.

TeamCity에서는 프로젝트에 대한 액세스 권한을 부여하고 그 하위에 있는 모든 프로젝트에 액세스할 수 있도록 하는 계층 구조를 만들 수 있습니다. 이것은 Gearbox에 큰 변화를 가져왔습니다.

TeamCity를 Cloud와 On-Premises 중에서 선택

TeamCity에 대해 처음 알게 되었을 때 팀은 On-Premises 버전으로 시작하려고 했습니다. 하지만 TeamCity Cloud 옵션을 이용하면 Gearbox IT 부서에서 인증을 설정하는 것 말고는 특별히 할 것이 없다는 사실을 알게 되면서 생각이 바뀌었습니다. 또한 On-Premises에 구축할 때 예상되는 시간보다 전환도 훨씬 빨랐습니다.

TeamCity Cloud 사용자는 JetBrains 호스팅 및 자체 호스팅 빌드 에이전트 중에서 선택할 수 있습니다. Gearbox 팀은 자체 호스팅 에이전트를 활용하여 빌드를 실행하는 환경을 완벽하게 맞춤화할 수 있습니다.

자체 호스팅 에이전트가 포함된 TeamCity Cloud
자체 호스팅 에이전트가 포함된 TeamCity Cloud

전환 과정

TeamCity로 전환하면서 팀은 모든 프로젝트를 처음부터 준비하기 시작했습니다. 하지만 이전 빌드 스크립트를 의도적으로 CI 시스템에 범용적으로 만들었기 때문에 큰 문제가 되지 않았습니다. 즉, TeamCity에 다수의 새 프로젝트를 설정해야 했지만, 기본적으로 이전 시스템에서 기존 명령을 복사하여 붙여 넣는 작업에 지나지 않았습니다.

프로젝트 구성 방법을 논의하기 위한 몇 차례의 워크숍을 가진 후, 팀은 단 6주 만에 이전 CI 솔루션에서 TeamCity로 전환할 수 있었습니다.


CI/CD 메트릭

현재, Gearbox는 TeamCity Cloud에서 340개의 커미터와 138개의 프로젝트를 운영 중입니다.

팀은 자체 AWS 계정에서 호스팅되는 에이전트를 사용합니다. 이와 함께 TeamCity의 클라우드 프로파일도 사용합니다. 빌드의 요구 사항에 따라 TeamCity는 'base', 'high', 'high' 또는 'GPU' 인스턴스 중에서 팀이 사용할 인스턴스를 자동으로 선택합니다.

전환 기간 동안 Gearbox는 이전 CI/CD 솔루션에서 사용 중이던 Amazon Machine Image(AMI)를 가져오고 여기에 TeamCity를 나란히 설치했습니다. 이러한 방법으로 이전 시스템과 새 시스템 모두에서 동일한 AMI를 사용하여 단일 AMI를 유지 관리하기만 하면 됩니다. 이 덕분에 마이그레이션이 훨씬 쉬워졌습니다.


TeamCity의 빌드 체인

Gearbox는 CI/CD 프로세스 전체에서 빌드 체인을 광범위하게 사용합니다. Unreal 프로세스는 컴파일링, 쿠킹, 스테이징, 패키징 및 퍼블리싱의 5단계를 거칩니다.

Gearbox 빌드 체인의 예
Gearbox 빌드 체인의 예

게임을 12시간 이내에 출시할 예정이고 이 체인의 어딘가에서 볼륨이 꽉 차서 프로세스가 중단된다면, 볼륨을 확장하고 다시 시작하는 것은 불가능합니다. 그럴 시간적 여유가 없기 때문입니다.

TeamCity의 도움으로 Gearbox 팀은 모든 부분을 해당 고유 빌드로 나눌 수 있어, 볼륨이 다 채워지고 빌드 프로세스 중에 확장이 필요해 빌드가 실패하는 경우에도 문제를 빠르게 해결할 수 있습니다. 중단된 부분부터 프로세스를 다시 시작하여 영구 볼륨을 다시 마운팅한 다음 여기서부터 작업을 이어갈 수 있습니다. 이는 TeamCity에서 기본 제공하는 빌드 체인 최적화 기능 덕분이며 스냅샷 종속성을 채택할 때 빌드를 재사용할 수 있는 기능도 도움이 되었습니다.

Gearbox의 테스트 프로세스: 동적 오케스트레이션을 통해 로컬에서 중앙 집중식으로 이동

Gearbox에서 개발자가 로컬 테스트를 실행하면 TeamCity는 전체 테스트를 중앙에서 실행하면서 훨씬 더 많은 작업을 수행할 수 있습니다. CI/CD 시스템은 또한 다양한 유형의 시스템에서 이러한 테스트 실행을 동적으로 조율하여, 해당 순간에 필요한 만큼의 시스템을 가동하고 이후에는 종료하여 리소스를 최적화할 수 있습니다.


Gearbox에서 프로젝트 설정과 리소스 공유를 간소화하는 데 도움을 준 TeamCity

간편한 지식 공유

Gearbox가 TeamCity 덕에 해결할 수 있었던 가장 과제 중 하나는 새 프로젝트를 시작하는 것이었습니다. 대체 제품의 경우, 모든 프로젝트를 처음부터 준비해야 했습니다. 시간이 지남에 따라 프로젝트가 증가하면서 프로젝트가 서로 차이를 보였고, 결국 프로젝트당 해당 분야의 전문가가 한 명씩 필요한 상황에 이르렀습니다. 이로 인해 팀 간에 지식을 공유하기 어려워 개발 프로세스에 병목 현상이 발생하고 오류와 불일치의 위험이 증가했습니다.

생산성 향상

TeamCity를 CI/CD 솔루션으로 채택한 후에는 작업이 훨씬 쉬워졌습니다. 템플릿을 사용하면서 프로젝트 간에 리소스를 공유할 수 있게 되었습니다. 하나의 프로젝트에 익숙해지면 모든 프로젝트에 익숙해집니다. 이를 통해 팀은 생산성을 높이고 효율적인 개발에 더 매진할 수 있었습니다.

EC2 인스턴스 측면에서 상당한 절감 실현

Gearbox의 이전 CI 솔루션에서는 각 빌드가 에디터를 빌드하는데, 여기에 최대 1시간이 소요되기도 했습니다. 이제 팀은 이 단계를 해당 고유 빌드로 만든 다음 모든 곳에서 재사용할 수 있습니다. 덕분에 동일한 내용을 여러 번 컴파일링할 필요가 없기 때문에 EC2 인스턴스 측면에서 상당한 절감 효과를 거두었습니다.

Gearbox에서 코드로 구성

Gearbox가 프로젝트 구성에 Kotlin을 사용하기 시작했을 때 팀은 놀라움을 감출 수 없었습니다. Kotlin 경험이 거의 없는 사람들도 기대 이상으로 빠르게 이해하고 사용하기 시작했기 때문입니다. "배우는 데 시간이 걸리기는 했지만 전반적인 분위기는 긍정적이었습니다"라고 Steve Fortier는 말했습니다.

현재, 한 프로젝트에서 어떤 한 부분을 변경해야 할 때 팀은 UI를 사용합니다. 하지만 특정 빌드 구성이 여러 프로젝트에서 작동하는 방식을 변경해야 하는 경우에는 Kotlin을 사용합니다. 이런 이원적 접근 방식으로 프로젝트를 유연하게 구성할 수 있다는 점도 Gearbox가 TeamCity에 주목한 이유였습니다.


Gearbox의 향후 계획

Gearbox는 개별 빌드를 구현하여 커밋에 대한 신뢰도를 높이고 QA 테스트를 위한 작업 빌드를 제공하는 식으로 TeamCity 사용을 확대하려는 목표를 가지고 있습니다. 팀은 또한 빌드 속도를 개선하고 빌드 체인을 단축하며 오류를 최소화하기 위한 노력도 기울이고 있습니다.

현재는 서버 성능, 빌드 기간 및 빌드 실패를 추적하고 있지만, 앞으로는 아티팩트 크기 및 대기열 기간 등의 더 세분화된 메트릭도 포함할 계획입니다. 팀은 TeamCity의 다양한 맞춤형 기능을 활용하여 시간을 절약하고 빌드의 안정성을 보장하는 더 효율적인 CI 프로세스를 구축하는 데 목표를 두고 있습니다.


결론

TeamCity Cloud로 전환하면서 Gearbox의 CI/CD 방식이 여러 모로 개선되었습니다.

  • 채택이 수월하여 팀은 단 6주 만에 이전 CI 솔루션에서 TeamCity로 마이그레이션할 수 있었습니다.
  • TeamCity에서 기본 제공하는 Perforce 통합 기능 덕분에 팀은 전체 CI/CD 프로세스를 간소화하고, 통합 방법을 찾는 데 소요되었을 시간을 절약할 수 있었습니다.
  • TeamCity의 프로젝트 템플릿 기능을 통해 이제 팀은 표준화된 방식으로 훨씬 더 빠르고 적은 노력으로 새 프로젝트를 시작할 수 있습니다.
  • TeamCity의 클라우드 솔루션과 친근한 UI 덕분에 팀이 프로젝트를 유지 관리하기가 이전보다 훨씬 쉬워졌습니다.

또한 Gearbox는 TeamCity의 도움으로 EC2 인스턴스 측면에서 상당한 절감 효과를 거둘 수 있었습니다. 종속성을 사용할 수 있어 동일한 항목을 여러 번 컴파일링할 필요가 없기 때문입니다.

유사한 고객 후기

Playrix

Yuri Trufanov, 기술 플랫폼 부서 기술 전무이사

저희는 TeamCity Cloud Profiles와 AWS를 포함하는 하이브리드 클라우드 솔루션을 사용하기로 했습니다. 더불어 빌드 에이전트용으로 온프레미스 컴퓨터도 사용했습니다. 이러한 조합으로 하루에 몇 개의 빌드든 수용할 수 있었고, 업무 외 시간에도 기본적인 수의 에이전트를 이용할 수 있었습니다. 그리고 덕분에 원하는 곳에서 원하는 작업을 언제든지 실행할 수 있습니다.

Picnic

Ivan Babiankou, Picnic 스태프 소프트웨어 엔지니어

모든 CI 사용 사례를 위한 관리형 솔루션이 필요했습니다. 그 외에 어떤 소프트웨어를 실행하는지, 정확히 어떤 도구가 사용되는지 관리할 자체 호스팅 에이전트도 필요했습니다. 자체 호스팅 에이전트가 포함된 TeamCity Cloud는 300명 이상의 엔지니어로 구성된 팀이 즐겁게 사용하면서 생산성을 한 단계 끌어올리는 맞춤형 솔루션을 제공했습니다.

Brightify

Tadeas Kriz, Brightify CTO 겸 공동 설립자

코드 검토가 크게 개선되었으며, TeamCity에서 Space의 웹훅을 활용하여 검토한 각 브랜치를 빌드하고 이를 QA에 배포하여 브랜치를 병합하기 전에 테스트할 수 있습니다. 이제 누가 사무실에 없는지 추적하기도 더 쉬워졌습니다.

고객 후기 더보기