게임 애셋 스트리밍 패치

Seungjae Lee
Seungjae LeeTechnical Director at Nexon
게임 애셋 스트리밍 패치
㈜넥슨
프론티어팀
이승재
발표자
이승재
프로그래머
카바티나 스토리
데스크탑 히어로즈
게임 애셋
game asset
게임에 들어가는 그래픽, 사운드, 음악, 텍스트 등 유저에게 보여지는 것들
http://gamemook.com/entry/게임용어-asset
일단 데이터 파일 정도의 의미로…
스트리밍 패치
“필수적인 애셋 다 받았으면
빨리 게임 시작하자”
나머지는 필요할 때 받고
WoW: 대격변에서 이미 사용
접근성이 좋아야 하니까
설치 용량 10MB 안 넘게 합시다
헉
그래서 했습니다
사실 저는 원래 패치에 별로 관심이 없었어요.
넥슨패처 쓰면 되니까.. 넥슨패처 좋잖아요.
기존 온라인 게임 패치
1. 모든 파일이 최신일까?
아니라면 패처 실행
2. 패처가 모든 파일을 최신 버전으로 맞추고
3. 다시 게임 실행
패처 옵션으로 ‘마지막으로 패치
되는 파일’ 따위를 설정할 수 있으
면 그 파일에서 버전을 읽어서, 서
버가 제공해주는 버전과 비교하
면 간단
스트리밍 패치
작동에 필요한 최소한의 파일을 우선 받는다
무슨 파일이 필요할지 어떻게 알지?
게임클라이언트가 패처 기능을 포함
게임 도중에도 다운로드 작업 필요
목록을 사람 힘으로 만들지는 말자;;;
어떻게 (1)
<스테이지 시작 전에, 지금 필요하고
최신 버전을 갖고 있지 않은 파일들을
미리 다운로드한다>
이 파일이 최신 버전인가?
• 패치 준비 단계에서 모든 파일을 요약
• 이름, 크기, CRC, svn 리비전
…
herocar.psd.data 15253 8b4999b8 4477
herocar.wsj 7142 8ecccbfb 4880
hidden_cannon.wsj 3152 221b695c 4117
hit.psd.data 15260 dad0af08 2879
hit.wsj 3292 c1030c3d 4836
hit01_effect.wsj 4571 330df761 4915
Hit_Arrow.wav 40322 e5782685 4717
hit_blood_00.wsj 4725 54d99432 6236
hit_blood_00_전연령.wsj 4859 0750b701 6342
Hit_Both.wav 37400 29d0ca43 4717
Hit_Claw.wav 22572 809f00a8 4717
Hit_Claw_2.wav 39696 d60a02a1 4717
Hit_Hammer_1.wav 13898 92be7f88 5044
Hit_Hammer_2.wav 13812 b81b8942 5044
hit_lightning.wsj 2780 33145aad 4729
Hit_Normal_1.wav 10694 5efd41cc 4717
Hit_Normal_2.wav 19376 8c26fd15 4717
Hit_Normal_3.wav 13906 a77f4b30 4717
hit_slash_00.wsj 1471 01d49c41 4849
hit_slash_01.wsj 1464 7ecae13c 4849
hit_slash_02.wsj 1475 188aeb09 4849
Hit_Wet_1.wav 27760 f2c492e7 4717
Hit_Wrench_1.wav 22118 726af8f2 5044
Hit_Wrench_2.wav 24512 8e2a5576 5044
Home-Default.dhmb 1173 63cccdf0 7324
Home-Default.luab 221 ef6ff272 5483
home_bg.psd.data 462976 db2d4059 4568
…
목록 파일 (수십KB)
버전 파일 (수십B)
모든 파일 (수십MB)
http://deskhz.dn...
44748
a418672e
7472
파일 최신 버전 알아내기
클라이언트 뜰 때 버전 파일을 받는다
목록 파일이 없거나 변경되었는가?
• 목록 파일을 갱신하고,
• 모든 파일들의 크기, CRC, 리비전을 검토
• 달라진 게 있으면 삭제한다
• 이제부터는 파일이 없으면 받으면 됨!
어떻게 (2)
<스테이지 시작 전에, 지금 필요하고
최신 버전을 갖고 있지 않은 파일들을
미리 다운로드한다>
“그냥 그때그때 받으면 안됨?”
로딩은 기다릴 수 있지만
플레이 도중에 멈추는 것은 좀…
지금 필요한 파일
A. 항상 필요한 파일
특정 확장자 (exe, dll, lua, ui)
별도의 목록 (Seed.lua) 에 있는 파일
B. 지금 시작할 스테이지 파일
0001-Town1.map / lua
C. 지금 필요한 파일들이 의존하는 파일
애셋 의존성의 예
스테이지 파일
배경 그림
스테이지에 나올
몬스터
몬스터
애니메이션
몬스터 그림
몬스터 이펙트
애니메이션
BGM
몬스터 이펙트
그림
몬스터 이펙트
사운드
의존성 검사
“이 파일은 어떤 다른 파일들을 필요로 하는가”
애셋 종류별로 의존성 검사 코드 필요
의존성 검사
말이 쉽지…
• 게임의 다른 부분과 심하게 얽히는 경향
모든 애셋 포맷을 ‘알아야’ 하니까…
• 지속적으로 비용이 발생한다
못하겠어요ㅠㅠ 는 아니고 아 귀찮아ㅡㅡ 정도
어떻게 (3)
<스테이지 시작 전에, 지금 필요하고
최신 버전을 갖고 있지 않은 파일들을
미리 다운로드한다>
다운로드
<메인 스레드>
필요한 파일 이름을
큐에 넣는다
다운로드 작업이 모두 끝날
때까지 기다린다
<다운로드 스레드> (x1~10)
큐에서 파일 이름을 꺼낸다
다운로드한다
추가 의존성이 발견되면
그것도 큐에 넣는다
기타 이슈
• 개발용 버전
• 가상 파일 시스템
• 실행 파일 교체
• 예외 상황 대응
• 플레이어 아바타
• 안 쓰는 애셋 찾기
개발용 버전
스트리밍 패치 쓰지 않습니다 당연히..
• 똑같은 인터페이스를 가진 다른 클래스 사용
의존성 검사 부분에서 실수하면,
• 개발 버전에선 잘 작동
• 릴리스 버전에서 파일 없다고 죽는다!
디버깅하기 훨씬 귀찮다
개발용 버전
실수하는 케이스:
• ‘항상 필요한 파일’ 목록에 안 넣고,
파일 이름 직접 써서 애셋 로드
• 애셋 종류 추가하거나 포맷 바꿨는데
의존성 검사 코드 수정 안 함
해결책:
• 준비 안 된 파일 읽으려 하면
개발용 버전에서도 인위적으로 오류 나게 함
실행 파일 교체
별도의 exe를 추가로 포함
DesktopHeroes.exe.patch
→ DesktopHeroes.exe
지금은 그냥 넥슨패처 씁니다.
넥슨닷컴에 붙이려다 보니…
가상 파일 시스템
단일 서브시스템으론 가장 까다로웠던 부분
• 임의 파일 추가/삭제가 빠를 것
• 여러 스레드에서 동시 읽고 쓰기 가능할 것
• 온갖 실패 상황에 대해 견고하게 동작할 것
저널링, Heap 메모리처럼 관리, Overlapped I/O 사용
예외 상황 대응
스트리밍패치도 결국은 패치
넥슨패처보다 불안정 N년간 온갖 상황을 겪으며 단련되었을 테니…
‘이럴 리 없는데’ 싶은 덤프 보고가 자꾸 들어옴
계속 수정 중
플레이어 아바타
언제 나올지 예측 불가
• 필요할 때 요청하고 완료될 때까지 기다릴 수 없다
• 지금은 모든 아바타를 ‘항상 필요한 파일’ 에 넣고 있음
평범하게 백그라운드 로딩하면 됨
• 일단 더미 그림 올려 놓고 받아지면 교체하기
보너스
의존성 검사 코드를 활용해서
• 어떤 애셋을 어떤 애셋이 참조하는지
• 안 쓰는 애셋은 무엇인지
찾는 툴을 쉽게 만들었음
결론
접근성 향상
CDN 비용 절감
어렵지 않아요!
데스크탑 히어로즈 현재 서비스 중
Q / A
1 of 35

