SlideShare a Scribd company logo
1부
프로그래밍 기법들
1.0 데이터 주도적 설계의 마법
Page 37 ~ 43
NHN NEXT, NEXON 라태웅
데이터 주도적 설계의 마법
게임은 로직과 데이터로 이루어짐
로직 : 게임 엔진의 핵심 규칙들과 알고리즘을 규정
데이터 : 내용과 행동의 세부적인 사항들을 제공
로직과 데이터는 떨어져 있으면 쓸모가 없음
그러나 결합 되면 마법과도 같이 게임에 생명을 부여함
데이터 주도적 설계의 마법
데이터 주도적 설계의 마법
데이터는 코드 자체에 내장되기 보다는 파일들로부터 로드되어야 함
이 당연한 개념으로부터 수많은 마법들이 피어나게 됨
게임 개발을 크게 혁신할 수 있는 몇 가지 아이디어를 소개할 것
아이디어 #1 : 기본 (텍스트 파일 읽기)
텍스트 파일을 읽어서 처리할 수 있는 시스템이 필요
게임이 실행될 때, 필요할 때마다 텍스트 파일들을 읽어서 처리할 수 있도록
“데이터 주도적(data-driven) 설계”를 해야한다.
최종 출시 때는 이진 파일을 사용하겠지만,
프로그램 코드를 고치지 않고도 프로그래머를 비롯하여 테스터나 게임 디자이
너들을 포함한 팀 전체가 게임의 설정이나 환경을 이리 저리 바꿔볼 수 있다.
아이디어 #2 : 최소한의 원칙
상수들을 하드 코딩(hard-coding)해서는 안됨
모두 텍스트 파일에 넣어야 컴파일하지 않고도 상수를 바꿀 수 있음
상수를 자유롭게 변경시키면서 좀 더 나은 방식을 찾을 수 있게 됨
Ex) 카메라 이동 같은 기본적인 기능
-> 비프로그래머들도 텍스트 편집만으로 카메라의 행동 방식을 자유롭게 바꿀
수 있게 됨
아이디어 #3 :
하드 코딩을 아예 없애라
어떤 것이든 바뀔 수 있다고 가정해야 함. 실제로 어떤 것이든 바뀌기 마련임
설계 상의 결정 사항들을 자유롭게 바꿀 수 있으면 게임을 최고 수준으로 진화
시킬 수 있음
ex) 무기를 하드 코딩으로 4개를 만들면 무기가 추가될 때마다 코딩을 하고 컴파
일을 해야 함.
하지만 이를 추상화해서 데이터로부터 읽게 하면 무기가 100가지더라도 데이터
만 추가해주면 됨
아이디어 #3 :
“아예 없애라” – 농담이 아님!
게임 개발 과정은 반복적이며 진화적임
애초에 생각했던 게임과 최종적으로 만들어진 게임이 전혀 다른 물건인 경우도
흔함
규칙, 캐릭터, 종족, 무기, 레벨, 제어 방식, 객체 등을 자유롭게 변경하고 수정할
수 있도록 하는 것이 매우 핵심적인 문제
그렇지 않으면 사소한 것 하나를 바꾸려고 해도 항상 프로그래머의 손을 거쳐야
하기 때문에 시간과 돈의 낭비임
이 낭비가 부담스러워 게임 개선을 아예 포기하기도 함
즉, 게임 속에 내재된 무한한 잠재력을 그냥 지워버리는 결과를 낳음
아이디어 #4 :
게임의 흐름은 스크립트로 제어할 것
스크립트 : 게임의 행동 방식을 프로그램 코드 밖에서 정의하기 위한 수단
게임에서 일어나는 일련의 단계를 정의하거나 이벤트를 발생하게 하는 데 주로
쓰임
스크립트는 데이터 주도적 원칙의 훌륭한 실제 예임
아이디어 #4 :
게임의 흐름은 스크립트로 제어할 것
스크립팅 언어를 설계할 때에는 조건 분기 방식에 신경써야 함
스크립팅 언어 안에서 변수들을 유지시키고 비교하는 방법
게임 코드에 함수를 만들어 두고 코드에 존재하는 변수를 비교하는 것
디자이너는 변수를 선언하고, 갱신하고, 비교하는 것보다 함수를 사용하는 것을 선호할 것
But, 스크립팅 언어가 필요함
완전히 새로운 문법을 직접 정의
스크립트 파서도 만들어야 함
빠른 속도를 위해서는 텍스트를 이진 형태로 변환하는 컴파일러도 필요할 수
있음
아이디어 #5 : 스크립트 남용의 해악
데이터 주도적 설계론의 애초의 원칙을 잊어서는 안 됨!!!
“로직과 데이터”를 분리해야 함
복잡한 로직은 코드 내부에, 데이터는 코드 외부에 두어야 함을 명심
스크립트가 위험한 이유는 스크립트가 데이터의 성격과 로직의 성격을 함께 가
지고 있기 때문
아이디어 #5 : 스크립트 남용의 해악
스크립트를 다루다 보면 스크립트 안에 복잡한 로직을 넣고 싶어짐
But, 스크립트에 복잡한 로직을 넣으면 프로그램 코드를 작성하는 것과 별다른
차이가 없어짐
스크립트가 복잡해질 수록 프로그래머는 엔진만 만들어 놓고 외면
나머지 일은 스크립트 작성자가 모두 떠맡게 됨
스크립트란 일을 편하게 하기 위한 것이지 어렵게 만들기 위한 것이 아님!!!
아이디어 #5 : 스크립트 남용의 해악
복잡한 로직을 코드 안에 두어야하는 이유는 프로그램의 기능성과 디버깅에 있
어서 매우 중요한 문제!
스크립트가 복잡해질수록 스크립트의 문제를 해결하는 데 필요한 디버깅 정보
의 양도 많아짐
ex) 복잡한 로직이 코드안에 있다면 Visual Studio의 경우 바로 디버깅하면 됨!
아이디어 #5 :
경계가 애매하다는 것이 문제
코드와 스크립트 사이의 경계가 애매하다는 것은 사실
분명한 것은 로직이 복잡해지면 무조건 코드에 넣어야한다는 것
디자이너나 스크립트 작성자가 프로그래밍을 하게 해서는 안 됨
스크립팅 엔진만 만들고 디자이너에게 떠넘긴다면 일종의 직무 유기임
문제를 하향식으로 분할하여 로직을 조작하기 위한 도구로 스크립트를 사용해
야 함
아이디어 #6 :
데이터의 중복을 피해라
코드를 중복하지 않는 것은 프로그래밍의 표준적인 관례
서로 다른 두 지점에서 동일한 행동이 일어나야 하는 경우 그에 대한 코드는 하
나만 존재해야 함(함수 등을 통해서)
데이터도 동일한 개념이 적용
주된 방법은 여러 곳에서 쓰일 데이터를 전역적인 데이터로 만드는 것
또한 특정한 위치에서는 데이터 일부를 수정하게 할 수도 있어야 함
아이디어 #6 :
데이터의 중복을 피해라
이를 위해서는 “상속”이라는 개념이 필요
한 객체의 공통적인 부분을 설정하고, 이를 상속받아 여러 객체의 개별적인 설
정을 하도록 하는 것이 바람직
즉, 공통적인 속성들을 상속받고, 그 중 특정한 속성들을 추가하거나 재정의하
여 데이터의 중복을 피할 수 있음
아이디어 #6 :
데이터의 중복을 피해라
아이디어 #7 :
데이터를 만들어 내는 도구를 작성할 것
게임의 규모가 크다면 텍스트 파일이 너무 복잡하고 커져서 다루기 힘들어짐
따라서 텍스트 파일들을 작성하는 도구를 만드는 것이 해결책
게임 에디터, 레벨 에디터 등 다양한 도구가 있지만 공통점은 제대로 된 도구를
만들면 게임 개발 속도가 훨씬 빨라짐
데이터 주도적 설계론에 위배되는 것이 아니고 데이터를 좀 더 견고하고 효율적
으로 만드는 데 도움을 주기위한 것일 뿐
결론
데이터 주도적 방법론을 채택하는 것은 어렵지 않음
하지만 그 결과가 가시적으로 드러나게 하기는 쉽지 않음
But, 모든 것이 데이터 주도적이 되면 놀랄만한 잠재력과 가능성이 피어남
ex) 토털 어나이얼레이션 (RTS 게임)
데이터 주도적 설계를 극한까지 밀어 부침
게이머들이 유닛을 만들어서 올려 서로 다운로드 받아 즐길 수 있음
데이터를 통해서만 정의되고 새로운 유닛들을 추가하는 것이 얼마든지 가능
발표를 마치며…
실제 게임 업계에서는 이미 데이터 주도적 설계론을 많이 채택
하지만 원칙을 지켜서 끝까지 개발하여 출시하는 게임은 극소수
내가 데이터를 쓰는 것인지 프로그래밍을 하는 것인지 구분이 안가는 경우가 많
음
원칙을 항상 되새기고 명심해서 설계해야 진정한 데이터 주도적 설계의 파워를
느낄 수 있을 것이라고 생각

