당신의 유니티 앱이 무거운 진짜 이유: UPM 패키지 최적화 완벽 가이드 (빌드 용량 20MB 줄이기)

도입: "분명 간단한 앱인데, 왜 이렇게 용량이 크지?"

Unity로 간단한 2D 정보 앱이나 캐주얼 게임을 만들고 첫 빌드를 했을 때, 생각보다 큰 앱 용량에 당황한 경험이 있으신가요? 코드는 몇 줄 없고, 사용한 이미지 리소스도 얼마 없는데 안드로이드 기준 30MB를 훌쩍 넘는 빌드 파일(.apk)을 보며 의문이 들었을 겁니다. 그 원인은 바로 우리가 무심코 지나쳤던 **UPM(Unity Package Manager)**에 숨어있을 가능성이 큽니다.
이 글에서는 Unity 프로젝트의 빌드 용량을 결정하는 핵심 요소인 UPM의 패키지들을 이해하고, 불필요한 기능들을 덜어내어 프로젝트를 가볍게 만드는 '프로젝트 다이어트' 방법을 A부터 Z까지 알려드립니다. 이 가이드만 따라오시면, 최소 15MB에서 30MB 이상의 빌드 용량을 확실하게 줄일 수 있습니다.
UPM의 두 얼굴: 빌트인(Built-in)과 레지스트리(Registry)
UPM은 Unity 에디터의 기능을 확장하는 모든 '부품(패키지)'들을 관리하는 창고입니다. 이 창고는 두 종류의 선반으로 나뉘어 있습니다.

- 빌트인(Built-in) 패키지 📦: Unity 에디터를 설치할 때부터 내장되어 있는 기본 기능들입니다. 주방에 비유하자면, 처음부터 구비된 소금, 설탕, 밀가루 같은 기본 재료와 같습니다. VR, 차량 물리, 타일맵 등 강력하지만 모든 프로젝트에 필요하지는 않은 기능들이 여기에 포함됩니다.
- 유니티 레지스트리(Unity Registry) ☁️: Unity가 공식적으로 제공하는 '온라인 카탈로그' 입니다. Cinemachine, Post-Processing, ProBuilder처럼 필요할 때마다 우리가 직접 '주문(설치)'해서 사용하는 기능들이죠.

이 모든 패키지 정보는 프로젝트 폴더 안의 Packages/manifest.json 파일에 기록됩니다. 즉, 어떤 패키지를 사용하고 있는지는 프로젝트별로 완벽하게 독립적으로 관리됩니다. A 프로젝트에서 VR 패키지를 삭제했다고 해서 B 프로젝트에 영향을 주지 않는다는 의미입니다.
가장 큰 오해: "그냥 using만 안 하면 되는 거 아닌가요?"

많은 개발자들이 "내 코드에서 특정 기능을 using으로 불러오지만 않으면, 빌드할 때 알아서 빠지겠지"라고 생각합니다. 이는 절반만 맞는 이야기이며, 용량 최적화에 있어 가장 큰 함정입니다.
집을 짓는 것에 비유해 봅시다. 설계도에 '수영장'이 포함되어 있다면, 당신이 실제로 수영장을 사용하든 안 하든 집을 지을 때 수영장은 만들어집니다. 당연히 집의 크기와 건축 비용(앱 용량)은 늘어납니다.
- 패키지를 삭제하는 것: 설계도에서 '수영장' 옵션을 완전히 지워버리는 행위입니다.
- using을 안 하는 것: 이미 만들어진 수영장을 "나는 안 써야지"라고 다짐하는 것에 불과합니다.
Unity의 빌드 과정에는 '코드 스트리핑(Code Stripping)'이라는 기술이 포함되어 있어, 사용되지 않는 C# 코드를 일부 제거해 줍니다. 하지만 패키지에는 C# 코드뿐만 아니라, 스트리핑이 어려운 네이티브 코드(C++) 라이브러리와 각종 리소스가 포함되어 있습니다. 이 부분들은 패키지를 직접 삭제하지 않는 이상 빌드에 포함될 가능성이 높습니다. 따라서 확실한 용량 감소를 위해서는 반드시 UPM에서 패키지를 직접 제거해야 합니다.
실전! 내 프로젝트 다이어트 시키기

이제 이론을 알았으니, 직접 프로젝트의 군살을 빼봅시다. '인터넷 연결 없는 2D 정보 제공 앱'을 만든다고 가정해 보겠습니다.
- 프로젝트 목적 정의: 내 프로젝트는 3D, 물리, VR, 비디오, 인터넷 기능이 전혀 필요 없습니다. 오직 2D UI가 전부입니다.
- UPM 실행: Unity 에디터 상단 메뉴에서 Window > Package Manager를 엽니다.
- 불필요한 패키지 삭제: Packages: In Project 리스트를 확인하고, 아래 패키지들을 과감히 'Remove' 버튼을 눌러 삭제합니다.
- 삭제 대상 1순위 (3D/특수 기능):
- XR, VR: VR/AR 관련 모든 기능. 모바일 빌드에서 가장 큰 용량을 차지합니다.
- Vehicles: 자동차 물리 기능.
- Umbra: 3D 그래픽 최적화 기능.
- Wind: 3D 바람 효과.
- 삭제 대상 2순위 (앱 기능에 따라):
- Video: 동영상 재생 기능.
- Unity Analytics: 사용자 데이터 분석 기능.
- Unity Web Request 관련 모듈: 인터넷 통신 기능.
- Tilemap: 2D 타일맵 게임 제작 기능.
- 삭제 대상 1순위 (3D/특수 기능):
- 필수 패키지 확인: 2D 정보 앱이라면 UI 패키지는 반드시 남겨두어야 합니다.
이처럼 프로젝트를 시작할 때, 가장 먼저 UPM을 열어 필요한 최소한의 기능만 남기고 모두 정리하는 습관을 들이는 것이 좋습니다.
그래서 얼마나 줄어드나요?

Unity 6 버전으로 안드로이드 빌드를 가정했을 때, 최소 구성과 모든 빌트인 패키지를 포함한 빌드의 용량 차이는 약 15MB에서 30MB 이상입니다. 특히 XR/VR 관련 네이티브 라이브러리가 차지하는 비중이 매우 큽니다. 모바일 게임 시장에서 15MB는 사용자의 다운로드를 결정짓는 중요한 차이를 만듭니다.
결론: 똑똑한 패키지 관리가 곧 최적화의 핵심
빌드 용량 최적화는 어려운 셰이더 코드나 복잡한 알고리즘 수정에서만 이루어지는 것이 아닙니다. 이처럼 프로젝트의 기본 설계도인 UPM을 깔끔하게 정리하는 것만으로도 눈에 띄는 효과를 볼 수 있습니다.
지금 바로 여러분의 Unity 프로젝트를 열고, 잠자고 있던 불필요한 패키지들을 정리해 보세요. 훨씬 가볍고 빨라진 프로젝트를 만나게 될 것입니다.