Recommended

Python과 Git으로 만드는 모바일 게임 패치 시스템 by
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Youngtaek Oh
15.8K views73 slides
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference by
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
18.7K views54 slides
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기 by
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기Kiyoung Moon
13.4K views37 slides
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 by
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 [ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 Jungsoo Lee
18.3K views177 slides
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오... by
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
4.4K views44 slides
쿠키런 1년, 서버개발 분투기 by
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
109.6K views43 slides

More Related Content

What's hot

이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019 by
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019devCAT Studio, NEXON
7K views46 slides
게임제작개론 : #4 게임 밸런싱 by
게임제작개론 : #4 게임 밸런싱게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱Seungmo Koo
28.2K views34 slides
게임제작개론 : #8 게임 제작 프로세스 by
게임제작개론 : #8 게임 제작 프로세스게임제작개론 : #8 게임 제작 프로세스
게임제작개론 : #8 게임 제작 프로세스Seungmo Koo
38.8K views33 slides
프로그래머에게 사랑받는 게임 기획서 작성법 by
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법Lee Sangkyoon (Kay)
133.7K views93 slides
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발 by
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발주항 박
12.1K views82 slides
그럴듯한 랜덤 생성 컨텐츠 만들기 by
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기Yongha Kim
16.9K views66 slides

What's hot(20)

이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019 by devCAT Studio, NEXON
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
게임제작개론 : #4 게임 밸런싱 by Seungmo Koo
게임제작개론 : #4 게임 밸런싱게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱
Seungmo Koo28.2K views
게임제작개론 : #8 게임 제작 프로세스 by Seungmo Koo
게임제작개론 : #8 게임 제작 프로세스게임제작개론 : #8 게임 제작 프로세스
게임제작개론 : #8 게임 제작 프로세스
Seungmo Koo38.8K views
프로그래머에게 사랑받는 게임 기획서 작성법 by Lee Sangkyoon (Kay)
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법
Lee Sangkyoon (Kay)133.7K views
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발 by 주항 박
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
주항 박12.1K views
그럴듯한 랜덤 생성 컨텐츠 만들기 by Yongha Kim
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim16.9K views
행동 기반 게임오브젝트 by kgun86
행동 기반 게임오브젝트행동 기반 게임오브젝트
행동 기반 게임오브젝트
kgun865K views
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기 by Yongha Kim
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim8K views
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버 by Heungsub Lee
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Heungsub Lee50.2K views
[NDC 2009] 행동 트리로 구현하는 인공지능 by Yongha Kim
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
Yongha Kim28.2K views
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3 by Heungsub Lee
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee13.5K views
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012 by devCAT Studio, NEXON
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
마비노기듀얼 이야기-넥슨 김동건 by 강 민우
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
강 민우2K views
임태현, 게임 서버 디자인 가이드, NDC2013 by devCAT Studio, NEXON
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON20.1K views
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기 by MinGeun Park
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
MinGeun Park14.2K views
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012 by devCAT Studio, NEXON
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
devCAT Studio, NEXON16.1K views
게임 기획 튜토리얼 (2015 개정판) by Lee Sangkyoon (Kay)
게임 기획 튜토리얼 (2015 개정판)게임 기획 튜토리얼 (2015 개정판)
게임 기획 튜토리얼 (2015 개정판)
Lee Sangkyoon (Kay)162.5K views
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막) by Heungsub Lee
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
Heungsub Lee43.7K views
테라로 살펴본 MMORPG의 논타겟팅 시스템 by QooJuice
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice3.3K views
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver) by Seungmo Koo
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
Seungmo Koo33.2K views

