오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...Kay Kim
MIGS 2004에서, Noel Llopis가 발표한 "애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In The Real World)의 한글 슬라이드
http://betterways.tistory.com/139 참조.
다들 STL 잘 사용하고 계신가요?
오늘도 라태웅(NHN NEXT, NEXON)님의 발표입니다.
STL의 기본 개념부터, 사용 노하우까지 담아보았습니다.
여러분들도 우리 스터디 참여하셔서 Live로 들으시고 발표도 하러 오세요!
관련 문의 : 댓글 or https://www.facebook.com/gpgstudygogo
<실제>
< '#'에 맞춰서 다음 슬라이드로 넘어가시면 됨.>
안녕하세요. NHN NEXT의, 최연소 참가자 19살 남세현입니다.
#저는 일정 공유가 핵심인 달력어플을 만들고있습니다.
#흠… 일정을 공유를 어떻게 해야할까요?
서버에서 처리하는거 말곤 없을까 생각하다가
다음 3가지가 떠올랐습니다.
#아이폰은 사진같은거 말고는 어플끼리 파일공유가 힘듭니다.
사람들이 많이 사용하는게 라인, 카톡인데요
라인 카톡으로 많이하는건 텍스트 보내기, #사진보내기 입니다.
#사진에 데이터를 녹여넣고, 그 사진을 메신저로 전달하면 어떨까요
#사진은 공용 저장소인 사진보관함에 저장되는데, 모든 어플에서 접근이 가능합니다.
기존엔 파일을 다운받아도 관리도 안되고 공유도 힘들고... 그것이 해결할 수 있습니다.
#어떻게 파일을 사진에 녹여내냐면,
모든 데이터는 이진수로 이루어져 있습니다. 그 이진수를 사진의 픽셀 RGB값에 대입하겠다는 겁니다.
#이것이 그렇게 해서 만든 사진데이터입니다. 저는 앞으로 이런걸 "사진데이터" 라고 부르겠습니다.
어떤 데이터가 담겨져 있을까요?
제가 말하기 전까지는 모릅니다.
몇천개의 인트형 정수가 저장되어있습니다.
#이게 어느 어플에서 저장한 데이터인지, 피피티자료인지 음악자료인지 알 수 없습니다.
컴퓨터를 쓸땐 파일에 '이름과 아이콘'을 붙입니다.
#파일 내부의 이진수 데이터는 인간이 읽을 수 없지만, #겉의 파일 이름과 아이콘으로 구분할수있습니다.
#그렇다면 이 사진데이터도 겉으로 봤을땐 사람이 읽을 수 있는 글씨이고, 컴퓨터는 데이터로 인식하게 만들면 되지 않을까요?
#이것이 바로 그렇게 만든 사진데이터입니다.
#밝기가 확실히 밝아졌죠?
#한 픽셀의, RGB값의 뺀 앞부분 #두 비트를 이용해서 사람이 노이즈 속에서도 글씨를 읽어낼 수 있게 할 수 있습니다.
#글씨가 있는 부분은 앞 두개는 무조건 11, 나머지 여섯개는 데이터의 이진수값. 반대로 글씨가 없는부분은 앞에는 00, 나머지는 데이터를 집어넣습니다.
#앞에 두 비트가 차지하는 명암의 비중이 75%나 됩니다. 아무리 뒤에 6비트가 커도, 화면밝기로 절대 따라갈 수 없습니다.
#사람은 명암 구분을 제일 잘합니다. 명암이 75%이나 차이나면 노이즈가 있음에도 글씨를 볼 수 있습니다.
그래서, 사진데이터에 파일의 속성을 글씨로 써줍니다.
#마치 바탕화면 보는것처럼 저게 무슨 사진데이터인지 파악할 수 있습니다.
#압축파일, 게임세이브데이터, 내스케줄, 음악, 에러로그, 초대권, 그 무엇도 다 이런식으로 저장할 수 있습니다. 일종의 QR코드 진화판이죠.
#저는 모든 개발자들이 쉽게 데이터를 사진으로 저장하고,
사진에서 데이터를 불러올 수 있는 api를 라이브러리 형태로 오픈소스 제공합니다.
#이것이 가지는 의미를 찾아봅시다
#파일. 자료는 사용자 자신이 주인이 되어서 스스로 관리할수 있어야 합니다.
#클라우드 시대가 왔다지만, 사용자경험을 고려하지 않은 디자인이 많습니다.
애플의 폐쇄성때문에 어플끼리 파일 옮기는게 힘들어서 대부분 클라우드와 URL을 통해서 작업합니다. 로컬이 단단하지 않은 상태에서 모든걸 클라우드에게 맞기겠다는 건 말이 안됩니다. #그때문에 일어난 불편함을 개발자와 사용자 둘다 느끼고 있습니다. 스마트폰은 특히나 네트워크 단절이 드문 기계잖아요
#그 누구도 파일을 보내기 위해서 클라우드 어플을
4. 데이터 주도적 설계의 마법
데이터는 코드 자체에 내장되기 보다는 파일들로부터 로드되어야 함
이 당연한 개념으로부터 수많은 마법들이 피어나게 됨
게임 개발을 크게 혁신할 수 있는 몇 가지 아이디어를 소개할 것
5. 아이디어 #1 : 기본 (텍스트 파일 읽기)
텍스트 파일을 읽어서 처리할 수 있는 시스템이 필요
게임이 실행될 때, 필요할 때마다 텍스트 파일들을 읽어서 처리할 수 있도록
“데이터 주도적(data-driven) 설계”를 해야한다.
최종 출시 때는 이진 파일을 사용하겠지만,
프로그램 코드를 고치지 않고도 프로그래머를 비롯하여 테스터나 게임 디자이
너들을 포함한 팀 전체가 게임의 설정이나 환경을 이리 저리 바꿔볼 수 있다.
6. 아이디어 #2 : 최소한의 원칙
상수들을 하드 코딩(hard-coding)해서는 안됨
모두 텍스트 파일에 넣어야 컴파일하지 않고도 상수를 바꿀 수 있음
상수를 자유롭게 변경시키면서 좀 더 나은 방식을 찾을 수 있게 됨
Ex) 카메라 이동 같은 기본적인 기능
-> 비프로그래머들도 텍스트 편집만으로 카메라의 행동 방식을 자유롭게 바꿀
수 있게 됨
7. 아이디어 #3 :
하드 코딩을 아예 없애라
어떤 것이든 바뀔 수 있다고 가정해야 함. 실제로 어떤 것이든 바뀌기 마련임
설계 상의 결정 사항들을 자유롭게 바꿀 수 있으면 게임을 최고 수준으로 진화
시킬 수 있음
ex) 무기를 하드 코딩으로 4개를 만들면 무기가 추가될 때마다 코딩을 하고 컴파
일을 해야 함.
하지만 이를 추상화해서 데이터로부터 읽게 하면 무기가 100가지더라도 데이터
만 추가해주면 됨
8. 아이디어 #3 :
“아예 없애라” – 농담이 아님!
게임 개발 과정은 반복적이며 진화적임
애초에 생각했던 게임과 최종적으로 만들어진 게임이 전혀 다른 물건인 경우도
흔함
규칙, 캐릭터, 종족, 무기, 레벨, 제어 방식, 객체 등을 자유롭게 변경하고 수정할
수 있도록 하는 것이 매우 핵심적인 문제
그렇지 않으면 사소한 것 하나를 바꾸려고 해도 항상 프로그래머의 손을 거쳐야
하기 때문에 시간과 돈의 낭비임
이 낭비가 부담스러워 게임 개선을 아예 포기하기도 함
즉, 게임 속에 내재된 무한한 잠재력을 그냥 지워버리는 결과를 낳음
9. 아이디어 #4 :
게임의 흐름은 스크립트로 제어할 것
스크립트 : 게임의 행동 방식을 프로그램 코드 밖에서 정의하기 위한 수단
게임에서 일어나는 일련의 단계를 정의하거나 이벤트를 발생하게 하는 데 주로
쓰임
스크립트는 데이터 주도적 원칙의 훌륭한 실제 예임
10. 아이디어 #4 :
게임의 흐름은 스크립트로 제어할 것
스크립팅 언어를 설계할 때에는 조건 분기 방식에 신경써야 함
스크립팅 언어 안에서 변수들을 유지시키고 비교하는 방법
게임 코드에 함수를 만들어 두고 코드에 존재하는 변수를 비교하는 것
디자이너는 변수를 선언하고, 갱신하고, 비교하는 것보다 함수를 사용하는 것을 선호할 것
But, 스크립팅 언어가 필요함
완전히 새로운 문법을 직접 정의
스크립트 파서도 만들어야 함
빠른 속도를 위해서는 텍스트를 이진 형태로 변환하는 컴파일러도 필요할 수
있음
11. 아이디어 #5 : 스크립트 남용의 해악
데이터 주도적 설계론의 애초의 원칙을 잊어서는 안 됨!!!
“로직과 데이터”를 분리해야 함
복잡한 로직은 코드 내부에, 데이터는 코드 외부에 두어야 함을 명심
스크립트가 위험한 이유는 스크립트가 데이터의 성격과 로직의 성격을 함께 가
지고 있기 때문
12. 아이디어 #5 : 스크립트 남용의 해악
스크립트를 다루다 보면 스크립트 안에 복잡한 로직을 넣고 싶어짐
But, 스크립트에 복잡한 로직을 넣으면 프로그램 코드를 작성하는 것과 별다른
차이가 없어짐
스크립트가 복잡해질 수록 프로그래머는 엔진만 만들어 놓고 외면
나머지 일은 스크립트 작성자가 모두 떠맡게 됨
스크립트란 일을 편하게 하기 위한 것이지 어렵게 만들기 위한 것이 아님!!!
13. 아이디어 #5 : 스크립트 남용의 해악
복잡한 로직을 코드 안에 두어야하는 이유는 프로그램의 기능성과 디버깅에 있
어서 매우 중요한 문제!
스크립트가 복잡해질수록 스크립트의 문제를 해결하는 데 필요한 디버깅 정보
의 양도 많아짐
ex) 복잡한 로직이 코드안에 있다면 Visual Studio의 경우 바로 디버깅하면 됨!
14. 아이디어 #5 :
경계가 애매하다는 것이 문제
코드와 스크립트 사이의 경계가 애매하다는 것은 사실
분명한 것은 로직이 복잡해지면 무조건 코드에 넣어야한다는 것
디자이너나 스크립트 작성자가 프로그래밍을 하게 해서는 안 됨
스크립팅 엔진만 만들고 디자이너에게 떠넘긴다면 일종의 직무 유기임
문제를 하향식으로 분할하여 로직을 조작하기 위한 도구로 스크립트를 사용해
야 함
15. 아이디어 #6 :
데이터의 중복을 피해라
코드를 중복하지 않는 것은 프로그래밍의 표준적인 관례
서로 다른 두 지점에서 동일한 행동이 일어나야 하는 경우 그에 대한 코드는 하
나만 존재해야 함(함수 등을 통해서)
데이터도 동일한 개념이 적용
주된 방법은 여러 곳에서 쓰일 데이터를 전역적인 데이터로 만드는 것
또한 특정한 위치에서는 데이터 일부를 수정하게 할 수도 있어야 함
16. 아이디어 #6 :
데이터의 중복을 피해라
이를 위해서는 “상속”이라는 개념이 필요
한 객체의 공통적인 부분을 설정하고, 이를 상속받아 여러 객체의 개별적인 설
정을 하도록 하는 것이 바람직
즉, 공통적인 속성들을 상속받고, 그 중 특정한 속성들을 추가하거나 재정의하
여 데이터의 중복을 피할 수 있음
18. 아이디어 #7 :
데이터를 만들어 내는 도구를 작성할 것
게임의 규모가 크다면 텍스트 파일이 너무 복잡하고 커져서 다루기 힘들어짐
따라서 텍스트 파일들을 작성하는 도구를 만드는 것이 해결책
게임 에디터, 레벨 에디터 등 다양한 도구가 있지만 공통점은 제대로 된 도구를
만들면 게임 개발 속도가 훨씬 빨라짐
데이터 주도적 설계론에 위배되는 것이 아니고 데이터를 좀 더 견고하고 효율적
으로 만드는 데 도움을 주기위한 것일 뿐
19. 결론
데이터 주도적 방법론을 채택하는 것은 어렵지 않음
하지만 그 결과가 가시적으로 드러나게 하기는 쉽지 않음
But, 모든 것이 데이터 주도적이 되면 놀랄만한 잠재력과 가능성이 피어남
ex) 토털 어나이얼레이션 (RTS 게임)
데이터 주도적 설계를 극한까지 밀어 부침
게이머들이 유닛을 만들어서 올려 서로 다운로드 받아 즐길 수 있음
데이터를 통해서만 정의되고 새로운 유닛들을 추가하는 것이 얼마든지 가능
20. 발표를 마치며…
실제 게임 업계에서는 이미 데이터 주도적 설계론을 많이 채택
하지만 원칙을 지켜서 끝까지 개발하여 출시하는 게임은 극소수
내가 데이터를 쓰는 것인지 프로그래밍을 하는 것인지 구분이 안가는 경우가 많
음
원칙을 항상 되새기고 명심해서 설계해야 진정한 데이터 주도적 설계의 파워를
느낄 수 있을 것이라고 생각