보이지 않는 것의 매력, 서버 프로그래머
비밀의 가상 세계를 그 누구도 모르게 완벽한 세상으로 만들어내는 뿌듯함. 화려하고 역동적인 것 속에 숨겨진 뒷면을 들여다보는 재미. 잘 할수록 사람들에게 잊히는 미묘함.
이 모든 신비로운 매력의 주인공은 바로 <서버 프로그래머>. 게임듀오의 창민님이 들려주는 서버 프로그래머만의 매력에 푹 빠져볼까요?
반가워요 창민님! 개발자에게 중요한 첫 커리어를 게임듀오에서 시작하셨어요.
저도 첫 회사를 선택할 때 고민이 많았는데요. 이제 막 배우기 시작한 신입으로서 제일 중요하게 생각한 것은 회사의 ‘성장성’이에요. 여러 회사를 찾아보던 중 게임듀오를 알게 됐고, 회사가 놀라울 만큼 빠르게 성장하고 있더라고요. 다양한 게임이 출시되고 플레이 되는 만큼 많은 트래픽이 일어날 것이고, 이 환경이 저 같은 주니어 개발자의 성장에 큰 도움이 될 것이라고 생각했어요. 처리해야 하는 요청이 다양하고 많을수록 배울게 많으니까요.
게임듀오만의 개발 문화, 한 가지만 자랑해 주세요!
팀원들 모두가 배움에 열정적인 문화를 자랑하고 싶어요. 옆에 있는 동료들 모두 열의가 넘치다 보니 저도 같이 으쌰 으쌰 하게 되더라고요. 회사에서 서적이나 강의에 대한 업무 역량 교육비를 지원해 주는데 팀원들과 굉장히 잘 활용하고 있어요. 일을 하다 보면 새롭게 도입하거나 공부해 보고 싶은 기술이 생기는데, 회사가 팀원들의 성장을 응원하고 힘을 보태주는 분위기라 실질적인 학습의 기회가 많이 주어져요.
또 한 가지만 더 자랑하자면…ㅎ 어떤 실수를 발견했을 때 누구를 탓하는 게 아니라, 다음에 똑같이 발생하지 않도록 해결법을 함께 생각해 내요. 그 과정 속에서 새로운 방법을 찾기도 하고, 서로가 더 책임감을 갖게 되는 것 같아요.
게임듀오에서 서버 프로그래머의 역할은 무엇인가요?
가장 큰 역할은 모바일 게임 서버 전반을 설계하고 유지 보수하는 일이에요.
먼저 각 게임 프로젝트의 클라이언트 개발자와 협업하며 API를 개발하는데요. API는 서버와 게임 클라이언트가 원활히 상호작용하고 정보를 주고받을 수 있도록 하는 ‘약속’, ‘신호’ 같은 거예요. 이게 원활히 작동되도록 시스템을 구축해요.
또 이 정보에 맞는 클라우드 인프라를 관리해요. 클라우드는 말 그대로 둥둥 떠있는 구름이죠. 게임 관련 서버와 리소스를 관리하는 가상의 저장소라고 이해하시면 좋아요. 이것을 더 원활하고 효율적으로 운영하기 위해 계속해서 유지하고 보수해요. 간단하게 요약하자면, 게임 내 데이터를 안전하고 효율적으로 저장하고, 빠르게 전송하는 게 핵심 역할이에요.
안정적인 서버 관리를 위해서 기술적으로 어떤 노력이 필요할까요?
현재 사용 중인 기술에 대한 이해가 중요해요. 게임듀오에서 사용하는 MySQL을 예로 들면 ‘테이블의 인덱스를 어떻게 생성하고 활용할지’, ‘트랜잭션의 잠금이 어떤 경우에 일어나는지’, ‘전체 로직의 데드락을 어떻게 최소화시킬지’… 등에 대한 정확한 이해가 필수적이에요. ORM에 대해서도 마찬가지예요. 많은 편의성을 주지만, 실제 쿼리는 의도한 바와 다르게 나가거나, Type 자체가 안전하지 않은 경우도 있거든요. 실제 서버에 영향을 미칠 수 있는 기술적 요소들을 제대로 알고 개발하는 것이 안정적인 서버를 향한 첫 단계라고 생각해요.
또 한 가지는, 반복적으로 해오던 작업들을 자동화 시키는 거예요. 수동 작업으로 발생하는 실수도 많이 줄어들고, 일하는 속도도 훨씬 빨라질 수 있어요. AWS 내에서 제공하는 자동화 기능들도 많다 보니 각 서비스의 설정도 충분히 공부하는 노력이 필요해요.
창민님이 생각하시는 서버 프로그래머만의 매력은 무엇인가요?
서버 프로그래밍은 사실 결과물이 직접적으로 눈에 보이지 않고, 화려한 무언가가 있지는 않아요. 하지만 저는 그 점이 역으로 신선하게 다가왔어요. 빠르고 안정적인 서버 환경일수록 사람들은 자연스레 ‘서버’라는 존재를 잊게 돼요. 반대로 실수나 오류가 많으면 그때 서야 ‘서버 터졌네’라는 생각을 하죠. 제 역할을 잘 했을 때 안정적인 환경이 만들어지고, 그 속에서 제가 잊히는 부분이 재밌게 느껴져요. 핸드폰도 내부를 들여다보면 미세한 부품들이 예쁘게 정돈되어 있다고 해요. 안에 가지런하게 숨겨져 있고, 잘할수록 사람들이 눈치를 채지 못하는 포인트가 저에게는 매력적이에요.
게임 운영에 있어서 서버가 중요한 이유는 무엇인가요? 일반 서버와 게임 서버의 차이점이 궁금해요.
게임에 서버를 도입하는 이유는 게임의 데이터를 영구적으로 저장하기 위해서예요. 서버가 안정적으로 구축되어야 방대한 양의 데이터가 유실되지 않고 원활하게 전송될 수 있어요. 만약에 한 유저가 결제를 했는데, 상품이 제때 들어오지 않는다면? 혹은… 열심히 레벨 업 해 놓은 캐릭터가 하룻밤 사이에 0 레벨이 된다면? 끔찍하겠죠… 서버가 불안정하다면 크고 작은 문제들이 발생할 수 있어요. 유저들의 좋은 플레이 경험을 위해서는 오류 없는 안정성과 빠른 속도가 필수적인데, 이를 위해 최적화된 서버가 꼭 필요해요.
일반 서버와 마찬가지로 게임 서버도 모든 데이터를 효율적으로 관리하고 빠르게 전송해야 해요. 차이점은 게임 서버의 경우, 평균적으로 ‘읽기’보다 ‘쓰기’ 작업이 더 많다는 점이에요. 온라인 쇼핑몰과 비교해 보면 좋을 것 같아요. 쇼핑몰은 판매 상품, 이벤트와 같이 저장된 데이터를 고객에게 보여줘야 하는 요청이 주로 들어와요. 반면 게임 서버는, 무기 획득이나 아이템 사용과 같이 게임 환경 내에서 발생하는 동작에 대한 데이터 추가, 수정, 삭제 등과 같은 요청이 많아요. 확실히 쓰는 작업이 많죠. 또 모바일 게임의 경우에는 변수가 많고 수명이 길지 않기에, 그에 맞는 빠르고 고도화된 개발 시스템을 만들어야 하는 것도 하나의 차이점이에요.
주니어 개발자로서 여러 고민이 들 것 같아요. 창민님은 어떻게 풀어내시나요?
개발의 지식은 굉장히 방대해요. 오늘이 지나면 내일 또 새로운 기술이 나오고, 시간은 또 한정적이고… 고민이 많은데요. 일단 저는 천재를 보며 기죽기보단, 제 자신에 집중하려고 노력해요. 작은 단축키, 짧은 코드 등… 정말 사소한 것이라도 어제보단 오늘 더 성장하려고 해요. 이렇게 노력하다 보면 언젠가 크게 성장해있을 거라는 기대를 하게 되고, 더 원동력이 생기더라고요.
또 주변에 있는 실력자 동료들에게 배운 실무 요령을 최대한 제 것으로 체득하려고 해요. 계속 반복해서 익숙해질 때까지 익히고, 문제점이나 개선안은 없는지 스스로 되뇌어요. 지금 주어진 업무를 제대로 수행하다 보면, 그 과정이 저를 자연스레 좋은 개발자로 만들어 줄 것이라 생각해요.
‘정답은 없지만 오답은 있다’라는 말처럼 개발은 다양한 접근 방식이 가능하죠. 창민님은 개발 문제를 어떻게 접근하고 해결하시나요?
일을 하다 보면 새로운 요청이 매번 들어와요. 물론 검색을 하면 쉽고 간단하게 해결할 수도 있겠지만, 개발자는 다차원적으로 바라봐야 한다고 생각해요. 이 방법이 우리의 상황을 고려했을 때 최선이 맞을지? 계속 검토하고 더 효율적인 방법을 찾아보는 것 같아요. 최대한 많은 사례를 검색해 보고, Chat-GPT에게 힌트를 얻기도 하고… 현재 시스템에 안정적으로 적용할 수 있는 기술을 찾으려고 해요. 방법은 하나가 아니니까요! 계속해서 다양한 시각으로 접근해보려고 노력해요.
서버 프로그래머로서 게임듀오와 함께 하시면서, 스스로 성장했다고 느낀 경험이 있나요?
아직 1년도 되지 않았지만 엄청난 성장을 한 것 같아요. 일단 제 것으로 만든 지식의 양부터 크게 차이가 나고요. 전에는 시스템이 제대로 작동하는지 ‘완성 여부’에만 집중했다면, 현재는 그 이후의 상황을 예측하고 그에 맞는 해결법을 생각하게 돼요. ‘내가 구현한 API 설계를 현재 인프라 유형으로 감당할 수 있을까?’, ‘동시성 처리가 잘 이뤄질 수 있을까?, ‘현재 MySQL, Redis가 제공하는 기능들을 충분히 활용하고 있는가?’와 같은 질문을 스스로 하는데, 생각의 범위가 확실히 넓어졌어요.
게임듀오 팀원이라면 빠질 수 없는 질문! 가장 좋아하는 게임을 소개해 주세요.
최근에는 피파 모바일이랑 롤 와이드 리프트를 즐겨 해요. 남들이랑 1:1로 경쟁하는 것에서 재미와 짜릿함을 느끼는 편이에요. 모바일로 하면 러닝 타임도 짧아서 간단하게 하기 좋더라고요!
마지막으로 창민님은 어떤 개발자가 되고 싶나요?
주변 동료들에게 긍정적인 영향을 주는 개발자요. 성격이 워낙 내향적이라…ㅎㅎ 말을 잘 붙이지는 못하지만, 개발 실력으로 도움을 주고 싶어요. 기술적으로 게임 퀄리티를 향상시키거나, 수동으로 해야 할 일을 자동화해서 팀 업무를 효율화하는 것처럼요. 또 미래에는 책임감 있는 결정권자가 되어 있으면 좋겠어요. 이 기술을 왜 도입해야 하는지, 왜 하면 안 되는지에 대한 정확한 답변을 설득력 있게 하는 충분한 실력을 갖추고 싶네요!
남들에게 보이지 않는 세계를 완벽하게 만들어낸 후, 아무도 모르게 모습을 감춰버리는 존재. 이 신비함과 비밀스러움이 매력적으로 느껴진다면, 게임듀오의 가상 세계를 설계해 보는 건 어떠세요?