Viewers also liked

Power insti.jpg by
Power insti.jpgPower insti.jpg
Power insti.jpgJennifer Cortacans Martin
158 views9 slides
Blistt Travel by
Blistt TravelBlistt Travel
Blistt TravelDavid F. Hartmann
566 views16 slides
Blistt travel by
Blistt travelBlistt travel
Blistt travelDavid F. Hartmann
234 views16 slides
Cat personalizacion choco concept by
Cat personalizacion choco conceptCat personalizacion choco concept
Cat personalizacion choco conceptChocoConcept
308 views47 slides
Background หลากสี by
Background หลากสีBackground หลากสี
Background หลากสีIvIy Alice
329 views3 slides
http://Chiropractor.inadrianmichigan.com by
http://Chiropractor.inadrianmichigan.comhttp://Chiropractor.inadrianmichigan.com
http://Chiropractor.inadrianmichigan.comChiropractor in Adrian Michigan
245 views12 slides

Viewers also liked(20)

Cat personalizacion choco concept by ChocoConcept
Cat personalizacion choco conceptCat personalizacion choco concept
Cat personalizacion choco concept
ChocoConcept308 views
Background หลากสี by IvIy Alice
Background หลากสีBackground หลากสี
Background หลากสี
IvIy Alice329 views
ม้วนขอบภาพให้โค้งงอ by IvIy Alice
ม้วนขอบภาพให้โค้งงอม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอ
IvIy Alice517 views
ดอล์ล่าถูกเผา by IvIy Alice
ดอล์ล่าถูกเผาดอล์ล่าถูกเผา
ดอล์ล่าถูกเผา
IvIy Alice349 views
Le marche zurich by HOREQUIP
Le marche zurichLe marche zurich
Le marche zurich
HOREQUIP367 views
ปรับภาพให้สว่างใสด้วย Level by IvIy Alice
ปรับภาพให้สว่างใสด้วย Levelปรับภาพให้สว่างใสด้วย Level
ปรับภาพให้สว่างใสด้วย Level
IvIy Alice1K views
การกำหนดโทนสีของภาพ Hue saturation by IvIy Alice
การกำหนดโทนสีของภาพ Hue saturationการกำหนดโทนสีของภาพ Hue saturation
การกำหนดโทนสีของภาพ Hue saturation
IvIy Alice300 views
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT... by Walaa Samra
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...
Walaa Samra657 views
Substans presentation 30.9.2011 by Jeanette Harf
Substans presentation 30.9.2011Substans presentation 30.9.2011
Substans presentation 30.9.2011
Jeanette Harf334 views
Lalit’s case study by Lalit Pandey
Lalit’s case studyLalit’s case study
Lalit’s case study
Lalit Pandey368 views
การซูมภาพ เพื่อเน้นจุดสนใจ by IvIy Alice
การซูมภาพ เพื่อเน้นจุดสนใจการซูมภาพ เพื่อเน้นจุดสนใจ
การซูมภาพ เพื่อเน้นจุดสนใจ
IvIy Alice326 views
อาทิตย์อัสดง by IvIy Alice
อาทิตย์อัสดงอาทิตย์อัสดง
อาทิตย์อัสดง
IvIy Alice492 views

