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

쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)Seungmo Koo
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea
 
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...Amazon Web Services Korea
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지강 민우
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여iFunFactory Inc.
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규ChangKyu Song
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011devCAT Studio, NEXON
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 
NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기Hyunsuk Ahn
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기Hoyoung Choi
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?Seok-ju Yun
 

What's hot (20)

쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?
 

Viewers also liked

Cat personalizacion choco concept
Cat personalizacion choco conceptCat personalizacion choco concept
Cat personalizacion choco conceptChocoConcept
 
Background หลากสี
Background หลากสีBackground หลากสี
Background หลากสีIvIy Alice
 
ม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอIvIy Alice
 
ดอล์ล่าถูกเผา
ดอล์ล่าถูกเผาดอล์ล่าถูกเผา
ดอล์ล่าถูกเผาIvIy Alice
 
Le marche zurich
Le marche zurichLe marche zurich
Le marche zurichHOREQUIP
 
ปรับภาพให้สว่างใสด้วย 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
 

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 debuggerINSIGHT FORENSIC
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows TerminalOnGameServer
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 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
 
게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용Woonbong Kim
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu ManualUbuntu Korea Community
 
리멤버 데스크톱 앱 개발기
리멤버 데스크톱 앱 개발기리멤버 데스크톱 앱 개발기
리멤버 데스크톱 앱 개발기Tom Kim
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfkwbak
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기Jiho Choi
 

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
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 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
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기
 

Recently uploaded

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and AdoptionSeung-chan Baeg
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Recently uploaded (7)

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

게임 애셋 스트리밍 패치

  • 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