SlideShare a Scribd company logo
게임 애셋 스트리밍 패치
㈜넥슨
프론티어팀
이승재
발표자
이승재
프로그래머
카바티나 스토리
데스크탑 히어로즈
게임 애셋
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

More Related Content

What's hot

Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Amazon Web Services Korea
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
Seungmo Koo
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
YEONG-CHEON YOU
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice
 
NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할
Hoyoung Choi
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
Heungsub Lee
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
승명 양
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
Seungmo Koo
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
iFunFactory Inc.
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
NAVER D2
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
Hyunjik Bae
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
Hyunjik Bae
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
Chris Ohk
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 

What's hot (20)

Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
 

Viewers also liked

Blistt Travel
Blistt TravelBlistt Travel
Blistt Travel
David F. Hartmann
 
Cat personalizacion choco concept
Cat personalizacion choco conceptCat personalizacion choco concept
Cat personalizacion choco concept
ChocoConcept
 
Background หลากสี
Background หลากสีBackground หลากสี
Background หลากสีIvIy Alice
 
http://Chiropractor.inadrianmichigan.com
http://Chiropractor.inadrianmichigan.comhttp://Chiropractor.inadrianmichigan.com
http://Chiropractor.inadrianmichigan.com
Chiropractor in Adrian Michigan
 
ม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอIvIy Alice
 
ดอล์ล่าถูกเผา
ดอล์ล่าถูกเผาดอล์ล่าถูกเผา
ดอล์ล่าถูกเผาIvIy Alice
 
Le marche zurich
Le marche zurichLe marche zurich
Le marche zurich
HOREQUIP
 
ปรับภาพให้สว่างใสด้วย Level
ปรับภาพให้สว่างใสด้วย Levelปรับภาพให้สว่างใสด้วย Level
ปรับภาพให้สว่างใสด้วย LevelIvIy Alice
 
การกำหนดโทนสีของภาพ Hue saturation
การกำหนดโทนสีของภาพ Hue saturationการกำหนดโทนสีของภาพ Hue saturation
การกำหนดโทนสีของภาพ Hue saturationIvIy Alice
 
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...
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...Walaa Samra
 
Substans presentation 30.9.2011
Substans presentation 30.9.2011Substans presentation 30.9.2011
Substans presentation 30.9.2011Jeanette Harf
 
Lalit’s case study
Lalit’s case studyLalit’s case study
Lalit’s case studyLalit Pandey
 
การซูมภาพ เพื่อเน้นจุดสนใจ
การซูมภาพ เพื่อเน้นจุดสนใจการซูมภาพ เพื่อเน้นจุดสนใจ
การซูมภาพ เพื่อเน้นจุดสนใจIvIy Alice
 
อาทิตย์อัสดง
อาทิตย์อัสดงอาทิตย์อัสดง
อาทิตย์อัสดงIvIy Alice
 
Local chiropractor clinic
Local chiropractor clinicLocal chiropractor clinic
Local chiropractor clinic
Chiropractor in Adrian Michigan
 

Viewers also liked (20)

Power insti.jpg
Power insti.jpgPower insti.jpg
Power insti.jpg
 
Blistt Travel
Blistt TravelBlistt Travel
Blistt Travel
 
Blistt travel
Blistt travelBlistt travel
Blistt travel
 
Cat personalizacion choco concept
Cat personalizacion choco conceptCat personalizacion choco concept
Cat personalizacion choco concept
 
Background หลากสี
Background หลากสีBackground หลากสี
Background หลากสี
 
http://Chiropractor.inadrianmichigan.com
http://Chiropractor.inadrianmichigan.comhttp://Chiropractor.inadrianmichigan.com
http://Chiropractor.inadrianmichigan.com
 
ม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอ
 
ดอล์ล่าถูกเผา
ดอล์ล่าถูกเผาดอล์ล่าถูกเผา
ดอล์ล่าถูกเผา
 
Le marche zurich
Le marche zurichLe marche zurich
Le marche zurich
 
Logo web
Logo webLogo web
Logo web
 
ปรับภาพให้สว่างใสด้วย Level
ปรับภาพให้สว่างใสด้วย Levelปรับภาพให้สว่างใสด้วย Level
ปรับภาพให้สว่างใสด้วย Level
 
การกำหนดโทนสีของภาพ Hue saturation
การกำหนดโทนสีของภาพ Hue saturationการกำหนดโทนสีของภาพ Hue saturation
การกำหนดโทนสีของภาพ Hue saturation
 
Sunvencions(1)
Sunvencions(1)Sunvencions(1)
Sunvencions(1)
 
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...
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...
 
Substans presentation 30.9.2011
Substans presentation 30.9.2011Substans presentation 30.9.2011
Substans presentation 30.9.2011
 
Lalit’s case study
Lalit’s case studyLalit’s case study
Lalit’s case study
 
การซูมภาพ เพื่อเน้นจุดสนใจ
การซูมภาพ เพื่อเน้นจุดสนใจการซูมภาพ เพื่อเน้นจุดสนใจ
การซูมภาพ เพื่อเน้นจุดสนใจ
 
อาทิตย์อัสดง
อาทิตย์อัสดงอาทิตย์อัสดง
อาทิตย์อัสดง
 
Local chiropractor clinic
Local chiropractor clinicLocal chiropractor clinic
Local chiropractor clinic
 
51011221063
5101122106351011221063
51011221063
 

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

Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Joongi Kim
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
NAVER D2
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
흥배 최
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
Jaehoon Choi
 
개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기
David Kim
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debugger
INSIGHT FORENSIC
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows TerminalOnGameServer
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
NAVER D2
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
Jinkyoung Kim
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
Chanwoong Kim
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
Sam Kim
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
Jaeseung Ha
 
한국에서 제일 쉬운 centos7 설치 튜토리얼
한국에서 제일 쉬운 centos7 설치 튜토리얼한국에서 제일 쉬운 centos7 설치 튜토리얼
한국에서 제일 쉬운 centos7 설치 튜토리얼
ChoDae
 
JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
taeseon ryu
 
게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용
Woonbong Kim
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual
Ubuntu Korea Community
 
리멤버 데스크톱 앱 개발기
리멤버 데스크톱 앱 개발기리멤버 데스크톱 앱 개발기
리멤버 데스크톱 앱 개발기
Tom Kim
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
kwbak
 

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

Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debugger
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 
한국에서 제일 쉬운 centos7 설치 튜토리얼
한국에서 제일 쉬운 centos7 설치 튜토리얼한국에서 제일 쉬운 centos7 설치 튜토리얼
한국에서 제일 쉬운 centos7 설치 튜토리얼
 
JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
 
게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual
 
리멤버 데스크톱 앱 개발기
리멤버 데스크톱 앱 개발기리멤버 데스크톱 앱 개발기
리멤버 데스크톱 앱 개발기
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
 

게임 애셋 스트리밍 패치

  • 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