Similar to 게임 애셋 스트리밍 패치

Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기 by
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Joongi Kim
12.4K views18 slides
빌드관리 및 디버깅 (2010년 자료) by
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
1.1K views34 slides
[232] 성능어디까지쥐어짜봤니 송태웅 by
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
18.2K views140 slides
What is Game Server ? by
What is Game Server ?What is Game Server ?
What is Game Server ?흥배 최
669 views26 slides
레가시 프로젝트의 빌드 자동화 by
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
3.6K views66 slides
개발사는 모르는 퍼블리셔의 뒷 이야기 by
개발사는 모르는 퍼블리셔의 뒷 이야기개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기David Kim
1.5K views77 slides

Similar to 게임 애셋 스트리밍 패치(20)

Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기 by Joongi Kim
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Joongi Kim12.4K views
빌드관리 및 디버깅 (2010년 자료) by YEONG-CHEON YOU
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU1.1K views
[232] 성능어디까지쥐어짜봤니 송태웅 by NAVER D2
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
NAVER D218.2K views
What is Game Server ? by 흥배 최
What is Game Server ?What is Game Server ?
What is Game Server ?
흥배 최669 views
레가시 프로젝트의 빌드 자동화 by Jaehoon Choi
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
Jaehoon Choi3.6K views
개발사는 모르는 퍼블리셔의 뒷 이야기 by David Kim
개발사는 모르는 퍼블리셔의 뒷 이야기개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기
David Kim1.5K views
(111217) #fitalk rootkit tools and debugger by INSIGHT FORENSIC
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debugger
INSIGHT FORENSIC50 views
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal by OnGameServer
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
OnGameServer2.2K views
[231]나는서버를썰터이니너는개발만하여라 양지욱 by NAVER D2
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
NAVER D23.5K views
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기 by Chanwoong Kim
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
Chanwoong Kim2.5K views
도커없이 컨테이너 만들기 1편 by Sam Kim
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
Sam Kim1.8K views
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화 by Jaeseung Ha
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
Jaeseung Ha13.9K views
한국에서 제일 쉬운 centos7 설치 튜토리얼 by ChoDae
한국에서 제일 쉬운 centos7 설치 튜토리얼한국에서 제일 쉬운 centos7 설치 튜토리얼
한국에서 제일 쉬운 centos7 설치 튜토리얼
ChoDae1.1K views
JetsonTX2 Python by taeseon ryu
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
taeseon ryu13 views
게임 개발자를 위한 Vba 활용 by Woonbong Kim
게임 개발자를 위한 Vba 활용게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용
Woonbong Kim1K views
리멤버 데스크톱 앱 개발기 by Tom Kim
리멤버 데스크톱 앱 개발기리멤버 데스크톱 앱 개발기
리멤버 데스크톱 앱 개발기
Tom Kim3.4K views
JVM_트러블슈팅.pdf by kwbak
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
kwbak50 views