More Related Content

What's hot

프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요Chris Ohk
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
Chris Ohk
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
devCAT Studio, NEXON
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
Xionglong Jin
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
Seungmo Koo
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
YEONG-CHEON YOU
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
YEONG-CHEON YOU
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
Chaeone Son
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
Heungsub Lee
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
Hoyoung Choi
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
고대특강 게임 프로그래머의 소양
고대특강   게임 프로그래머의 소양고대특강   게임 프로그래머의 소양
고대특강 게임 프로그래머의 소양Jubok Kim
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
Eunseok Yi
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
noerror
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
Sang Heon Lee
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
Seungmo Koo
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
강 민우
 

What's hot (20)

프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
고대특강 게임 프로그래머의 소양
고대특강   게임 프로그래머의 소양고대특강   게임 프로그래머의 소양
고대특강 게임 프로그래머의 소양
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
 

Similar to [GPG스터디] 1.0 데이터 주도적 설계의 마법

1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법
Taeung Ra
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
복연 이
 
피니엔진
피니엔진피니엔진
피니엔진
승우 백
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
Sunghyouk Bae
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
MinGeun Park
 
에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~Lee Jungpyo
 
How to build Design System?
How to build Design System?How to build Design System?
How to build Design System?
John Kim
 
도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계
Wonjun Hwang
 
