온라인 게임 처음부터 끝까지 동적 언어로 만들기 (Lua)
Programming 2014. 2. 11. 17:21 |온라인 게임 처음부터 끝까지 동적 언어로 만들기
현재 넥슨에서 서비스 중인 데스크탑 히어로즈는 엔진을 제외하면 모두 Lua로 만들어졌다고 합니다.
Lua로 게임을 만드는 것에 대한 경험을 공유하는 발표였습니다.
발표는 상당히 훌륭했지만, 제가 아는 범위에서 그렇게 크게 벗어난 내용은 아니더군요.
1) Lua는 Python과 마찬가지로 동적 언어이다 - 타입이 없다.
동적 언어들의 가장 강력한 장점입니다.
단순히 타이핑 시간이 줄어들 뿐만 아니라 코드의 가독성이 올라가 생산성이 미친듯이 올라갑니다.
2) 빌드 시간이 없다.
Lua는 동적언어이므로 컴파일 과정이 없습니다.
문법오류 정도만 잡아주고, 거의 대부분의 에러가 런타임에 발생됩니다.
큰 게임 프로젝트의 경우 빌드시간만 30분이 넘는 경우도 많은데,
빌드 타임이 10초가 넘어가면 딴짓을 하게되는 인간의 보편적인 특성[..]상
Lua로 코딩할 경우 집중력 있게 작업할 수 있다고 합니다. (그리고 당연히 더 빨리 지칩니다. 하지만 칼퇴 가능)
3) 엄청난 런타임 에러 - 오타하나 잡아주질 않는다.
그러나 오타하나도 잡아주지 않기 때문에... 미칠듯한 생산성을 디버깅 타임에 다 까먹어버리게 됩니다.
개인적으로 처음에 Python에 매우 혹했다가 1인 프로젝트르 좀 해보고 나서 Python에 대한 열정이 식은 이유입니다-_-;
물론 이런 거친[?] 환경 속에서 코딩을 하다보면 실수가 자연스럽게 줄어들게 되고
코드를 한눈에 보고 파악하는 능력이 향상된다고 합니다.
(전 이런식으로 향상되고 싶지는 않군요...)
4) 툴이 후지다. - 디버거, IDE, ... 모두 직접 제작.
사실 Lua IDE가 오픈소스로 만들어져 있는것이 있다고 합니다.
그게 꽤 괜찮았다고 하는데(이름은 까먹음) utf8을 지원을 제대로 못해서 안쓰기로 했다고 합니다.
한글주석도 못달고... 블라블라..
그래서 직접 디버거를 포함한 툴들을 모두 제작을... ㅠㅠ
3) 유지보수성은? 모르겠다.
타입이 없는 것의 단점인듯 합니다.
데스크탑 히어로즈가 아직 오래된 프로젝트가 아니고,
참여인원도 프로그래머는 고작2명이라 유지보수성이 어떨지는 아직 잘 모른다고..
4) MMO 같은 곳에서도 쓸 수 있는가? 모르겠다.
동적언어들은 당연히 퍼포먼스가 매우 후집니다.(Python의 경우 C의 최고 100배까지 느림)
만약 MMO 였다면 Lua를 쓸 수 있었겠는가? 이것 역시 잘 모르겠다고...
하지만 빈번하게 변하는 로직에서 Lua를 쓴다면
코드의 아주 일부분때문에 전체를 다시 빌드해야 하는 일도 없었을 테고 블라블라..
그래서 더 효율적일 수도 있을 거라고 하셨습니다.
5) 보안은? 모르겠다.
클라를 가볍게 가져가고 싶어서 일부러 핵실드 같은것을 안 넣었다고 합니다.
물론 기본적인 보안처리는 해두었지만 어떤 이슈가 더 있을지 모르겠다 라고 하셨습니다.
6) lambda expression과 한글 identifier 의 장점을 깨달음.
메소드 단위로 코드를 잘게 쪼개는 것이 보통 유지보수하기 좋고
C#의 경우는 JIT 컴파일러가 JITing 을 하기도 좋아서 퍼포먼스 향상에도 도움이 됩니다..만
call depth가 커질수록 코드 브라우징 하는게 어려워지고 코드가 읽기가 어려워집니다.
아까 그 메소드가 뭐하는놈이었지? 하면서 계속 왔다갔다 하게 되고..
이런 의미에서 lambda expression이 가독성을 높여주는 것 같습니다.
(변태들만 쓰는건줄 알았는데 이런 유용한 점이...)
한글 identifier도 어떤 경우에는 유용한듯 합니다.
예를들면 유저캐릭터.공격력.물리공격력 이런식의 표현이요.
7) 참고서적 - Programming in Lua 가 좋다고 합니다. 한권이면 다 된데요.
8) Lua말고 다른 언어도 고려해 보셨나요? 왜 꼭 Lua여야 했나요?
다른 동적 언어들도 많이 있는데, 선택의 기준은 커뮤니티의 규모와 질 이었다고 합니다.
사람들이 많이 사용하고, 검증이 된 것을 사용하는게 유리하니까요.
그리고 보통 이런 언어들은 스크립팅 용도로만 사용되는 경우가 많아서
처음부터 끝까지 개발하는 경우에 대한 커뮤니티가 가장 활발한 Lua를 택했다고 합니다.
9) 그러면 C#을 쓰는건 어떻습니까? 동적언어의 장점도 있고 툴도 훌륭하고 msdn도 훌륭..
나중에 더 큰 프로젝트를 하게 되면 고려해 보겠다고 하셨습니다.
동적 언어의 높은 생산성은 역시 디버깅에서 다 까먹게 된다-_-;
strong type checking을 제공하면서도 동적 언어의 장점까지 쓸 수 있는 C#이 역시 최고.
출처 : 서울대 게임 개발동아리 에서 'NDC 2011 요약 (完)'글의 내용중 일부 발췌
2차출처 : http://www.cyworld.com/dong5031/9102691
'Programming' 카테고리의 다른 글
DBMS (0) | 2015.02.27 |
---|---|
일반화 프로그래밍(Generic Programming) (0) | 2015.02.02 |
Lua script (0) | 2014.02.11 |
트랜잭션, 롤백, 커밋 (0) | 2013.11.07 |
문자 인코딩 (0) | 2013.09.11 |