Recently uploaded

컴포넌트 설계 by
컴포넌트 설계컴포넌트 설계
컴포넌트 설계Wonjun Hwang
8 views21 slides
Exploring Deep Learning Acceleration Technology Embedded in LLMs by
Exploring Deep Learning Acceleration Technology Embedded in LLMsExploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMsTae Young Lee
26 views53 slides
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기 by
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기Jinkyoung Kim
46 views139 slides
CES 처음 가는 분을 위한 가이드 by
CES 처음 가는 분을 위한 가이드CES 처음 가는 분을 위한 가이드
CES 처음 가는 분을 위한 가이드Minsuk Lee
650 views31 slides
성능 테스트 by
성능 테스트성능 테스트
성능 테스트Wonjun Hwang
8 views13 slides
AD의 TAD와 협업.pptx by
AD의 TAD와 협업.pptxAD의 TAD와 협업.pptx
AD의 TAD와 협업.pptxVisual Tech Dev
50 views24 slides

Recently uploaded(7)

Exploring Deep Learning Acceleration Technology Embedded in LLMs by Tae Young Lee
Exploring Deep Learning Acceleration Technology Embedded in LLMsExploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMs
Tae Young Lee26 views
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기 by Jinkyoung Kim
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
Jinkyoung Kim46 views
CES 처음 가는 분을 위한 가이드 by Minsuk Lee
CES 처음 가는 분을 위한 가이드CES 처음 가는 분을 위한 가이드
CES 처음 가는 분을 위한 가이드
Minsuk Lee650 views
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략 by Open Source Consulting
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략

