한빛리더스 8기 '김용욱' 님의 

『재미있는 게임을 만드는 게임 밸런스 이야기』도서 리뷰 입니다. [원문: http://bit.ly/1l43D3z]


『재미있는 게임을 만드는 게임 밸런스 이야기』

손형률 지음



뿅뿅 뿅뿅. 어린 시절 학교를 마치면 이 소리를 들으러 집으로 뛰어가곤 하였습니다. 단색으로 만들어진 스프라이트가 겹쳐진 이미지는 영상이라고 보다는 초등학생 때 하던 스텐실 과제와 같았고 소리는 찢어지는 듯한 소리였지만 그 소리와 영상을 보는 것이 너무나 들 뜨는 일이었습니다. 그런 경험을 다른 이들에게 주고 싶어 어른이 되면 게임을 만들어보겠다고 생각하곤 했는데 이제는 게임을 만들고 있습니다. 어릴 적에는 나도 그런 경험을 다른 이에게 주는 것을 할 수 있을 줄 알았는데 그런 경험을 다른 이에게 전달하는 것은 쉬운 일이 아니더군요. 가장 큰 문제는 재미와 밸런스였는데 이 두 문제는 딱 잘라서 별개의 것이다고 말하기는 어려운 것이었습니다. 밸런스가 없는 게임이 재밌게 느껴지기도 쉽지 않고 밸런스가 잘 맞아서 전달되는 재미도 있기 때문입니다. 그래서 저는 밸런스를 조금 더 파악해서 게임의 재미를 향상시키고 싶었습니다. 그러던 중에 이 책을 알게 되어 읽게 되었습니다.


한마디로 이 책에서 중요하게 생각하는 것을 요약하면 비교가능한 수치로 환산하는 것이라고 생각합니다. 이 책은 MMORPG에 초점을 맞추어 설명하고 있는데 도적, 전사, 마법사가 상대방에게 입힐 수 있는 데미지로 환산 시켜서 비교하면 다른 클래스의 캐릭터들끼리 밸런스를 맞출 수 있다는 것이지요. 또 상대방에게서 받을 최종 데미지를 계산하면 적절한 적의 수준을 계산할 수 있다는 것이고요. 단기적인 관점으로 보자면 연속적으로 공격하는 캐릭터와 정기적인 공격을 하는 캐릭터 간에 밸런스를 맞추기 어렵기 때문에 이 책에서는 일정한 간격을 중심으로 밸런스를 맞추고 있었습니다. 책에서 언급한 수치는 30초입니다. 30초 동안 전사가 지속적으로 공격한 양과 마법사가 지속적으로 공격한 데미지가 비슷하다면 게임의 진행 방식이 달라도 사용자는 합당하게 느낄 수 있다는 것이지요. 저는 여기서 언급한 30초가 중요한 수치라고는 생각하지 않아요. 어떤 던전에서 마법사가 5분만에 어떤 마법을 썼는데 그 결과 용을 물리칠 수 있었고 용을 물리치는데 기여한 바가 크다고 하다고 친다면 30초마다 평가를 할 경우 그런 부분에 대해서는 감안하지 못할 수 있겠지요. 하지만 이 책에서 말한 수치는 절대적으로 신봉할 수치가 아니라 조금 중,장기적인 기준을 삼아두고 비교가능한 수치를 통해서 균형을 맞추는 것이라고 본다면 큰 문제는 없는 것 같습니다.


이런 관점에서 기존 출시된 게임을 보니깐 흥미로운 부분들이 많이 있더군요. 저는 이브 온라인이란 게임을 재밌게 했는데 이 게임은 우주에서 전함을 타고 다니는 게임입니다. 각 플레이어는 하나의 회사의 어떤 부서에 속하면서 동시에 전함을 운전하는 파일럿입니다. 전함은 세 종류가 있는데 쉴드가 강한 전함, 내구도가 높은 전함, 그리고 각속도(!)가 높은 전함입니다. 각속도가 높은 전함은 세부적인 기동이 우수해서 적의 미사일의 속도를 순간 각속도의 변화로 회피할 수 있는 것이지요. 이렇게 다양한 전함들도 각 특성에 맞는 데미지 공식을 내고 밸런스를 맞추는 것은 충분히 가능하지 않을까 싶어요.


또 한가지 재밌게 보았던 개념은 일종의 마일스톤을 찍는 부분이었습니다. MMORPG에서 개별 캐릭터는 레벨을 가질텐데 개별 레벨마다 여러 직업들의 밸런스를 맞추는 것은 쉬운 일이 아닐 것입니다. 그래서 이 책에서 나왔던 팁은 특정 레벨마다 밸런스를 맞추는 것이었습니다. 레벨 10, 20, 30, 40 식으로 일정 간격으로 밸런스를 맞추는 거죠. 중간 성장하는 과정에서는 어떤 캐릭터가 일시적으로 쉽고 일시적으로 어려운 구간이 있겠지만 결국 밸런스 구간이 다가오면 좋지 못하던 캐릭터가 좋아지거나, 나빴던 캐릭터가 좋아져서 결국 성능의 균형을 이루게 될 것입니다. 이런 접근 방법은 좋았다고 생각해요.


이 책을 보면서 느꼈던 첫번째 아쉬움은 장르적인 제한이었습니다. 저는 모바일 게임을 만드는 사람이고 인디 개발자이기 때문에 대규모 MMORPG를 만들 일은 없어요. 솔직히 스마트 폰에서 대규모 MMORPG가 성공적으로 구현될 수 있는지도 조금 의문입니다. 이 책은 8할이 MMORPG이고 2할 정도가 RTS였는데요. 다른 장르에서 균형을 이루기 위한 수식등은 어떻게 생각해봐야 하는지는 과제로 남아 있는 것 같습니다.


두번째 아쉬움은 레벨 디자인에 대해서는 언급이 적었던 부분입니다. 아무래도 장르적인 특징인지 지역별로 특성을 두고 어떤 몬스터를 두어야 하는지 조금 큰 규모로 생각하게 만드는 것 같습니다. 하지만 많은 게임에서는 지형 지물을 아기자기하게 사용하고 그 과정에서 발생하는 유리/불리함 등이 게임에 미치는 영향들이 분명히 있을 것이고 그런 요소들이 게임의 재미에도 영향을 줄 것입니다. 그런 부분들에 대한 업급이 없었습니다. 이 부분에서도 여러 캐릭터나 진영간의 유리 분리를 세밀하게 설계하면 더 재밌게 게임을 할 수 있을텐데 그런 점은 좀 아쉽습니다.


마지막으로 이 책에서 게임의 재미를 밸런스에게만 맞추고 심지어 밸런스와 재미를 동격으로 보는 점은 좀 아쉬웠습니다. 최근 글로벌하게 흥행한 플래피 버드의 재미 등은 이 책이 설명하기 어렵다고 생각해요. 물론 이 책이 밸런스에 대해 관점을 보이고 있는 책인 것은 인정하는데 게임의 재미가 밸런스에 달렸다고 하면 다른 요소에 대해 오해할 수 있지 않을까 그런 생각이 듭니다.



  • 이 책의 추천 대상:

1. MMORPG에서 밸러스를 맞추고 싶은 분들.

2. 밸런스에 대한 손형률님의 견해를 바탕으로 자신의 견해를 찾고 싶은 분들.


  • 이 책의 비추천 대상:

1. 다른 장르에서 정답을 원하시는 분들.

한빛리더스 8기 1차 미션 우수 리뷰어 '정효연' 님의 

 『함수형 자바스크립트 : 새롭고 올바른 자바스크립트 프로그래밍 기법』도서 리뷰 입니다.

[원본http://takeiteazy.tistory.com/226]



함수형 자바스크립트 : 새롭고 올바른 자바스크립트 프로그래밍 기법

마이클 포거스 지음 | 우정은 역


개인적으로는 '아름다운 코드를 구현' 하는 것을 첫째 프로그래밍 규칙으로 삼는다. 필자의 다양한 업무에서 이를 달성했지만 여전히 뭔가가 부족하다고 느꼈다. 아름다운 코드를 구현한다면 책상에 앉아서 키보드를 치는 시간을 줄일 수 있는 또 다른 측면의 최적화를 달성할 수 있다. 

적절하게 사용한다면 함수형 스타일의 코드 구현이야말로 가장 아름답게 코드를 구현할 수 있는 방법이라고 생각한다. 

개인적으로 이 책을 끝까지 읽었을 때 독자들도 이에 동의할 수 있길 바란다. 


역시 필자의 의견에 동감하며, 아름다운 코드란 어떤 것이고 그에 따라 어떤 노력을 해야하는지 몇년째 고민한 결과 의외의 책에서 힌트를 얻은듯 싶다.


"실행할 수 있고, 올바로 동작하며, 빨리 실행되도록 만들어라."

- 버틀러 램슨(Butler Lampson)


"실행할 수 있게 한 다음, 올바로 동작하게 하고, 그 다음 빠르게 실행되도록 만들어라."

- 켄트 벡(Lent Beck) 


놀라운 통찰력이 책에 담겨져 있어, 분량이 짧음에도 불구하고 읽는 내내 고민했고 괴로워했고 느껴지는 것에 즐거웠던 책이었다.

OOP 관련 일만 해 보다가 이번에 자바 스크립트에 관련해서는 첫번째 책을 고른 것이었는데, 의외로 다른 언어에서 기존에 사용하던 언어의 고민을 더 깊게 만들거나 또는 의외의 힌트를 얻은 것들에 대해 놀라웠다.

예를 들면, 아래와 같은 것들은 평소 일을 하면서 괴로워했던(?) 것들에 대한 힌트를 얻을 수도 있었다.


객체 지향 스타일을 엄격하게 준수하는 시스템에서 객체 간의 상호 작용이 발생하면 각 객체의 내부 값이 바뀌면서 전체 시스템의 상태가 바뀌는데 이때 많은 작은 변화가 융합되고, 잠재적으로 미묘한 변화가 일어날 수 있다. 특히 작은 변경으로 큰 상태 변화가 발생할 수 있는 상황에서 새 객체를 추가하거나 새로운 시스템 기능을 추가해야 한다면 정말 난감하다.

이와는 달리 함수형 프로그래밍에서는 관찰할 수 있는 상태 변화를 최소화하려고 애쓴다. 따라서 함수형 원칙을 고수하는 시스템에 새로운 기능을 추가할 때는 새로운 함수가 지역화되고 비파괴적인 데이터 전이 과장(예를 들면 원래 데이터가 변하지 않음)에서 어떻게 동작할 것인지를 파악하는 것이 핵심이다. 

그렇다고 해서 함수형과 객체 지향 스타일이 서로 극과 극의 적대적인 관계라고 주장하는 것은 아니다. 자바 스크립트는 두 가지 스타일을 모두 지원한다. 즉, 자바 스크립트로 시스템을 제대로 구성하려면 두 가지 모델을 모두 사용해야 한다.   

실용적인 함수형 프로그래밍은 어떤 시스템에서 상태 변화를 완전히 제거하는 것이 아니라 변이가 발생하는 지역을 가능한 최소화하는 것을 목표로 한다. 


처음 접했던 언더스코어부터 시작하여 스코프, 클로저 등의 함수형 프로그래밍에 필요한 개념 뿐만 아니라 함수형 프로그래밍을 활용할 수 있는 다양한 정보를 제공하여 새로운 접근 방식으로 자바스크립트를 바라볼 수 있었고, 가장 좋았던 점은 책 뒤에 참고로 있었던 참고서적에 대한 소개였다.

함수형 자바스크립트의 장점 및 활용 사례, 그리고 자바스크립트를 이용하여 함수형 프로그램을 작성하는 방법에 대해서 각 Chapter별로 나누어 이해하기 쉽게 설명되어 있고,

불필요한 내용을 최대한 배제하고 간결한 설명과 예제 코드를 이용하여 각 개념에 대한 이해를 도와주며 페이지 하단의 주석에 링크를 참고하여 좀 더 자세한 내용을 확인할 수 있었고, 이론 뿐만 아니라 다양한 활용 사례를 통해 실용적으로 사용하는 데에도 도움을 주었다.

하지만 자바스크립트 활용이 익숙하지 않거나 초급 프로그래머 독자가 이 책을 접한다면 다시 생각해보고 접하라고 권하고 싶다. 각 Chapter에서 설명하는 개념에 대한 설명이 너무 간결하기 때문에 기초 서적부터 먼저 학습해야 하며, 참고 자료나 서적이 있어야 좀 더 저자가 원하는 바를 꽤뚫어볼 수 있을 것같다.

폴리글랏 시대, 개발자를 위한 통섭의 메시지 | 임백준 IT칼럼니스트


개발자 중에서 스택오버플로우를 모르는 사람은 없을 것이다. 코딩을 하다가 궁금한 내용이 있어서 검색을 하면 대부분의 경우에는 스택오버플로우에서 답변을 찾게 된다. 나 역시 매일 코딩을 하면서 많은 도움을 얻는 사이트다. 

지난 가을에 한국정보통신진흥원에서 뉴욕으로 연수를 보낸 젊은 개발자들을 상대로 강연을 할 때, 한국에도 스택오버플로우와 같은 사이트가 있는지 물어본 적이 있다. 

내가 들은 답변에 의하면 그런 사이트는 없는 것으로 드러났다. 연수원을 이끌던 교수님은 한국에는 ‘공유’의 문화가 결여되어 있기 때문이라고 설명해 주었다. 그렇다면 우리에게 공유의 문화가 왜 결여되어 있는가라는 질문이 떠오를 수밖에 없다. 많은 이야기가 있었지만 결론은 몇 가지로 압축된다. 

우선 자신감의 결여다. 내가 제공하는 답변이 맞는지에 대해서 확신하지 못하고, 내가 올리는 코드가 최선의 코드인지 확인할 수 없기 때문이다. 답변만이 아니다. 질문을 올릴 때 더 많은 갈등과 의혹에 휩싸이게 된다.

이런 질문을 올리면 내가 이런 것도 모르는 사람이라는 사실을 온 세상에 공표하는 것이 아닌가 하는 불안한 심정이 든다. 어릴 때부터 온전한 방식으로 질문하는 방법을 배우지 못하고, “닥치고 듣기만 하는” 교육방식에 길들여져 있는 영혼은 질문하는 것이 불안하고 불편하다. 

또 다른 이유는 먹고 살기 바쁘기 때문이란다. 날마다 야근을 해야 하고 마감일이 코앞인데 한가롭게 웹사이트를 돌아다니면서 남의 질문을 읽고 답하는데 사용할 시간이 없다. 궁금한 점이 있는 사람은 어차피 신속하게 답변이 올라올 것도 아닌데, 하는 생각이 들기 때문에 질문을 하지 않는다. 

질문에 대한 답을 알고 있는 사람 역시 자기 일이 바쁘기도 하고, 답변을 하는데 따르는 구체적인 ‘인센티브’가 없기 때문에 질문을 무시한다. 귀차니즘과 먹고살기즘 앞에서 장사가 없다. 

경쟁도 있다. 내가 터득한 비장의 ‘지식’을 나누어 줌으로써 잠재적 경쟁자들의 파워를 업그레이드 시키는 우를 범하지 않겠다는, 일종의 생존본능 같은 것이 키보드 위에 올라와 있는 손가락을 철수시킨다. 강신주 교수는 사람보다 돈을 더 중요하게 여기는 자본주의적 마인드가 우리의 영혼을 잠식했다고 지적하며, 인간중심의 철학을 회복할 것을 주장한다. 거시적으로 보면 그런 마인드가 공멸을 부를 수밖에 없기 때문이다. 

지식을 나누는 것조차 경쟁의 시각으로 바라보는 우리의 ‘본능’은 그런 의미에서 자기파멸적이다. 개인은 자신만의 작은 섬에 갇히고, 전체는 공멸의 늪에 빠진다. 

공유의 문화에 대해서 이야기를 꺼낸 이유는 통섭에 있다. 원래 뜻처럼 자연과학과 인문학의 결합에 대한 것이 아니라 프로그래밍 언어와 플랫폼의 통섭에 대해서 이야기해보고 싶었다. 요즘에는 단일한 언어와 플랫폼을 사용해서 하나의 시스템을 구축하는 것이 가능하지 않으며, 그렇게 하는 것이 바람직하지도 않다. 

내가 일하는 월가의 은행에서 자바와 C#이 하나의 시스템 안에서 뒤섞인 채 사용되기 시작한 것은 아주 오래 전의 일이다. 요즘에는 오캐멀, 파이썬, 스칼라, 클로저, F#과 같은 다채로운 언어를 혼용해서 사용하는 곳도 늘어나고 있는 추세다. 

데이터베이스 역시 관계형 데이터베이스의 독점적 지위가 허물어지고 캐시나 그리드를 활용한 인메모리 데이터베이스, 니오포제이(Neo4J)와 같은 그래프 데이터베이스, 몽고DB(MongoDB)와 같은 문서 데이터베이스 등이 프로젝트의 요구사항에 따라서 배치된다. 웹사이트를 개발할 때 사용할 수 있는 프레임워크 수도 일일이 셀 수 없을 정도다. 

각종 기술과 플랫폼이 비온 뒤 죽순이 자라나듯 엄청난 기세로 쏟아져 나온다. 그렇게 많은 것 중에서 어느 하나를 선택해서 평생을 먹고 살아야 한다고 생각하는 사람은 혼란을 겪을 수밖에 없는 시절이다. 선택을 내리는 것이 결코 쉬운 일이 아니기 때문이다. 

하지만 중요한 것은 그러한 선택 자체가 착각임을 깨닫는 것이다. 선택은 없다.

하나의 특정한 기술과 결혼을 해서 평생을 살려고 하는 사람은 시대착오적이다. 폴리글랏(여러 나라말을 구사하는 다국어 구사자를 일컫는다)의 시대에 결혼 따위는 존재하지 않는다. 2월 중에 한빛출판사에서 출간될 책의 내용 중에서 한 구절을 인용해본다. 

“앞으로 프로그래머는 어느 하나의 언어에 안주할 수 없다. 패러다임을 달리 하는 여러 개의 언어를 자유롭게 구사하지 않으면 살아남을 수 없는 폴리글랏 프로그래밍의 시대가 되었기 때문이다. 자신의 포트폴리오를 어떤 언어로 구성하는지는 각자의 몫이다. 하지만 앞으로는 프로그래머가 어떤 언어에 대해서 얼마나 많이 알고 있는가 하는 것이 아니라 어떤 언어를 얼마나 빠르게 학습할 수 있는가 하는 것이 더 중요하다는 점을 기억하기 바란다.” 

개발자에게 있어서 통섭의 다른 이름은 폴리글랏이다. 서로 다른 것들이 합쳐지면서 새로운 활로를 개척하는 것이 통섭이다. 그리고 공유와 통섭은 동전의 양면이다. 

한국에 스택오버플로우와 같은 웹사이트가 있는지 찾기 위해서 인터넷 검색을 하다가 우연히 만난 한국의 개발자 사이트를 둘러보면서 느낀 점은, 그들이 각각 자기만의 섬을 이루고 있다는 점이었다. 외롭고 배타적인 느낌이었다. 그들이 선택한 언어나 플랫폼 주변에서는 심지어 종교의 아우라가 뿜어져 나오기도 했다. X에 대해서 말하는 것은 곧 Y에 대한 배척이라고 간주하는 막장논리도 눈에 뜨였다. 

개발자들은 자기가 사용하고 있거나 새롭게 학습하고 있는 기술에 종교적인 의미(즉 배타성)를 부여하는 것을 경계해야 한다. 그것과 결혼하는 것을 두려워해야 한다. 공유를 통해서 섬을 탈피하고, 나눔을 통해서 통섭을 해야 한다. 끊임없이 바람을 피워야 한다. 지금은 폴리글랏의 시대이기 때문이다.

(출처: http://www.zdnet.co.kr/column/column_view.asp?artice_id=20140204123657)

+ Recent posts