혼자서 공부하려고 계획 중이었던 웹 서버 방식의 게임서버
를 컴투스 서버캠퍼스 1기
에서 체계적으로 배울 수 있었습니다.
그리고 하나의 목표를 정했는데 나의 상태를 점검해보고 새롭게 배운 것을 잘 정리해 성장의 발판으로 삼는 것입니다.
이전에 참여했던 프로젝트에서 지식, 인사이트를 얻은 것 같기는 한데, 내가 정말 성장했는지, 생각했던 것이 옳았는지 검증할 방법이 없었습니다. 다행히 이번 기회에 성과를 실제로 확인하는 경험을 할 수 있었습니다.
이전 프로젝트에서는 게임 서버의 구조에 대한 이해가 부족하다 보니 만들 대상을 명확하게 정의할 수 없었습니다. 따라서 개발 중간에 전체 구조를 수정해야 했고 기능 하나 하나를 구현하기 전 고민하는 시간이 길었습니다.
그래서 이번 개발에서는 무엇을 만들지, 어떻게 만들지 상대적으로 철저히 고민하는 과정을 거쳤습니다. 특히 기획서를 보고 모호하거나 불명확한 부분이 있을 때 실장님께 질문을 하였습니다.
매 화요일, 컴투스에서 전주로 돌아가는 기차 안에서, 기획에 필요한 기능과 그에 따른 구현 방법에 대해 생각했습니다. 수요일은 강의가 1~2시간 간격으로 진행되는 구조여서 개발에 집중하기 어려웠습니다. 대신에, 무엇을 어떻게 개발할지 보다 상세한 계획을 세웠습니다.
항상 수요일 저녁이 되서야 기능을 구현하기 시작했습니다.
프로젝트 초기에는 API 서버를 처음 개발하는 것이였기 때문에 이전 프로젝트
와 비슷한 어려움을 겪었지만, 10일 정도 지나면서 요청 처리 과정
과 기능 구현 방식
에서 일정한 패턴
이 있다는 것을 인식했습니다. 이를 정리하여 하나의 프로세스로 만들면서, '어떻게 만들까?'하며 고민하는 시간이 줄었고, 이는 작업 효율성을 향상시켰습니다.
이러한 개선이 가능했던 이유는, 구현한 기능들이 주로 데이터베이스 접근을 포함하고 비슷한 맥락으로 진행되는 유사한 작업이었기 때문입니다. 일관된 틀을 정립한 뒤에는, 약간의 수정만으로도 새로운 기능에 맞는 프로세스로 개발을할 수 있었고, 이는 빠르고 효율적인 진행을 가능케 했습니다.
무엇을 만들지에 대한 명확한 이해가 있을 때와 없을 때의 차이는 컸습니다. 기존에는 구현을 시작하기 까지 시간이 굉장히 오래 걸렸지만 이번 프로젝트는 효율적인 작업을 위한 방법 까지 고안할 수 있었습니다.
개발하는 것 이상으로, 회고하고 경험을 소화하는 과정에서 더 큰 성장을 할 수 있다고 생각합니다.
개발이 사냥이라면 회고는 퀘스트...?
이전 프로젝트에서 문서 작성과 목표 설정이 힘들었습니다. 하지만 기록한 내용은 회고와 포트폴리오 작성에 큰 도움이 되었습니다.
이번에도 같은 효과를 얻기 위해 개발 과정 중에 기록을 꾸준히 남겼습니다. 깃허브의 이슈 탭을 활용하여 고민이나 이슈를 거칠게 정리하고 마지막 주차에 이 내용을 블로그에 옮겨 다시 한 번 검토한 뒤 공유하였습니다.
이 과정은 5주 동안의 경험을 소화하고, 놓친 부분을 찾거나 잘못된 점을 수정하는 데 도움이 되었습니다.
데이터베이스, 웹 서버, MySQL, Redis 익숙하지 않았던 기술을 활용하고 멘토링 중 값진 것들을 많이 얻었지만 그 중 두 가지를 꼽고 싶습니다.
하나는 리팩토링, 다른 하나는 데이터베이스 입니다.
이번 서버 캠퍼스 기간 중에 내가 얻은 가장 값진 것은 실장님의 멘토링을 통해 깨달았던 코드를 작성하는 것에 대한 자세입니다.
실장님께서 좋은 코드에 관하여 첫 주차 부터 언급하셨습니다. 처음에는 잘 와닿지 않고 "이름을 잘 지어보자" 정도로만 생각했지만 3주차에 와서 멘토링 중 깨달을 수 있었습니다.
이미 이전 게시물에서 언급했지만, 자소서나 포트폴리오와 같이 수차례 작성하고 수정한 것에 비해, 왜 코드는 동작하면 더 이상 신경쓰지 않았을까?
그 날의 멘토링 이후로 반성하는 시간을 가졌고 프로젝트를 진행하면서 리팩토링에 많은 노력을 기울였습니다. 실제로 커밋 메시지를 보면 리팩토링과 기능 추가가 비슷한 비율로 존재합니다. (리팩토링 커밋을 rebase로 squash 했음에도 불구하고...)
이름을 어떻게 지을지 부터, 폴더 계층, 코드 분리, 중복 코드 제거, 로직에 이르기까지 여러 번 검토하고 고민하면서 코드를 개선하였습니다. 이 과정에서 로직에 대한 이해도가 깊어지고, 코드의 개선을 보며 만족감을 느꼈습니다. 개발 초기에 부여한 이름들과 현재 깃허브에 남아있는 이름들을 비교하면, 확실히 발전했다는 것을 알 수 있습니다.
데이터베이스에 접근하여 수정 또는 데이터를 읽는 일을 담당하는 클래스
1주차 : GameDatabase
3주차 : UserService, MailService, ... (분리)
5주차 : UserDataCRUD, MailDataCRUD, ...
기술 및 지식 중에서 가장 큰 발전을 보인 것을 하나 꼽자면 데이터베이스입니다. 컴투스 서버캠퍼스에 지원하면서 데이터베이스를 수강취소 하게 되었는데
화요일 수업 이었기에..
서버 캠퍼스 준비를 위해 도서관에서 전공 도서를 빌려 1주간 읽었습니다. 또한 동기분이 추천해준 유튜브를 통해 책에서 다루지 않은 인덱스와 다른 세부적인 내용을 공부했습니다.
프로젝트의 첫 주, ERD를 작성하는 과정에서 다소 어려움을 겪었습니다. 유저가 소유한 아이템의 저장 방식을 결정하는 데 많은 시간을 썼습니다.
처음에는 유저 정보와 함께 user_data
에 저장했으나, 새로운 아이템이 생길 때 마다 최대치를 수정해야 하는 비합리적인 상황이기 때문에 owned_item
으로 분리하였습니다.
'Item Code', 'Enhancement Count' 등 여러 속성을 종합하여 아이템을 식별하고 있었는데, 해당 방법 역시 동일한 수치를 갖는 아이템을 구분하지 못해서 auto increment
로 'ItemId'를 부여하는 방식을 최종적으로 사용했습니다.
이처럼 간단한 문제에도 시간이 오래 걸렸고 프로젝트를 진행하면서 ERD와 그에 따른 코드를 수정하는 경우도 10회 이상 되었습니다. 하지만 이런 시행착오와 데이터베이스 게시물에서 언급했던 고민들 끝에, 요청에 필요한 단위
라는 기준을 세울 수 있었고 효율성에 대한 고민을 더해 수정했습니다. 그리고 그 결과 나름 괜찮은 구조가 완성됐습니다.
최종적으로, 컴투스 서버캠퍼스 1기
에서의 경험은 지난 프로젝트에서의 성장을 확인하고 더 나아가 새로운 성장을 할 수 있는 기회였습니다.
열정적으로 기술, 취업 등 유용한 지식을 알려주시고 세심하게 챙겨주신 실장님과 과장님, 보이지 않는 곳에서 서버캠퍼스를 원활하게 운영해주신 모든 분들께 진심으로 감사를 전합니다.
서버 캠퍼스 기간 중 하나 아쉬운 것을 꼽자면 5주라는 짧은 기간 진행되었다는 것입니다. 시작 전에는 실시간 요소를 넣어보고 싶었는데 학업 병행 및 시간적 한계로 시도하지 못했습니다.
또 마지막 주차에 테스트에 대한 설명을 들으면서 그 동안 효율적인 테스트를 해보고 싶은 마음이 있었기에 유닛 테스트를 시도해 보고 싶었지만 남은 시간이 얼마 없었기에 리팩토링을 진행한 뒤 글을 작성하는 것에 집중하였습니다.
좋은 코드를 위한 고민, 코드를 검토하고 리팩토링을 하는 것은 정말 값진 경험이었습니다. 앞으로 진행할 프로젝트에서도 좋은 코드를 위한 고민을 지속적으로 하여 한 눈에 알아보기 쉬운 코드를 작성할 것입니다.
실시간 요소와 테스트가 못내 아쉬운데 C# 소켓을 사용한 턴제 전투와 유닛 테스트를 구현할 것입니다.
훗날 서버 캠퍼스 n기에 참여하려는 분들이 계신다면, 개인적인 경험을 바탕으로 강력하게 추천드립니다.
모니터, 식사, 간식, 카페 등 개발에만 집중할 수 있는 환경과 편의 시설 그리고 수료 시 지급되는 장학금!