유니티로 해보는 게임 프로토타이핑
유니티로 해보는 게임 프로토타이핑유니티로 해보는 게임 프로토타이핑
유니티로 해보는 게임 프로토타이핑
Kiyoung Moon
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
KwangSeob Jeong
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
수보 김
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
Eunchan Lee
 
Domain driven design 8장
Domain driven design 8장Domain driven design 8장
Domain driven design 8장kukuman
 
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
Kay Kim
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++KyeongWon Koo
 
OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316기한 김
 
스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner
ServerDevCamp
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
흥배 최
 

Similar to [GPG스터디] 1.0 데이터 주도적 설계의 마법 (20)

1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
피니엔진
피니엔진피니엔진
피니엔진
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
 
에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~
 
How to build Design System?
How to build Design System?How to build Design System?
How to build Design System?
 
도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계
 
유니티로 해보는 게임 프로토타이핑
유니티로 해보는 게임 프로토타이핑유니티로 해보는 게임 프로토타이핑
유니티로 해보는 게임 프로토타이핑
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
 
Domain driven design 8장
Domain driven design 8장Domain driven design 8장
Domain driven design 8장
 
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
 
OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316
 
스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 

More from Sehyeon Nam

Game programing gems 4.17
Game programing gems 4.17Game programing gems 4.17
Game programing gems 4.17Sehyeon Nam
 
Game programing gems 4.11
Game programing gems 4.11Game programing gems 4.11
Game programing gems 4.11Sehyeon Nam
 
Game programing gems 1.11
Game programing gems 1.11Game programing gems 1.11
Game programing gems 1.11
Sehyeon Nam
 
Game programing gems 1.10
Game programing gems 1.10Game programing gems 1.10
Game programing gems 1.10
Sehyeon Nam
 
Game programing gems 3.4 3.6
Game programing gems 3.4 3.6Game programing gems 3.4 3.6
Game programing gems 3.4 3.6
Sehyeon Nam
 
Hexagrid Draw by NHN NEXT Seo Dong Yu
Hexagrid Draw by NHN NEXT Seo Dong YuHexagrid Draw by NHN NEXT Seo Dong Yu
Hexagrid Draw by NHN NEXT Seo Dong Yu
Sehyeon Nam
 
