팀단위로 웹소켓 연결을 이용한 간단한 타워디펜스 게임을 만들었다.
데이터 처리(연산이나 검증)에 대해 클라이언트에서 조금 처리를 할 지
아니면 서버에서 모든 것을 처리할 지 팀원들과 고민했다.
백엔드 중심으로 만들 거라면 그래도 서버에서 연산과 검증을 끝내고 클라이언트에서는 서버로부터 받는 데이터를 사용만 하는 식으로 만들어야겠다 생각하고 방향을 잡았다.
문제는 이렇게 생각한 것이 프로젝트를 시작한지 4일이 지난 후였다...
우리 팀의 문제점은 많았다.
어떤 식으로 코드를 짜낼 것이고 프로세스를 세세하게 이해하지 않은 채로 일단 코드가 아닌 게임의 기획단위로 (타워, 플레이어, 스테이지, 몬스터 등) 파트를 나눠 코드를 써내려가기 시작했다.
문제는 그래서 그 코드들을 어떻게 병합할 지에 대해선 새하얀 도화지에 생각없이 먹물을 뿌린 그림을 그리듯 어떻게든 되겠지라는 마인드로 서로 일단 만들어보고 그림의 틀이 보인다 싶으면 달려들자는 마인드였다.
서로가 쓰는 prettier도 다르고 누구는 if를 쓰고 누구는 switch를 쓴다.
누구는 try~ catch를 쓰려고하고 누구는 if(condition) { throw new Error}를 쓴다.
어디서 어떻게 에러처리를 할 지
어느 범위까지 연산을 담당하고 어느 범위에서는 데이터를 저장할 지
DB에 접근하여 처리하는 기능을 어디서 담당할 지
웹소켓 통신을 주고 받는 핸들러는 이벤트 응답을 어떻게 할 것인지, 또 클라이언트로 어떻게 메시지를 요청할 것인지, 맵핑은 할 것인지, 할 것이라면 어떤 식으로 정의할 것인지
폴더 단위를 어떻게 나눌 것인지, 파일명은 어떻게 지을 것인지, 변수명은 어떻게 지을 것인지
나열한 것들 뿐만 아니라 더욱 세세하게... 이런 것들을 다 확실하게 정하고 갔다면
누구 하나가 특출나서 하드캐리하는 게 아닌 이상 서로가 서로에게 시너지를 낼 수 있는 환경이었을텐데 하는 후회가 좀 있었다.
누군가는 능력이 뛰어나서 속도가 빠르기 때문에 일거리를 더 달라고 하고
누군가는 너무 어렵다고 코드를 못 치겠다고 한다.
또 누군가는 우리가 만드는 프로젝트는 데이터를 A 형태로 주고받겠다고 생각했는데 다른 사람이 B 형태로 주고받는 것으로 생각한다는 그 의견차이 때문에 서로간의 대립도 있었다.
애매모호한 부분에 대해서 서로 이야기를 나눠 확실히 하지 않는다면 매듭짓지 못한 부분은 결국 고름으로 남기 마련이었다.
갑자기 새로운 폴더가 생겨있고 정체를 알 수 없는 기능들이 추가되기도 했는데 서로가 서로를 믿지 못하고 나중엔 결국 누군가는 프로젝트를 완성하지 못할 거라고 생각했다고 한다...
그럼에도 결국 서로가 서로를 믿으며 프로젝트 마감기한 전날까지도 항상 새벽까지 남아 에러처리나 버그를 잡는 것, 최적화를 위해 의견을 활발히 나누는 팀이 되었다.
진짜 별 거 아닌 프로젝트라고 생각하면 별 거 아닌 미니프로젝트다...
전문가들이 보기엔 미완성의 바보같은 프로젝트라고 할 수도 있지만 거기서 우리는 서로 많은 것을 깨달았다.
부트캠프 내 6명이라는 조의 조장 직책을 맡은 나는 어떻게든 프로젝트를 완성하고 싶었다.
작은 것도 완수해내지 못하는 사람은 큰 일도 해낼 수 없다는 것을 안다.
IT는 처음인지라 사실 생태계를 잘 모른다.
하지만 나름 여러가지의 사회경험을 통해 분야를 막론하고 어느 곳이든 책임감이라는 녀석은 항상 중요했다는 걸 안다.
그래서 끝을 보기 위해 결단을 내렸다.
어떻게 팀을 바꿀 수 있을까 고민했다.
사실 내가 뛰어나다거나 현재 프로젝트에 기여하는 부분이 눈에 띌 만큼 많지는 않았다.
그치만 조장으로서 조원들이 만든 코드들을 병합하고 기능을 어떤 식으로 구현해나갈지 기획 방향성에 맞는지 재차 확인하면서 서로 의견을 나누고 프로젝트의 궁극적인 완성 방향을 이해하고 있는지를 항상 물어왔다.
프로젝트 4일째 되던날에도...
조원 모두가 삽질에 삽질을 이어가면서 특정 폴더를 만들고 해당 폴더 내에 구현할 기능들을 나눠 데이터를 주고 받을 위치, 연산할 위치, 저장할 위치 등을 정하기 시작했다.
이 폴더에서는 어떤 기능을 할 때 사용할 함수들을 정의해놓자
이 폴더에서는 클래스들을 만들어 사용하자
이 폴더에서는 특정 데이터들을 저장할 수 있는 기능만을 담자 등...
프로젝트 시작 5일째 되던 날
우선 당일 아침 팀원들에게 특정 시간에 모두 모여달라고 했다.
팀에 폭탄발언을 던졌다.
처음으로 좀 모진 말을 했다.
"우리 이대로면 완성 못합니다."
"방향을 확실히 정하고 가야겠습니다."
"미리 욕해주십시오. 제가 잘못 정한 탓입니다. 일단 욕을 듣더라도 비난 감수하고서라도 제가 독단적으로 팀장으로서 한 번 지시를 내리겠습니다."
"저희가 지금까지 서로 회의하면서 나눈 내용을 제가 보기엔 다르게 이해하고 있는 것 같습니다."
"한 분씩 이 부분, 저 부분에 대해서는 어떻게 이해하셨는지 말씀해주세요."
욕을 먹을 각오를 하고 말을 꺼냈다.
잠깐의 정적 동안 아무도 먼저 입을 열지 않았고
"OOO님부터 부탁드릴게요!"
라고 하자마자 봇물터지듯 서로 어떻게 이해해왔는지를 함께 이야기하게 되었다.
생각했던 것보다 조금 심각했다.
방향이 완전 틀렸다.
콜럼버스가 인도를 약탈하려 항해했는데 아메리카를 발견했다고 하던가?
차라리 아메리카라도 찾았으면 다행이지 배가 좌초되기 직전이었던 것을 우리 조는 모두가 깨닫게 되었다.
그 다음부터는 하루에 세 번, 점심 먹기전, 저녁 먹은 후, 한 밤 중에 서로 의견을 나누고 싶다면 항상 모두가 모여 그 이야기를 듣고 서로 간에 피드백을 해주며 코드를 열심히 짜기 시작했다.
프로젝트 8일째 되던 날
각종 에러와 버그가 터져나왔다.
기능 구현은 다 했다고 생각했는데 생각지도 못한 곳들에서 이런 상황이 생기니 서로가 패닉이었다.
어쩌겠나 끝은 봐야지
... 그러다가!
결국은 완성은 하게 되었다.
커뮤니케이션은 굉장히 중요하다.
개발 실력이 뛰어나다면 이런 미니프로젝트 쯤은 그냥 혼자 만들어도 되겠지라는 생각을 할 수도 있다
하지만 지금 겪는 것들은 단순히 잘 만들어서 실력을 증명하기 위한 것이 아니라고 생각한다.
작은 프로젝트에서도 큰 깨달음을 얻을 수 있다는 것을 이번 프로젝트에서 알게 되었기 때문에.
소통은 활발히
방향성은 확실히
코드는 간결히
가장 중요한 요소들이라고 생각이 되었다.
눈이 충혈되서는 다음날 일어나서 눈이 아플정도였던 하루도 있었다.
그래도 재미는 참 있었다.
머리는 지끈지끈 아픈데 서로 고생하니 친해지게되고 재미가 붙었다.
프로젝트 개발에 속도도 붙었다.
이런 재미로 다들 개발을 하는가 싶었다.
결과물을 첨부하기엔 너무나도 부끄럽기에 스크린샷만 하나 포스팅하고
오래도록 이 글을 읽으면서 입에 피맛이 느껴질 때까지 열심히 했던 지난 열흘 간을 되돌아 볼 수 있기를 나 자신에게 간절히 바란다.

