안녕하세요. 게임 클라이언트 프로그래머 문동준입니다.
Unity와 C#을 기반으로 오버독스, 데미안전기, 라스트헌터K: 서울까지 3개의 프로젝트에서 초기 개발부터 글로벌 출시와 라이브 서비스까지 참여했습니다.
첫 프로젝트인 오버독스에서는 기존 클라이언트 구조를 바탕으로 캐릭터, 장비, 상점, 퀘스트, 채팅 등 아웃게임 콘텐츠를 개발했습니다. 콘텐츠 단위의 개발에서 시작했지만 프로젝트를 거치면서 공통 UI 프레임워크와 로그인, 데이터 및 리소스 관리, 씬 전환, 인게임 진입과 전투 시스템까지 담당 영역이 점차 넓어졌습니다.
데미안전기에서는 UI 전환, 팝업, 씬 관리를 담당하는 공통 프레임워크를 구성하고 캐릭터, 인벤토리, 상점, 아레나, 길드 대항전 등의 콘텐츠를 개발했습니다. AssetBundle 캐릭터에서 발생한 T-포즈와 크래시는 코드 스트리핑 설정과 리소스 포함 방식까지 추적해 해결했고, Google Play 정책 변경에 따라 APK·OBB로 구성되어 있던 배포 구조를 AAB·PAD 방식으로 전환했습니다.
이후 라스트헌터K: 서울에서는 앱 실행부터 로그인, 로비, 인게임 진입과 복귀까지 이어지는 클라이언트 실행 과정을 담당했습니다. 서버 통신과 데이터 로드, 리소스 초기화부터 씬 전환 시스템까지 구성했으며, 동시에 여러 씬 전환 요청이 들어올 때 발생하는 문제를 막기 위해 요청을 큐에서 순차 처리하도록 구조를 변경했습니다. 이와 함께 UniTask 기반 비동기 로딩, Addressables 리소스 관리, 데이터 구조 변경, 캐릭터와 장비 파츠, 게임 모드에 따른 생성 및 전투 관련 기능을 개발했습니다.
기능 개발과 함께 발생한 문제를 재현하고 원인을 추적하는 작업도 맡았습니다. 라스트헌터K: 서울에서는 순차적으로 처리하던 서버 요청과 데이터·리소스 로드를 병렬로 실행하도록 변경해 앱 실행부터 로비 진입까지 약 20초가 걸리던 초기 로딩 시간을 동일 등급 기기 기준 약 5초까지 줄였습니다. 출시 이후에는 Logcat과 Unity 디버깅을 이용해 크래시가 발생하는 조건과 원인을 추적했고, 약 2개월 동안 크래시율을 약 10%에서 약 2%까지 낮췄습니다.
프로젝트 규모가 커지면서 데이터 구조도 함께 손봤습니다. ID 조회가 반복되는 데이터 테이블은 List에서 Dictionary로 변경하고 데이터 생성 템플릿과 기존 참조 코드를 함께 수정했습니다. 콘텐츠별로 나뉘어 있던 스탯 데이터는 공통 스테이터스 테이블과 ID 참조 방식으로 다시 구성해 동일한 데이터를 여러 테이블에서 관리하지 않도록 변경했습니다.
코드를 작성할 때는 현재 기능의 동작뿐 아니라 이후 해당 코드를 수정할 상황까지 함께 고려해 왔습니다. 반복해서 사용하는 기능은 공통 코드로 구성하고, 반복 호출되는 비용이 큰 처리나 불필요한 할당을 확인하며, 클래스와 함수 이름을 통해 처리 내용을 파악할 수 있도록 작성하는 편입니다. 여러 개발자가 사용하는 시스템은 사용 방법과 구조를 문서로 정리해 프로젝트 내에서 공유했습니다.
프로젝트의 데이터와 제어 흐름을 파악해 필요한 구조를 설계하고, 콘텐츠 개발부터 빌드와 배포, 출시 이후 문제 수정까지 맡아 왔습니다.