한국어
    • 한국어
    • ENGLISH
    • 日本語
    • 中文-繁體

    2023.06.15 Players

    Project G 박상인 | 서버 프로그래머

    <TECH TRACK> 시리즈는 엔씨에서 개발 중인 게임의 개발자들을 조명합니다. 게임 개발에 필요한 다양한 직무와 하는 일, 그리고 분야의 전문가가 되기 위해 쌓아온 커리어패스를 살펴보세요.

    이번 편 주인공은 〈Project G〉의 서버 프로그래머 박상인 님입니다.

    Project G | 엔씨가 처음으로 선보이는 RTS(Real-Time Strategy, 실시간 전략 게임) 장르의 대규모 전쟁 기반 전략 게임. 한정된 자원을 모으며 성장하고 영토 경쟁을 위해 다양한 전술을 즐길 수 있는 것이 특징이다.

    TRACK 1 | my CAREER

    타협 없이 정직하게 서버를 일군다

    빠르기보다 바르게, 임시방편보다 정석으로

    수많은 플레이어들이 동시에 접속해 즐길 수 있도록 가상세계를 구현하는 일이다. 퀘스트, 길드, 영지 같은 콘텐츠와 서버 간 데이터 동기화에 필요한 시스템 설계 및 구현을 담당하고 있다. 이를 위해 서버 간 프로토콜 자동 생성 모듈과 스키마 설계 업무1도 하고 있다. 게임의 중심 콘텐츠와 네트워크의 대규모 데이터를 처리하는 만큼 업무에 신중을 기하려고 노력한다.

    참여하는 게임 프로젝트의 성격에 따라 게임의 근간을 이루는 서버 프로그래머의 역할과 성격도 조금씩 달라진다. 본래도 꼼꼼하고 세심한 편이지만 〈Project G〉에 합류하면서 그런 면이 극대화되었다. 〈Project G〉는 실시간 전투와 대규모 처리 능력이 무엇보다 강점인 게임이다. 동시 접속한 플레이어들의 대규모 데이터를 실시간으로 처리하는 일련의 과정들을 오류 없이 안정적으로 구현할 수 있는 서버를 다루다 보니, 사소한 오류도 결코 대수롭게 여기지 않고 되짚으려 한다. 지금 넘겨버리는 작은 일들이 쌓이면 이슈가 생길 때 바로잡기 위해 더 많은 시간과 자원을 쏟아야 하곤 한다. 〈Project G〉팀에서 나는 빠르기보다 바르게, 임시방편보다는 느리더라도 정도를 따라 걷는 서버 프로그래머가 되고자 한다.

    1게임 데이터를 저장할 때 데이터베이스를 해당 게임의 특성에 맞게 구성하는 업무

    CAREER PATH | ‘서버 프로그래머’가 되기까지

    총 경력 8년 차 개발자고, 엔씨에서 근무한 지는 1년 9개월이 됐다. 엔씨로 이직하기 전에는 MMORTS 전문 개발사에서 주니어 서버 프로그래머로 일했다. 콘텐츠 개발, 프레임워크 설계, 서비스 운영 등 여러 서버 개발을 수행하며 총 네 번의 게임 출시에 참여했다. 각 프로젝트마다 론칭을 앞두고 총체적인 개발 업무 경험을 쌓는 기회를 통해 서버 프로그래머로서 많이 배우고 성장했다. 마지막 프로젝트에서는 리드 서버 프로그래머 역할을 맡아 실무자로서의 역량뿐 아니라 프로젝트와 조직을 리딩하는 관리 경험도 기를 수 있었다. 엔씨에 입사한 후에는 유사 장르 게임 출시 경험을 활용하여 〈Project G〉의 MMORTS라는 장르적 특성과 대규모 데이터 처리를 위한 시스템을 보다 안정적으로 구축하는 데 참여하고 있다.

    스스로 쌓아 올린 경험은 온전히 내 것이 된다

    서버 프로그래머에게 필수적인 것은 C/C++ 프로그래밍, 멀티스레드 프로그래밍, 네트워크 프로그래밍, MySQL/MSSQL 데이터베이스에 대한 이해 및 활용 능력, 그리고 데이터 구조와 알고리즘 이해 능력이다.

    실무 스킬을 익히는 것도 중요하지만, 무엇보다 자신만의 ‘사이드 프로젝트’를 만들어보는 경험이 꼭 필요하다. 타인의 도움 없이 자신의 프로젝트를 설계하고 구현하는 과정에서 서버에 대한 총체적 이해뿐 아니라 문제 해결 능력도 월등히 성장한다. 스스로 개발하며 여러 문제에 부딪히고 고민하는 시간을 통해 자신만의 방식으로 해결해가는 경험을 쌓는 것이다. 자신이 만든 소스 코드를 GitHub 같은 서비스에 올려 공유하는 것도 좋다. 이 개발 구조를 어떻게 생각하고 쌓아 올렸는지, 그 과정에서 마주한 고민과 해결 과정은 무엇인지 설명할 수 있는 좋은 기회다. 본인의 개발 과정을 타인에게 설명할 수 있을 때 비로소 그 결과물은 온전히 내 것이 된다. 그렇게 실제로 부딪혀본 경험은 기술적 역량과 만나 훗날 실무에 훌륭한 밑거름이 된다.

    TRACK 2 | my PROJECT

    서버 기술력으로 전략의 재미를 극대화하다

    기존 공식을 깨고 전략으로 승부한다

    RTS 장르 게임의 즐거움은 자신의 계산을 바탕으로 짠 전략이 유의미한 승리를 거두는 데서 온다. 이 쾌감이 플레이어로 하여금 다시 본게임을 찾도록 만든다. 이런 면에서 〈Project G〉는 첫 단추부터 전략적 측면을 보다 강화하는 방향으로 만들어졌다. 기존 RTS 경쟁작들은 전투 결과를 숫자나 일정한 턴 수로 보여주는 등 전략적 요소를 단순화해버려 플레이어가 섬세한 전략을 짜고 예측하는 것을 어렵게 만들었다. 때문에 높은 레벨이나 아이템 같은 전략 외적 요소들이 승패에 큰 영향을 미치게 된다. 그렇게 되면 플레이어의 재미가 반감된다.

     

    〈Project G〉는 고레벨 사용자가 무조건 승리하는 기존 게임 법칙을 깨고, 플레이어의 기술과 전략이 전투 결과에 영향을 미치도록 만들었다. 드래곤 같은 전략 병기와 상성을 활용한 전투 시스템을 적극 활용하며 전술의 여러 가능성을 분석하고 조합하여 나만의 전략을 짜낼 수 있다. 다양한 플레이어들과 협업 혹은 경쟁하며 다양한 정치적 관계를 형성하는 것 또한 승패의 변수로 작용하는 재미를 느낄 수 있을 것이다.

    부하 없는 실시간 대규모 데이터 처리를 고민하다

    게임의 전략성이 두드러질 수 있었던 배경에는 〈Project G〉 서버의 ‘실시간 대규모 데이터 처리 능력’이 있다. 이는 유저의 오프라인 상태에서도 실시간 월드에 캐릭터가 존재할 수 있도록 데이터를 유지하고, 전투 결과를 예측하고 빠르게 대처할 수 있는 실시간성을 구현하는 데 핵심적인 역할을 한다. 다른 유사 장르는 실시간 전투가 아니라 시뮬레이션된 결과만 노출되거나 일정 턴으로 동작하여 유저의 컨트롤이 전투 결과에 영향을 미치지 못한다. 하지만 〈Project G〉는 실시간 전투를 구현함으로써 유저의 컨트롤이 전투 결과에 직접적인 영향을 준다.

    이를 실현하기 위해 우리 팀에서 수많은 오브젝트를 실시간 시뮬레이션할 수 있는 서버 모델을 설계하고 구축하고 있다. 부하 없는 실시간 대규모 처리 능력을 향상시키기 위해 병렬 처리 기반으로 서버를 설계하는 등 엔씨만이 쌓아온 노하우와 기술력을 토대로 게임을 착실히 쌓아 올리고 있다.

    ‘빠른 길보다 바른 길을 가자’

    (GitHub를 통한 팀원과의 문제 해결 과정 화면)

    서버를 개발할 때 유저가 오프라인이어도 동작하는 객체를 처리하기 위해 필드 및 유저 오브젝트를 설계하는 데 많은 공을 들였다. 〈Project G〉의 특성상 유저의 명령 없이도 객체들이 스스로 동작을 수행하는 것이 중요한데, 그러다 보면 수많은 오브젝트를 처리하는 과정에서 부하가 발생하기 쉽다. 이 문제를 해결하기 위해 팀원들과 함께 꽤 오랜 고민과 시행착오의 시간을 보냈다. ‘빠른 길보다 바른 길을 가자’는 게 우리 팀의 모토다. 근본적 해결책을 찾아내는 것이 오래 걸리더라도 가장 올바른 길이다, 라는 자세로 문제를 마주했다.

    다양한 시행착오 끝에 오브젝트를 분리하는 데서 답을 찾을 수 있었다. 먼저 실시간 속성을 기준으로 게임 오브젝트들을 개념화하고 분류했다. 실시간 상호작용이 필요한 ‘필드 오브젝트’와 오프라인에서도 자동으로 처리할 수 있는 ‘유저 오브젝트’를 구분했다. 모든 객체를 실시간으로 처리하는 대신, 분류에 따라 일부 객체들은 처리 시간의 간격을 조절하도록 만들었다. 서버 부하를 줄이면서도 실시간성을 유지하기 위해서였다. 그 결과 대규모 접속 환경에서 부하 없이 실시간 플레이를 쾌적하게 진행하고, 게임 내에서 상호작용할 수 있는 객체의 수도 안정적으로 늘릴 수 있었다. 대규모 전투에 몰입할 수 있는 〈Project G〉만의 환경을 구성한 것이다.

    TRACK 3 | my ENVIRONMENT

    단단함과 끈기로 나의 영역을 쌓아간다

    스페셜리스트

    서버 프로그래머로서 경험을 쌓으면서 분야에 특화된 개발자로 성장하고 싶다. 자기 분야에서 스페셜리스트가 되기 위해서는 개인적 성장을 위한 노력도 반드시 뒤따라야 하지만, 그에 앞서 환경 요인들이 뒷받침돼야 한다는 것을 엔씨에서 일하며 피부로 느끼고 있다.

    전문성에 맞는 업무 분배, 반복 작업의 자동화, 공용 플랫폼 구축 같은 환경적 요소들이 뒷받침될 때 개발자는 생산성 있는 본업에 집중할 수 있다. 이전에는 서버 개발 외에도 게임 론칭을 위해 필요한 업무를 총체적으로 신경 쓰고 처리하는 데 많은 리소스를 소모했다면, 엔씨에서는 NC Cloud, Air, Purple 등 서비스 개발을 도와주는 엔씨 자체 플랫폼들을 활용할 수 있을 뿐 아니라, 전문적인 유관 부서와 협업하며 그들의 전문성으로부터 훨씬 좋은 결과물을 얻을 수 있다. 결과적으로 나의 업무에 집중하고 전문성을 기를 수 있도록 환경이 뒷받침해주기 때문에 특정 분야에서 깊숙하게 경력을 쌓고 있다고 느낀다. 스페셜리스트로 성장하기에 유익한 환경이다.

    프로젝트에 대한 책임 의식, 오너십을 담아

    〈Project G〉처럼 규모 있는 프로젝트에서 여러 뛰어난 개발자와 팀으로 일하다 보면 개발 과정에서 주인 의식을 잃기가 쉽다. 그러나 개개인이 ‘나의 일’이라는 책임감을 갖고 모일 때의 시너지는 단순히 팀의 부속원으로서 일할 때보다 훨씬 강한 힘을 발휘한다. 우리 팀은 개발자 개개인의 오너십(ownership)을 강화하고 발휘할 수 있는 환경을 만들어주기 위해 노력하고 있다. 각자의 전문성과 경험에 맞는 태스크를 부여하고, 특정 이슈가 발생하면 책임 의식을 갖고 스스로 먼저 고민하고 정답을 찾아가는 시간을 충분히 준다. 이후 포스트모템(post-mortem)을 통해 다 같이 문제의 원인을 분석하고 대책을 수립한다. 각자 업무에 관한 전문성과 오너십을 인정하고 독려해 주는 분위기 속에서 나를 포함한 팀원 모두가 더욱 책임 의식을 가지고 업무에 임하고 있다.

    현재 프로젝트에 소속된 모든 개발자가 게임 출시를 앞두고 책임감을 갖고 개발 진행도를 끌어올리고 있다. 문제점을 찾아 해결하고 사용자 경험을 개선하기 위해 끊임없이 연구하고 테스트한다. 그러한 노력들이 있었기에 프로젝트의 완성도는 물론 개발자 개인도 지속적인 성장을 이룰 수 있었다고 생각한다. 앞으로도 우리 개발팀은 출시를 향한 목표와 열의를 잃지 않고, 유저들이 만족할 수 있는 게임을 만들어갈 것이다.