게임 애셋 스트리밍 패치

  • 1. 게임 애셋 스트리밍 패치 ㈜넥슨 프론티어팀 이승재
  • 3. 게임 애셋 game asset 게임에 들어가는 그래픽, 사운드, 음악, 텍스트 등 유저에게 보여지는 것들 http://gamemook.com/entry/게임용어-asset 일단 데이터 파일 정도의 의미로…
  • 4. 스트리밍 패치 “필수적인 애셋 다 받았으면 빨리 게임 시작하자” 나머지는 필요할 때 받고
  • 6. 접근성이 좋아야 하니까 설치 용량 10MB 안 넘게 합시다 헉
  • 7. 그래서 했습니다 사실 저는 원래 패치에 별로 관심이 없었어요. 넥슨패처 쓰면 되니까.. 넥슨패처 좋잖아요.
  • 8. 기존 온라인 게임 패치 1. 모든 파일이 최신일까? 아니라면 패처 실행 2. 패처가 모든 파일을 최신 버전으로 맞추고 3. 다시 게임 실행 패처 옵션으로 ‘마지막으로 패치 되는 파일’ 따위를 설정할 수 있으 면 그 파일에서 버전을 읽어서, 서 버가 제공해주는 버전과 비교하 면 간단
  • 9. 스트리밍 패치 작동에 필요한 최소한의 파일을 우선 받는다 무슨 파일이 필요할지 어떻게 알지? 게임클라이언트가 패처 기능을 포함 게임 도중에도 다운로드 작업 필요 목록을 사람 힘으로 만들지는 말자;;;
  • 10. 어떻게 (1) <스테이지 시작 전에, 지금 필요하고 최신 버전을 갖고 있지 않은 파일들을 미리 다운로드한다>
  • 11. 이 파일이 최신 버전인가? • 패치 준비 단계에서 모든 파일을 요약 • 이름, 크기, CRC, svn 리비전
  • 12. … herocar.psd.data 15253 8b4999b8 4477 herocar.wsj 7142 8ecccbfb 4880 hidden_cannon.wsj 3152 221b695c 4117 hit.psd.data 15260 dad0af08 2879 hit.wsj 3292 c1030c3d 4836 hit01_effect.wsj 4571 330df761 4915 Hit_Arrow.wav 40322 e5782685 4717 hit_blood_00.wsj 4725 54d99432 6236 hit_blood_00_전연령.wsj 4859 0750b701 6342 Hit_Both.wav 37400 29d0ca43 4717 Hit_Claw.wav 22572 809f00a8 4717 Hit_Claw_2.wav 39696 d60a02a1 4717 Hit_Hammer_1.wav 13898 92be7f88 5044 Hit_Hammer_2.wav 13812 b81b8942 5044 hit_lightning.wsj 2780 33145aad 4729 Hit_Normal_1.wav 10694 5efd41cc 4717 Hit_Normal_2.wav 19376 8c26fd15 4717 Hit_Normal_3.wav 13906 a77f4b30 4717 hit_slash_00.wsj 1471 01d49c41 4849 hit_slash_01.wsj 1464 7ecae13c 4849 hit_slash_02.wsj 1475 188aeb09 4849 Hit_Wet_1.wav 27760 f2c492e7 4717 Hit_Wrench_1.wav 22118 726af8f2 5044 Hit_Wrench_2.wav 24512 8e2a5576 5044 Home-Default.dhmb 1173 63cccdf0 7324 Home-Default.luab 221 ef6ff272 5483 home_bg.psd.data 462976 db2d4059 4568 … 목록 파일 (수십KB) 버전 파일 (수십B) 모든 파일 (수십MB) http://deskhz.dn... 44748 a418672e 7472
  • 13. 파일 최신 버전 알아내기 클라이언트 뜰 때 버전 파일을 받는다 목록 파일이 없거나 변경되었는가? • 목록 파일을 갱신하고, • 모든 파일들의 크기, CRC, 리비전을 검토 • 달라진 게 있으면 삭제한다 • 이제부터는 파일이 없으면 받으면 됨!
  • 14. 어떻게 (2) <스테이지 시작 전에, 지금 필요하고 최신 버전을 갖고 있지 않은 파일들을 미리 다운로드한다>
  • 16. 로딩은 기다릴 수 있지만 플레이 도중에 멈추는 것은 좀…
  • 17. 지금 필요한 파일 A. 항상 필요한 파일 특정 확장자 (exe, dll, lua, ui) 별도의 목록 (Seed.lua) 에 있는 파일 B. 지금 시작할 스테이지 파일 0001-Town1.map / lua C. 지금 필요한 파일들이 의존하는 파일
  • 18. 애셋 의존성의 예 스테이지 파일 배경 그림 스테이지에 나올 몬스터 몬스터 애니메이션 몬스터 그림 몬스터 이펙트 애니메이션 BGM 몬스터 이펙트 그림 몬스터 이펙트 사운드
  • 19. 의존성 검사 “이 파일은 어떤 다른 파일들을 필요로 하는가” 애셋 종류별로 의존성 검사 코드 필요
  • 20. 의존성 검사 말이 쉽지… • 게임의 다른 부분과 심하게 얽히는 경향 모든 애셋 포맷을 ‘알아야’ 하니까… • 지속적으로 비용이 발생한다 못하겠어요ㅠㅠ 는 아니고 아 귀찮아ㅡㅡ 정도
  • 21. 어떻게 (3) <스테이지 시작 전에, 지금 필요하고 최신 버전을 갖고 있지 않은 파일들을 미리 다운로드한다>
  • 22. 다운로드 <메인 스레드> 필요한 파일 이름을 큐에 넣는다 다운로드 작업이 모두 끝날 때까지 기다린다 <다운로드 스레드> (x1~10) 큐에서 파일 이름을 꺼낸다 다운로드한다 추가 의존성이 발견되면 그것도 큐에 넣는다
  • 23. 기타 이슈 • 개발용 버전 • 가상 파일 시스템 • 실행 파일 교체 • 예외 상황 대응 • 플레이어 아바타 • 안 쓰는 애셋 찾기
  • 24. 개발용 버전 스트리밍 패치 쓰지 않습니다 당연히.. • 똑같은 인터페이스를 가진 다른 클래스 사용 의존성 검사 부분에서 실수하면, • 개발 버전에선 잘 작동 • 릴리스 버전에서 파일 없다고 죽는다! 디버깅하기 훨씬 귀찮다
  • 25. 개발용 버전 실수하는 케이스: • ‘항상 필요한 파일’ 목록에 안 넣고, 파일 이름 직접 써서 애셋 로드 • 애셋 종류 추가하거나 포맷 바꿨는데 의존성 검사 코드 수정 안 함 해결책: • 준비 안 된 파일 읽으려 하면 개발용 버전에서도 인위적으로 오류 나게 함
  • 26. 실행 파일 교체 별도의 exe를 추가로 포함 DesktopHeroes.exe.patch → DesktopHeroes.exe 지금은 그냥 넥슨패처 씁니다. 넥슨닷컴에 붙이려다 보니…
  • 27. 가상 파일 시스템 단일 서브시스템으론 가장 까다로웠던 부분 • 임의 파일 추가/삭제가 빠를 것 • 여러 스레드에서 동시 읽고 쓰기 가능할 것 • 온갖 실패 상황에 대해 견고하게 동작할 것 저널링, Heap 메모리처럼 관리, Overlapped I/O 사용
  • 28. 예외 상황 대응 스트리밍패치도 결국은 패치 넥슨패처보다 불안정 N년간 온갖 상황을 겪으며 단련되었을 테니… ‘이럴 리 없는데’ 싶은 덤프 보고가 자꾸 들어옴 계속 수정 중
  • 29. 플레이어 아바타 언제 나올지 예측 불가 • 필요할 때 요청하고 완료될 때까지 기다릴 수 없다 • 지금은 모든 아바타를 ‘항상 필요한 파일’ 에 넣고 있음 평범하게 백그라운드 로딩하면 됨 • 일단 더미 그림 올려 놓고 받아지면 교체하기
  • 30. 보너스 의존성 검사 코드를 활용해서 • 어떤 애셋을 어떤 애셋이 참조하는지 • 안 쓰는 애셋은 무엇인지 찾는 툴을 쉽게 만들었음
  • 35. Q / A