Unity Package Manager 아직 안써봤어?
안녕하세요. 저는 기술지원팀에서 클라이언트 개발을 하고 있는 김태환입니다. 주로 각 스튜디오가 사용하는 공통 모듈을 개발하고, 기술을 R&D 하며 사내에 공유하여 쿡앱스 전체의 기술적 성장을 만들어가고 있습니다.
Unity Package Manager 기능이 필수인 이유
Unity Package Manager (UPM)은 프로젝트에 필요한 기능들을 모듈단위로 분리해 기능을 제작하고 GUI 형태로 편리하게 다운로드해 사용할 수 있는 Unity 기능입니다. 캐주얼 게임을 주로 제작하고 있는 쿡앱스에서는 빠르고 안정적인 개발을 위해 꼭 필요한 기능이에요.
기술지원팀에서는 게임에 공통적으로 필요한 기능들을 UPM을 통해 모듈화하고, 각 스튜디오에 배포해 개발을 지원해 드리고 있습니다. 팀에서 구축한 registry 서버에 Github Action을 연동하고 최신 버전을 업데이트하고 있습니다. 자동화를 통해 배포된 모듈은 Asset Store처럼 스튜디오에서 자유롭게 다운받아 사용하는 형식이죠.
사용하게 된 배경
사실 제작 스튜디오에서 게임 제작과 기술 R&D를 동시에 진행하기는 어렵습니다. 캐주얼 게임 시장의 빠른 변화에 따라 민첩한 게임 개발을 지향하고 있는 쿡앱스에서는 더욱 어렵게 느껴지기도 하죠. 예전부터 제작 스튜디오에서 사용해 보려는 시도가 있었지만, 그때는 프로젝트 제작에 바쁘다 보니 UPM 사용법만 R&D를 진행하고 시간과 여력이 없어 쓸쓸히 방치되어 있었습니다..
하지만 올해 초 기술지원팀이 신설되며 앞으로 더욱 높은 퀄리티의 게임 제작과 함께 게임 개발자들이 게임 제작에만 온전히 집중할 수 있는 환경을 만들고자 공통 모듈 배포 목적으로 UPM을 사용해 보기로 했어요.
UPM 도입은 생각보다 어려웠어요.
UPM을 도입할 당시 사내에서는 조금 더 유연한 개발을 위해 gitlab과 Jenkins를 대대적으로 github과 github Actions로 변경하고 있었습니다. 이에 맞춰 UPM의 모듈을 저장할 registry 서버를 Github Packages로 결정했지만 아쉽게도 결과는 실패였어요. 이유는 Github Packages는 UPM과 json 사용 문법이 달랐고 Unity가 공식적으로 github Packages도 지원하지 않기 때문이에요. 어떻게 연동까지는 할 수 있었지만, 결정적인 문제는 UPM에서 모듈이 표시되지 않았습니다. 이 뜻은 곧 UPM으로 편하게 모듈을 설치하던 방식을 커맨드 라인을 통해 설치해야 함을 뜻합니다. 이것은 우리가 원하던 바가 아니었죠.
그래서 github Packages를 포기하고 verdaccio라는 조금 더 가벼운 registry 서버를 사용하기로 했습니다. verdaccio는 Node.js를 경량화한 서버입니다. verdaccio를 로컬 머신에 구축하고 이곳을 UPM의 registry 서버로 사용하기 시작했습니다. 이후 현재는 Docker 이미지를 이용해 AWS 인스턴스 위에 컨테이너를 띄워서 사용하고 있습니다. 추후에 Kubernetes 기반으로 인프라를 구축했을 때 이를 잘 활용하기 위함이에요.
UPM 자동화
UPM은 개발자들이 모듈을 편하게 사용하기 위한 방법입니다. 하지만 모듈을 제공하는 입장에서는 설정값을 개발자가 손수 작성해야 하는 문제 때문에 번거롭거나 휴먼 오류의 소지가 있습니다. 모듈을 제작하는 과정에서는 Unity 자체에서 명시한 폴더 구조와 정해진 파일 포맷이 필요합니다. 그리고 이와 별개로 모듈을 설명하기 위한 도큐먼트 파일도 필요합니다. 매번 모듈을 생성할 때마다 폴더와 파일을 만들고, 도큐먼트에 필요한 파일들을 보관하는 작업은 매우 귀찮을 수밖에 없습니다. 그리고 조금만 다르게 생성해도 다른 작업자가 보기 어렵겠죠. github에는 template을 이용해 repository를 생성할 수 있습니다. 그래서 template을 만들어두고 모듈 제작에 꼭 필요한 파일들을 폴더 구조에 맞춰 구성해놓습니다. 그리고 신규 모듈 제작을 할 땐 꼭 해당 template을 사용합니다.
이후 모듈 제작이 완료되면 Pull Request (PR)를 통해 온라인 코드리뷰를 진행합니다.
🔥쿡앱스 코드 리뷰가 궁금하시다면?🔥
github Actions 자동화 덕분에 아래 항목들을 자동으로 진행할 수 있어요.
package.json의 시맨틱 버전 관리
모듈 간 dependency 관리
registry에 퍼블리싱
UnitTest
git merge
document 퍼블리싱
코드 리뷰가 완료되면 개발 브랜치에 병합이 됩니다. 그리고 github Actions를 실행하면 main 브랜치에 병합되어 tag가 생성됩니다. DocFX를 통해 Document가 생성되고 브라우저에서도 편하게 확인할 수 있습니다.
공통 모듈 개발은 필수적이기 때문에 앞으로 계속해서 늘어날 예정입니다. 추후에는 모듈들의 기능을 종합해 프레임워크 제작을 목표로 하고 있습니다. 프레임워크가 만들어진다면 모든 프로젝트의 구조를 동일하게 가져갈 수 있고, 개발자 간 코드 파악이나 전환 비용이 굉장히 절감됩니다. 물론 안정성 이슈도 개선할 수 있죠. 이러한 관리 및 사용성 측면에서 UPM을 사용해 모듈을 효율적으로 관리하는 것을 추천드려요!