3. 대규모 모바일 게임 프로젝트
삼국지를 품다(2012)
http://3p.nexon.com/
개발기간 : 3년
개발인원 : 100여명
개발비용 : 약 150억원
플랫폼 : Web, Android, iOS
영웅의 군단(2014)
http://yg.nexon.com/
개발기간 : 4년
개발인원 : 100여명
개발비용 : 미공개
플랫폼 : Android, iOS(개발중)
3
6. 대규모 프로젝트에서 중요한 요소
개발단계의
{협업 성능}
{Collaboration Performance}
대규모 프로젝트에서는 개발 단계의 협업 성능을 챙겨야 한다!
6
7. 다음과 같이 이야기하고자 합니다.
Collaboration Performance 구현
개발자를 위한 개발 – UnityEditor, Editor, EditorWindow, EditorLayout 활용
플러그인 어셋 활용 – AssetStore, 외부 개발자와의 Collaboration
버전 컨트롤 시스템 – Unity AssetServer & 버전컨트롤 활용 TIP
빌드 자동화 – Unity BatchMode & CC.NET & TIP
패치 자동화 – 누구든, 쉽고 빠르게 패치하게 하자. & TIP
#맺음 : 왜 Collaboration Performance 인가? – 개똥철학
7
12. Collaboration Performance-1
개발자를 위한 개발
개발 단계 성능 최적화 게임 성능 최적화 만큼 중요
사례 : <삼품>개발초기, DB & 웹툴 기반 데이터 편집 개발
• 데이터 병합/버전관리 문제를 해결하기 위한 시도.
Export
6분!
2초!
메모리 이해 필요!
StringBuilder로 해결
• 편집하기 쉽도록 TEXT 형식 사용
• 엑셀을 활용하여 편집할 수 있도록
DB & 웹툴 대체
12
13. Collaboration Performance-1
개발자를 위한 개발
개발 단계에서 동료들을 관찰하자
툴에 대한 다른 시각 - 아티스트/레벨 디자이너
바쁜 일정 - 개발 단계 개선 피드백 가뭄
필요한 건 - 찾아가는 서비스.
개발자를 위한 개발에도 – 성능 관점 필수!
13
14. Collaboration Performance-1
개발자를 위한 개발
개발도구의 지속적인 개선
개발도구도 지속적으로 업그레이드 – “되니까~” 라는 생각 버리기
재사용 및 유지보수 인계(협업) 등을 위해서 리팩토링 작업 필요 : 대규모 프로젝트 특성
14
16. Collaboration Performance-2
외부 플러그인 어셋 활용
# 모든 것을 직접 구현해야하는가?! – No~!
개발자들에게 전문화된 도구를 제공
AssetStore 의 전문화된 다양한 외부 어셋들을 활용
필요에 따라 커스터마이징하여 사용
T4M uSequencer 2DToolkit Code Guard EZGUI FAST
Shadows
FX Maker NGUI Prime31 iTween HoTween
16
18. Collaboration Performance-3
버전 컨트롤 시스템
# 대규모 프로젝트, 산소같은 존재
• 무조건 중요!
• 많은 인원이 공동 작업 – 많은 용량의 데이터!
• 영군/삼품의 총 저장소 사용량 : 약 350 GB
사용중인 버전 컨트롤 시스템
Subversion – 소스, 최종 리소스
Unity AssetServer – 중간 리소스 (아티스트 사용)
18
20. Collaboration Performance-3
버전 컨트롤 시스템
AssetServer 단점
좀 느리다… 좀 많이 느리다…
• 최초 HEAD 업데이트에 하루 종일
• 원인 불명으로 비정상적 현상 종종 발생
부가적인 기능이 부족 (SVN과 비교)
• 동기화 이슈 발생 시 어려움
유지 보수 종료
20
21. Collaboration Performance-3
버전 컨트롤 시스템
다른 버전 컨트롤 시스템 지원 (Unity 4.3 부터)
Plastic SCM
• 장점
– 간단한 조작성
– 직관적인 시각화
• 단점 (대규모 프로젝트에서의 단점)
– 4GB 이상 지원 불가 문제
– 한글 주석 불가
Perforce
• 장점
– 빠른 속도 (Perforce 자체 Client 인 경우)
– 4GB 이상 지원
• 단점 (대규모 프로젝트에서의 단점)
– 유니티 상에서 느림 (유니티 문제인가?)
– 한글 파일이 있는 경우 Lock 현상
21
22. Collaboration Performance-3
버전 컨트롤 시스템
AssetServer 를 Subversion(이하SVN) 으로 대체 중…
왜?
• 현재 사용중인 시스템
– 지원 비용 측면
• SVN 의 확장성/안정성
• 버전 컨트롤 통일성 유지
22
23. Collaboration Performance-3
버전 컨트롤 시스템
TIP : 유니티에서 SVN 을 제대로 사용하기
Version Control > Mode > Meta Files 로 설정
Asset Serialization > Mode > Visible Force Text 로 설정
SVN 의 <pre-commit hook> 을 구현하자 : Meta File 커밋 관리
“대응하는 메타파일이
같이 커밋되지 않았습니다!”
“다음 메타파일은 저장소에
추가될 필요가 없습니다!”
23
24. Collaboration Performance-3
버전 컨트롤 시스템
꾸준한 버전 컨트롤 개선 연구
보다 진보된 버전 컨트롤 시스템
DVCS(distributed version control systems) – 적용 연구 진행중
새 버전 컨트롤 시스템
Education
Migration
Setup
24
26. Collaboration Performance-4
빌드 자동화
# 왜 필요한가?
• 빌드Tasks x 구성요소 x 플랫폼 x 개발자수 x 배포 단계
• x Source (Resource) 업데이트 수 대규모 프로젝트 : 컨텐츠 규모
• 협업 지연 발생 요소 증가
• ex) (전체요소)빌드Tasks M 분 x N 명 x I 회 업데이트 = NIM !!!!
DEPLO
Y
BUILD
SOURCE
UPDATE Server
Client
Resource
프로그래머
레벨
디자이너
아티스트 테스터
26
27. Collaboration Performance-4
빌드 자동화
# 빠르고 정확하게 - 빌드 서버에게!
• 빌드 결과물이 배포될 동안, 더 생산적인 일을 하자
• 자동화 시, 예외 처리는 매우 중요
Build
Server
DEPLO
Y
BUILD
SOURCE
UPDATE
27
No
LostTime!
28. Collaboration Performance-4
빌드 자동화
Unity.exe Batch Mode ★ ★ ★
활용 유형
.APK / .IPA 빌드
Assetbundle 변환 빌드 – 유니티 캐싱 사용을 위한 데이터 형식
AssetServer 로 부터 업데이트 – 속도개선 테스트 연구중
https://docs.unity3d.com/Documentation/Manual/CommandLineArguments.html
28
29. Collaboration Performance-4
빌드 자동화
Unity.exe Batch Mode TIP ★ ★ ★
1) 빌드 서버 필수 옵션
: -nographics
2) Unity.exe 프로세스 중복 실행
: -logfile
3) BatchMode 코드 작성시, 실행 실패 처리
: EditorApplication.Exit(에러레벨)
4) Windows 에서 iPhone 플랫폼 빌드하기
: x-code 빌드를 iOS 에 맡긴다
29
34. Collaboration Performance-4
빌드 자동화
# CC.NET –모든 자동화 통합 관리
장점1 : DEBUG / RELEASE & WIN32 / WIN64 / …ETC 일괄 빌드 테스트
장점2 : 공통 라이브러리의 적용 상태 판단
빌드 문제 발생 여부 빠르게 진단
Project-A
Project-B
Project-C
Library
Update
Project-A 에 필요하여, Library 를
수정했는데, B-C에 영향이 있는가?34
38. 외부망
Collaboration Performance-5
패치 자동화
# 패치 공정 자세히 보기
Client
소스업데이트
Client
빌드
Server
소스업데이트
Client
빌드
변경된
리소스 추출
리소스
변환/검사
패치목록
생성
USB으로 복사
(내부망)
USB에서 복사
(외부망)
Client/리소스
업로드
IDC
보안 접속
Server/리소스
복사
서버
내리기
새로운 서버
올리기
38
언제 끝나…?