아르카스톤 기획
아르카스톤 기획아르카스톤 기획
아르카스톤 기획
Sehyeon Nam
 
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자 [GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
Sehyeon Nam
 
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
Sehyeon Nam
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
Sehyeon Nam
 
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산 [GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
Sehyeon Nam
 
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
Sehyeon Nam
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summarySehyeon Nam
 
Ec++ c 1,2 surmary
Ec++ c 1,2 surmaryEc++ c 1,2 surmary
Ec++ c 1,2 surmarySehyeon Nam
 
D2 ppt
D2 pptD2 ppt
D2 ppt
Sehyeon Nam
 

More from Sehyeon Nam (15)

Game programing gems 4.17
Game programing gems 4.17Game programing gems 4.17
Game programing gems 4.17
 
Game programing gems 4.11
Game programing gems 4.11Game programing gems 4.11
Game programing gems 4.11
 
Game programing gems 1.11
Game programing gems 1.11Game programing gems 1.11
Game programing gems 1.11
 
Game programing gems 1.10
Game programing gems 1.10Game programing gems 1.10
Game programing gems 1.10
 
Game programing gems 3.4 3.6
Game programing gems 3.4 3.6Game programing gems 3.4 3.6
Game programing gems 3.4 3.6
 
Hexagrid Draw by NHN NEXT Seo Dong Yu
Hexagrid Draw by NHN NEXT Seo Dong YuHexagrid Draw by NHN NEXT Seo Dong Yu
Hexagrid Draw by NHN NEXT Seo Dong Yu
 
아르카스톤 기획
아르카스톤 기획아르카스톤 기획
아르카스톤 기획
 
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자 [GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
 
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
 
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산 [GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
[GPG 스터디] 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
 
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
 
Ec++ c 1,2 surmary
Ec++ c 1,2 surmaryEc++ c 1,2 surmary
Ec++ c 1,2 surmary
 
D2 ppt
D2 pptD2 ppt
D2 ppt
 

[GPG스터디] 1.0 데이터 주도적 설계의 마법

  • 1. 1부 프로그래밍 기법들 1.0 데이터 주도적 설계의 마법 Page 37 ~ 43 NHN NEXT, NEXON 라태웅
  • 2. 데이터 주도적 설계의 마법 게임은 로직과 데이터로 이루어짐 로직 : 게임 엔진의 핵심 규칙들과 알고리즘을 규정 데이터 : 내용과 행동의 세부적인 사항들을 제공 로직과 데이터는 떨어져 있으면 쓸모가 없음 그러나 결합 되면 마법과도 같이 게임에 생명을 부여함
  • 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 : 데이터의 중복을 피해라 이를 위해서는 “상속”이라는 개념이 필요 한 객체의 공통적인 부분을 설정하고, 이를 상속받아 여러 객체의 개별적인 설 정을 하도록 하는 것이 바람직 즉, 공통적인 속성들을 상속받고, 그 중 특정한 속성들을 추가하거나 재정의하 여 데이터의 중복을 피할 수 있음
  • 17. 아이디어 #6 : 데이터의 중복을 피해라
  • 18. 아이디어 #7 : 데이터를 만들어 내는 도구를 작성할 것 게임의 규모가 크다면 텍스트 파일이 너무 복잡하고 커져서 다루기 힘들어짐 따라서 텍스트 파일들을 작성하는 도구를 만드는 것이 해결책 게임 에디터, 레벨 에디터 등 다양한 도구가 있지만 공통점은 제대로 된 도구를 만들면 게임 개발 속도가 훨씬 빨라짐 데이터 주도적 설계론에 위배되는 것이 아니고 데이터를 좀 더 견고하고 효율적 으로 만드는 데 도움을 주기위한 것일 뿐
  • 19. 결론 데이터 주도적 방법론을 채택하는 것은 어렵지 않음 하지만 그 결과가 가시적으로 드러나게 하기는 쉽지 않음 But, 모든 것이 데이터 주도적이 되면 놀랄만한 잠재력과 가능성이 피어남 ex) 토털 어나이얼레이션 (RTS 게임) 데이터 주도적 설계를 극한까지 밀어 부침 게이머들이 유닛을 만들어서 올려 서로 다운로드 받아 즐길 수 있음 데이터를 통해서만 정의되고 새로운 유닛들을 추가하는 것이 얼마든지 가능
  • 20. 발표를 마치며… 실제 게임 업계에서는 이미 데이터 주도적 설계론을 많이 채택 하지만 원칙을 지켜서 끝까지 개발하여 출시하는 게임은 극소수 내가 데이터를 쓰는 것인지 프로그래밍을 하는 것인지 구분이 안가는 경우가 많 음 원칙을 항상 되새기고 명심해서 설계해야 진정한 데이터 주도적 설계의 파워를 느낄 수 있을 것이라고 생각