나름대로 잘난 맛이라는 함정
지난 번에 언급한 것처럼 이번부턴 적당히 편하게 써보려고 한다. 이번 글에선 한참 내가 C를 어느 정도 쓸 줄 알게 됐을 즈음 첫 팀 프로젝트를 했을 당시의 이야기를 좀 늘어놓을까 싶다. 갑작스럽게 지난 글에서 1년의 시간을 건너뛰어 고등학생 1학년을 마칠 즈음인데, 그 사이에 겪었던 일이나 사건들은 나중에 따로 정리할 때가 있을테니 당장 오늘 생각나는 것부터 쓰는 게 좋을 것 같아 이 내용을 먼저 쓸 것이다. 그리고 부제에서도 느낄 수 있겠지만, 반성의 의미가 짙은 회고록이 될 것 같다.
우선 사전 배경을 좀 설명하자면, 내가 다녔던 고등학교에선 겨울방학이 되면 한 학년을 마무리짓는 의미의 프로젝트를 진행해야 했다. 프로젝트를 한다는 것은 기획, 프로그래밍, 그래픽 디자인으로 나뉘어져있던 세 전공의 학생들이 팀을 이뤄서 방학 막바지에 최종 발표를 하는 것을 목표로 개발을 수행하는 것이었다. 이 때 만드는 게임은 최종 발표에서 시상을 하기도 했지만, 이후에 교외의 공모전에 출품하는 용도로도 쓰였기 때문에 좋은 팀원을 모으는 것이 꽤나 중요했다.
그 당시 나에게 형성된 이미지는 실력이 엄청나게까진 아니어도 코딩을 꽤 잘한다 하는 정도는 되었던 것 같다. (이미 엄청나게 잘 하는 실력자의 이미지는 다른 친구가 견고히 그 입지를 다지고 있었고 동창들 중에선 누구도 그 친구를 실력으로 이겨보려 생각하는 것조차 쉽지 않았다. 뭐, 사실 지금이라고 다를 것 같지도 않다.) 나 스스로 그렇다는 자신감도 있었기 때문에 기획안 중에서 내가 원하는 기획을 고르면, 어지간히 나와 실력이 비슷하거나 높은 친구와 같은 기획안을 고르지 않는 한 경쟁없이 내가 팀의 리드 프로그래머로 선택될 가능성이 높다고 생각했다.
그렇게 생각하기도 하는 한편, 웃기는 얘기긴 한데, 나는 나에게 은근히 만들어진 그런 이미지에 왠지 모르게 반항심같은 게 있던 차였다. 내가 스스로 실력있다고 믿는 것과 그런 이미지를 받아들이는 것은 서로 다른 것이었다. 그건 마치 모두가 내 실력은 전혀 검증해보지 않았으면서 '그냥 잘한다니까 쟨 잘하나보다.' 하고 여기고, 그래서 '당연히 잘 하는 친구들하고 팀을 이루겠지.' 멋대로 생각하는 것과 같은 것이었다.
그런 분위기의 흐름에 호응하기라도 하듯, 나름대로 기획이나 디자인에서 자신있던 몇몇 친구들 중에선 좋은 팀원을 구해야겠다는 생각에 나에게 먼저 같이 팀을 구성하는 것에 대해 제안을 해오기도 했다. 하지만 난 말했듯이, 나름대로 사춘기 시절의 반항심이었을까 싶게도, 나를 자기들과 동일시 여기는 그런 취급에 대해 별로 기분이 좋지 않았다.
내가 그 친구들을 깔보거나 낮게 봐서 그런게 아니었다. 그 친구들이 동급생들 간에선 잘 하는 축이었고 같이 팀을 했으면 충분히 좋았을 그런 친구들임은 분명했다. 음, 이 기분을 어떻게 설명할 수 있을까? 왜 그런 느낌들 있잖나? 뭐랄까, 잘난 애들끼리 뭉쳐있으면 좋은 것을 만들어내는 것이 당연하다고 여기는 분위기가 만연하니 잘난 집단에 속하는 것이 싫은 기분. 남들이 멋대로 생각하는 것에 부응하는게 싫기도 했고, 또 내가 그런 부류에 속하게 되면 내 스스로가 정말 잘나서 뭔가를 잘 만들게 되더라도 나는 순탄한 부류에 속했기 때문에 당연히 좋은 걸 만들었겠지 하고 나에 대한 평가가 저평가될 것 같은 기분도 들었던 것 같다. 그래서 나는 모든 선제적 제안을 다 물리치고 그들에게 기획 발표를 보고난 후에 결정하겠다는 도도한 답을 돌려주게 되었다. 어쨌든 나로써는 제안을 먼저 받은 입장이다보니 뭔가 더 자신감을 가져도 될 것 같았고, 흥미진진해하며 기획 발표날만을 기다리게 되었다.
대망의 기획안 발표일, 모든 학생들이 팀 구성을 위해 모였고 기획 전공인 친구들의 발표가 시작됐다. 발표되는동안엔 각 기획안들에 대해 이것 저것 나름의 기준으로 기획들을 점수 매겼다. 그 중엔 만들고 싶지 않은 게임도 있고, 쓸데 없이 너무 과한 포장을 하는 듯한 게임도 있었다. 물론 이미 상용 서비스 중인 게임들과 비슷한 종류들도 있었는데 특이하게도 저마다 꼭 하나씩은 참신한 부분들을 갖고 있었다. 근데 그건 딱히 좋았던 점은 아니었던 것이, 마치 '이건 참신해야 해!' 라고 소리지르는 것 같은 느낌이어서 썩 와닿지는 않았고, 때문에 점수를 매기면서도 뭘 선택해야 좋을지 선뜻 선택하기가 쉽지가 않았다.
그렇게 발표를 시큰둥하게 보고 있던 중에 학교에서 시끄럽기론 둘 째라면 서러울 또라이의 기획안 발표를 보게 됐다. 발표 시작 전부터 거르려다가 어쨌든 점수는 매겨볼까 싶어서 유심히 봤던 프레젠테이션이 마음에 꽂혀버린게 문제였다. 심지어 그 프레젠테이션은 구성도 허접하기 짝이 없었고 더군다나 발표의 핵심인 게임도 그 자체론 단순하기 짝이 없었다.
벽돌 위에 올라간 여자 친구를 구하기 위해 주인공이 아래에서 망치로 벽돌을 깨부수면 맨 아랫 벽돌부터 부숴지고, 차례차례 벽돌을 부숴 여자 친구를 지면으로 내려보내면 스테이지가 클리어된다는 설명으로 모든 게 끝이었다. 심지어 캐릭터 컨셉도 졸라맨이었다. 보는 내내 그 단순함에 정말 준비 안 하고 대충했구나 싶어 어처구니 없으면서도 오히려 과하고 쓸데 없는 설정도 없고, 참신하려고 억지스럽지도 않고 간단명료한데가 맘에 끌린듯 했다. 결국 기획안을 선택하는 투표에서 난 그 또라이의 유일한 투표자가 됐고, 후에 그래픽 디자인을 맡을 친구, 보조 프로그래머 역할을 할 친구 둘이 더 결졍되어 내 첫 팀 프로젝트를 시작하게 됐다.
1학년은 프로젝트로 WIPI-C 2.0 (wi-fi, 와이파이가 아니라 위피다!)을 이용한 모바일 게임을 만들도록 되어 있었다.(이건 아직도 검색하면 뭔가 개발용 API에 대한 PDF가 나오더라.) 당시의 모바일 게임이란 것은 알만한 사람들은 다 알겠지만, 그렇게 큰 규모의 것이 절대 아니었다. 모바일 플랫폼이란 것의 사양은 PC의 발끝에도 미치지 못하는 것이었다. 물론 그 와중에도 '영웅서기 시리즈'나 '미니게임천국', '프로야구 시리즈' 셀 수도 없이 많은 대박의 반열에 오른 게임들이 있었지만 사양을 떠나 시장 규모로 봐서도 지금같은 대 모바일 시대에 미치지 못함은 물론, 당시의 PC 온라인 게임과 비교는 어불성설이라고 볼 수 있었다. 지금 다시 생각해보면야 굳이 모바일 플랫폼으로 만들었어야 했을까 싶긴 하지만, 당시엔 확실히 그런 인식이었기 때문에 C를 갓 1년 교육과정으로 가르친 1학년한테 API 조금 더 가르쳐서 만들어보라고 시키는 것이 당연하다고 생각했다.
작업을 시작하고 나선 팀 프로젝트란 것이 불신과 반목의 근원이라는 것을 깨닫기까지 그렇게 오랜 시간이 필요하진 않았다. 또라이 기획자는 역시나 놀기 바빠서 오히려 내가 스스로 아이디어에 살을 덧붙여서 게임을 발전시켜나가야 했다. 그래픽 디자이너라고 다를 것 없이 게임하기에 여념이 없어 중간에 그래픽 담당 선생님이 나를 타이르려는 노력까지 했다. 프로젝트 진행 중간 즈음에 팀들 몇몇이 와해되는 일이 좀 있었던 모양인지 그래픽 못 쓰겠다고 내쫓지 말아달라는 의미였던 것 같다. 하지만 고작 졸라맨 하나 그리는데 며칠씩이나 걸리는데다, 언제까지 수정 좀 해달라고 해도 들어먹질 않으니 내가 픽셀까지 찍어야 하는 번거로움까지 감수해야만 했다. 그나마 내가 어릴 적에 RPG쯔꾸루로 캐릭터맵들을 픽셀 색깔 찍어가며 고쳐본 적이 있던 터라 심적 거부감없어서 망정이었지.
서브 프로그래머를 둘 정도 뒀었던 기억이 있는데 걔들도 특별히 다를 건 없었다. 사실 당시의 모두는 게임을 만드는 학교로 모인 것에 비해, 별로 게임을 만드는데는 크게 재미를 느끼지 못했던 것 같다. 프로젝트 작업 시간이라고 선생님들이 돌면서 감시하던 오전 9시부터 오후 4시까지의 시간엔 활력도 없이 축 쳐지던 녀석들은 작업 시간만 끝나면 후다닥 청소를 끝내고 삼삼오오 모여 워크래프트 유즈맵이나 메이플스토리 등 온갖 게임들을 하기에 바빴다. 나도 물론 게임을 즐겁게 해줄 용의가 충분히 있었는데 불행히도 당시 학교의 AP 환경이 너무 좋지 못해 즐겨하던 마비노기에서 사냥만 했다하면 렉으로 죽는 일이 태반인 터라 분노하며 게임 시간을 줄일 수밖에 없었다.
대신에 자투리 시간도 모두 쏟아부어서 코딩을 해대었는데, 주말엔 종종 게임을 하는 경우는 있었어도 평일엔 거의 밥 먹고 코딩하는 시간밖에 없었다. 다만 그것이 프로젝트 진행을 위해서라기보단 거의 자기만족 수준의 코드를 짜기 위해서였던 것이 함정이었다. 프로젝트 매니징을 원래는 기획자가 했어야 했지만 위에서 이미 팀원의 수준은 충분히 언급했으니 무시하고 넘어가자. 딱히 누가 기능 구현에 대한 시간적 압박을 가하는 것도 아니었고 나 스스로 열심히 푸시푸시 해야만 일이 진행되는 수준이었으니, 내가 기능을 구현하다가 갑자기 좋은 생각이 난다 싶어 코드를 고치거나 기획적 내용을 추가해도 방해할 사람도 없고 코딩만 잘 해두면 만사 오케이인 상태였다.
프로젝트 진행을 하면서 재밌던 것이, 프로그래밍 파트들 간에 코드 라인 수를 가지고 잠깐 사소한 자존심 경쟁이 붙은 일이 있다. 프로젝트 시작한지 일주일 정도 지났을 때였나? 프로젝트 하나만 며칠 동안 코딩을 해왔으니 어느 정도 프로젝트가 본 궤도에 오르기 시작한 친구들은 백 단위 라인의 코딩을 하게 될 즈음이었는데, 자기는 800줄이니 1,000줄이니 하며 경쟁을 하게 된 것이다. 당시의 나는 고작 400라인 쯤 되었다. 그런데 그 녀석들 코드를 찬찬히 살펴보고 있노라니 불필요한 컨디션에 루프에 영 말이 아닌 코드들이 가득한 것이다. 심각하게는 들여쓰기 6, 7중첩의 코드들도 있었는데, 계속 보다보니 마치 중3의 나를 보던 기분이 문득 들어버려서 이후에 더욱 더 함수로 일반화할 내용들을 최대한 일반화하려고 노력하게 되었다.
그래서였나, 첫 스테이지를 마무리하는 것을 보기까지가 다른 친구들에 비해 굉장히 오래 걸렸다는 느낌이 들 정도였다. 한 달 남짓의 시간을 썼었나? 기억도 잘 안나지만 코딩하는데 굉장히 공을 들였다. 생각의 깊이가 모자랐던 시절이라 조금 짜다가도 비슷한 코드가 나오기 일쑤였고, 그럴 때마다 구현하던 것을 잠깐 멈추고 그런 것들을 묶어서 함수로 만드는 일을 다시 하느라 시간이 곱절은 걸렸던 것 같다. 물론 목표한대로 코드는 그리 폭발적으로 증가하지도 않았고, 원하는 곳에서 데이터를 맘대로 변경하려고 하다보니 자연스럽게 포인터를 익힐 수밖에 없게 되었다. 스스로 C언어의 온갖 문법에 대한 것을 상당히 자연스럽게 쓸 수 있게 됐다고 생각하게 될 정도로 책도 많이 봤던 시기였다. 키 입력 처리를 하다보니 콜백 개념을 갓 익히기 시작할 수도 있었다.
지금봐선 조악하기 짝이 없는 프로그래밍 실력으로 구현하던 것이었지만 그 게임 하나를 만드려고 여러 가지 기능들을 구현했었다. 프레임 애니메이션을 적절히 재생시켜주는 API가 딱히 없어서 별도의 코드를 짜서 애니메이션될 수 있도록 간단한 샘플 코드를 받아서 사용했는데 이미지 사이즈의 변화라든가 프레임의 변화가 있을 때마다 매개변수로 처리될 수 있도록 하는, 지금와선 너무도 당연한 처리가 며칠씩 고민한 끝에 구현됐고, 재생될 이미지 사이즈가 달라지게 되더라고 일정한 규칙으로 정하여 그릴 수 있는 방법이라든가, 나름대로 용량 좀 줄여보겠다고 리소스 이미지들을 묶어서 처리한다든가, 동일하게 사용되는 리소스에 대해 여러 개체가 해당 리소스를 접근하도록 관리하는 개체를 만들어본다든가 등의 구현을 하게 됐다. 이것들 모두, 다행스럽게도, 내가 하나를 알려주면 열까진 아니어도 한 서너개 정도는 이것 저것 해보면서 코딩하려고 욕심을 부렸던 덕분에 할 수 있었던 것들이다. 지금와서 생각해보면 그 욕심은 프로젝트를 완성시키지 못하더라도 이런 건 해봐야지에 더 가깝긴 했다.
어쨌든 그렇게 열심히 만들어나간 게임의 최종발표는 기획자가 아니라 내가 하게 되었는데, 그건 순전히 '못미더운 기획자는 밀어내고 내가 해야지 하던 욕심이 컸기 때문이다. 2학년 선배들이 강당에 가득차있고 선생님들이 심사위원으로 앉아있던 자리에서 내 멋대로 손짓 몸짓 써가며 발표를 했는데, 당시의 나는 너무도 내가 만든 것에 자신감이 넘쳐있어서 앞에 앉아있던 많은 사람들을 웃기게 만들기도 했다. 중간에 버그가 나타났는데도 쿨하게 "아, 이건 도중에 아직 해결되지 못한 버그입니다! 약간의 문제는 있긴 하죠." 하면서 개의치 않고 넘어가기도 했고 발표라기보단 약장수 약 파는 느낌으로? 10분이었나, 20분이었나 주어진 시간을 마치고 모든 게 끝났다는 느낌으로 나가기까지도 당당함 그 자체로 일관했다.
당시의 나를 돌아보자면 위에서도 말했지만 '내가 이런 엉망인 팀을 이끌고 여기까지 해냈다!' 하는 것을 만든 게임보다도 더 어필하고 싶었던 것이다. 뭐, 사실 이렇게 글 쓰는 것도 나 잘났었다 어필하는 것의 일종이기도 하니까, 여전히 그런 성격은 고쳐지진 않았다고 볼 수 있을 것도 같다. 물론 이젠 그렇게 엉망인 걸 내놓는게 얼마나 부끄러웠던 짓인지 알고 있는게 그나마 나아진 점이라면 그렇다고도 할 수 있겠지.
뭐, 이렇게만 말하면 내가 만들어내지도 못한 걸 가지고 약을 팔아서 발표를 한 것처럼 비춰질 수도 있을 것도 같아 변명을 좀 덧붙이자면, 애초에 이 게임은 세 가지의 미니 게임을 만들기로 기획된 게임이었다. 당연히 위에서 설명한 게임 외에 두 개를 더 만들었어야 했는데, 우리의 또라이 기획자가 했어야 할 첫 번째 게임의 기획마저도 구체적으로 틀을 잡아간 것이 그가 아니라 나였으니 나머지 두 번째와 세 번째는 오죽했겠나. 더군다나 첫 번째를 제외한 나머지 게임들은 영 재미가 없어보이니 좀 더 재밌을만한 다른 걸 생각해보자고 몇 번이나 제안했지만 이상한 게임만 두 개 더 생각해왔을 뿐이었다. 결국 정확한 기획적 요구 사항도 없이 이도 저도 아닌 것들이 만들어지고 말았다. 역시나 폴리싱을 더 열심히 해서 하나를 제대로 만드는 쪽이 더 나았겠다 생각한 건 두 번째 게임에서 감추고 진행하려던 버그가 커맨드를 잘못 입력한 바람에 속출했을 때였다. 즉, 이미 늦은 후였단 얘기다.
위에서 만들었다고 열심히 나열한 기능들은 최대한 일반화하고자 하긴 했지만 어쨌든 첫 번째 게임을 만드는데 집중했던 부분들이었고, 첫 번째 게임에선 무난하게 시연을 마칠 자신도 있었기 때문에 나머지의 두 게임을 소개하는 부분을 아예 발표 내용에서 없애고도 싶었다. 그럼에도 불구하고 그대로 넣어서 진행한 이유는 기획에 언급한 모든 것들을 그대로 발표해야 한다는 강박관념 때문이었다. 중간 발표가 있을 때마다 기획자는 제대로 만들 생각도 없는 주제에 열심히 '총 세 개의 게임을 만들 것입니다.' 라고 어필해버린 걸 선생님들이 잊었을리 없기도 했고, 그 와중에 난 또 "제 능력 부족으로 미처 나머지는 완성되지 못했습니다."라는 매끄러운 말을 차마 입에 올릴 수 없어서 억지로 완성되지 못한 부분까지도 대충 땜빵 처리로 밀어붙이려 했던 것이다.
다시 돌아와서, 결과야 어떻든 내가 보여준 발표에서의 당당한 태도 때문인지, 프로젝트를 진행하면서 코딩에만 전념한 것이 충분히 어필이 된 덕분이었는지 모르겠는데, 어쨌든 난 버그를 만들긴 했어도 무능한 팀 뒤에 노력한 일등공신으로 비춰질 수 있었다. 그나마 첫 번째 게임만 놓고 평가해서 다른 팀들에 비해 잘 만든 취급을 받았는지, 아니면 그냥 학교 차원에서 상을 막 뿌려줬던 건지 동상도 받게 되었다. 그 아래 등급으로도 상을 받은 게임들이 있던 걸 보면 아무래도 후자가 맞는 것 같지만.
그렇게 첫 번째 프로젝트를 마치고 나는 그 팀원'놈'들과 다시는 팀을 꾸리지 말자고 결심하고, 또 괜히 사서 고생하지 말고 좋은 애들 모아서 게임 만들자는 생각을 갖게 되었다. 개인적으로 이 경험에선 실패의 원인을 스스로에게서 찾지 않았다. 당시의 난 스스로 열심히 했고 능력도 충분하고 노력도 꽤 많이 한다고 여겼다. 프로젝트를 제대로 완성시키지 못하고 말아먹기를 몇 번을 더 반복한 뒤에서야 문제를 스스로에게서 찾기 시작했는데 그에 대해선 또 차근차근 얘기하게 될 것 같다. 그럼, 첫 번째 프로젝트에 대한 회상은 여기서 마무리 짓기로 하자.
덧
열심히 회상하다 보니 아무래도 그 당시에 짰던 코드나 리소스들이 궁금하여 글을 쓰는 와중에 열심히 과거의 자료들을 찾아봤지만, 글 중간에 언급한 실력자 친구가 떨어뜨려 고장내버린 후로 창고에 쳐박힌 외장하드 안에 그 자료들이 들어있는 것 같다. 다시 그 때의 코드나 자료를 꺼내보며 구체적으로 과거 회상을 하지 못하는 점이 굉장히 아쉽다. 그 와중에 위에서 만들었다는 게임은 아니지만 이를 아이폰용 게임으로 리메이크하던 때의 자료들을 발견했다. 이 글의 타이틀로 쓰인 이미지도 이 리메이크 버전에서 사용된 것이다. 꺼낸 김에 몇 개 리소스 좀 더 꺼내보자.
깨져야 할 블록주제에 엄청 귀엽게 그려졌다. 리메이크는 고3에 졸업 프로젝트로 하고 끝내자 하는 마음으로 진행하던 것이고, 동급생들과만 팀을 꾸리던 당시의 분위기와는 이례적으로 당시 친하게 지내던 고2였던 후배들과 팀을 구성해 만들게 되었다.
첫 번째 프로젝트와는 달리 리소스도 비교적 멀끔하게 잘 뽑혔었고, 이미 한 번 만들어봤던 게임인지라 기획적인 프로세스도 특별히 추가적으로 더 요구되는 것도 없었지만 이 프로젝트 또한 엉망으로 마무리되고 만다. 당시는 아이폰 개발을 손에 잡은지 얼마 안 될 시점이었고, 설계 과정에서 UI 컴포넌트에 대한 이해가 부족했던 터라 유저의 입력이 간혹 미스나는 버그가 있었다. 심지어 혼자서 물리공부한 거 써먹어보겠다고 오기를 부리면서 만들었는데, Box2D가 이미 잘 배포된 시점인 상황에서 괜히 욕심만 부리고 엉망이 된 경험으로 남게 되었다. 이 때만해도 아직 고3이었으니 여기서라도 맘 고쳐먹고 정신차렸으면 이후에 더 실패를 겪진 않았을텐데, 그 후로도 몇 년이나 더 실패의 경험이 발목을 붙들고 늘어진다. 흐음, 너무 자괴감이 드니 이쯤에서 덧 끝.