게임 서버 / 백엔드 개발자 경력 4년, 라이브 게임 5종 운영

보이지 않는 곳에서
서비스의 안정성을
만듭니다.

한국, 일본, 대만, 영문권에서 운영되는 모바일 게임 서버를 맡아 로그인 병목과 랭킹 조회 지연, 결제 오류를 원인부터 찾아 구조를 개선해 해결했습니다.

지원 분야
게임 서버 개발, 서버/백엔드 개발
경력
4년
운영 게임
모바일 게임 5종
운영 권역
한국, 일본, 대만, 영문권
코코마인 산리오 캐릭터즈 대표 이미지
코코마인 산리오
코코마인 대표 이미지
코코마인
놀러와, 마이홈 대표 이미지
놀러와, 마이홈

표면의 증상보다
구조를 고칩니다.

게임 서버와 백엔드 개발자로 4년간 근무하며, 유지보수와 신규 개발을 넘어 성능 최적화, 운영 인프라 구축, 실시간 서버 설계까지 폭넓은 실무를 경험했습니다. 한국, 일본, 대만, 영문권 4개 권역에서 운영되는 실서비스를 직접 담당하면서 로그인 병목 해소, Redis 기반 랭킹 전환, 채팅 서버 신규 구축, 결제 안정화, DB 마이그레이션 등 서비스 안정성과 성능에 직결되는 문제들을 발견하고 끝까지 해결해 왔습니다.

여러 장애 대응과 구조 개선을 반복하며 얻은 확신은, 표면적인 증상만 처리하는 임시방편보다 원인을 파악하고 구조를 바꾸는 것이 결국 더 안전하고 오래간다는 것입니다. 백엔드는 철저히 무대 뒤에 있지만, 서버가 조용할수록 유저는 끊김 없이 몰입하고 운영팀은 문제 대신 기획에 집중할 수 있습니다. 존재가 드러나지 않을수록 잘 되고 있다는 뜻이라 생각하며, 그 보이지 않는 자리에서 사람들의 경험을 채우는 일에서 보람을 찾습니다.

학력, 교육, 자격

학력

2017.03 ~ 2022.08부산대학교 (장전)정보컴퓨터공학과, 부산, 졸업
2013.09 ~ 2014.06Hong Kong Polytechnic UniversityComputer Science, 홍콩, 중퇴
2009.09 ~ 2013.06International School of Qingdao중고등학교, 중국 청도, 졸업

교육 이수

2026.05.12 ~ 2026.11.12카카오테크 부트캠프, 생성형 인공지능(AI) 과정한국전파진흥협회, 진행 중
2023.11.29 ~ 2024.01.17(게임콘텐츠제작) 게임 응용 프로그래밍 제작자 과정서울게임아카데미 부산학원, 중도 포기(취업)

어학 / 자격증

2026.03.25OPIc IHACTFL
2024.06정보처리기사한국산업인력공단, 24201210507Z

다뤄 온 기술

사용 기간은 실무, 개인 프로젝트, 교육 및 학습 경험을 포함합니다. 막대는 숙련도를 상, 중상, 중, 중하, 하의 5단계로 나타냅니다.

백엔드 언어

Java5년
JavaScript3년
C#2년
PHP2년
Python2년
Node.js1년
Go1.5년
C1년
C++1년

데이터베이스

MySQL5년
Google BigQuery2년
Redis1.5년
MSSQL3년
Oracle3년
PostgreSQL3년

서버 / 인프라

AWS2년
Apache1년
Express1년
IIS1년
SSL1년
Tomcat1년

프레임워크 / 협업툴

GitHub5년
Spring Framework3년
eGovFramework3년
SVN3년
ASP.NET Core2년
Spring Boot1년
Nexacro1년
React Native1년

ETC

Looker Studio2년
OKTA SSO1년
PWA1년

업무 시스템에서
라이브 게임 서버까지

SI 웹 백엔드로 시작해 게임 서버로 옮겨 오며, 요구사항 분석부터 설계, 구현, 테스트, 운영 이슈 대응까지 전 과정을 경험했습니다.

202120222023202420252026
2021.03 ~ 2021.12㈜유시스개발 현장실습생
SW개발과 서버개발
2022.01 ~ 2022.12㈜유시스개발 매니저(프리랜서)
SW개발과 서버개발
2023.04 ~ 2023.08㈜유시스개발 매니저(프리랜서)
SW개발과 서버개발
2024.01 ~ 2026.02㈜스카이워크서버 개발 사원
게임 서버 콘텐츠 개발과 유지보수

'빨라졌다'가 아니라
숫자로 증명했습니다

실제 이용자가 겪던 지연과 운영 리스크를 우선순위로 삼아, 증상이 아니라 구조를 고쳤습니다.

로그인 처리 시간 기존 30초~3분 개선 후 10~30초 코코마인, 락 경합 축소와 병렬 처리
랭킹 조회 시간 기존 10~20초 개선 후 1~2초 코코마인 산리오 캐릭터즈, Redis 캐싱과 페이징
결제 오류 발생 기존 하루 4~5건 개선 후 1~2주에 1건 놀러와, 마이홈, 재시도 정합성 설계

무대 위의 게임,
무대 뒤의 서버

화면에 보이는 것은 게임이고, 제가 맡은 것은 그 아래에서 멈추지 않고 돌아가는 서버입니다. 다섯 개 게임의 서버 개발과 라이브 운영을 함께 맡았습니다.

코코마인 게임 화면

코코마인

코지 라이프 시뮬레이션 SNS

무대 뒤에서 한 일
  • 로그인 락 경합 개선 (30초~3분에서 10~30초)
  • 채널 풀 분산과 자동 증설
  • 채팅 서버 확장, 빌리지/지적도 서버 신규 개발
  • 대용량 데이터 처리 (5~15초에서 2~6초)

Go / C# / MySQL / Redis

코코마인 산리오 캐릭터즈 게임 화면

코코마인 산리오 캐릭터즈

메타버스형 커뮤니티

무대 뒤에서 한 일
  • 채팅, 광장 서버 신규 개발
  • Redis 랭킹 전환 (10~20초에서 1~2초)
  • 스레드 단위 세션 분리
  • ASP.NET Core 어드민, BigQuery 통계

Go / C# / BigQuery

놀러와, 마이홈 게임 화면

놀러와, 마이홈

4개 권역 라이프스타일 SNG

무대 뒤에서 한 일
  • 결제 재시도 정합성 (하루 4~5건에서 1~2주 1건)
  • MySQL 5.7에서 8.0 마이그레이션
  • BigQuery, Looker Studio 대시보드
  • 4개 권역 서버 유지보수

Java / MySQL / AWS

걸글로브 게임 화면

걸글로브

패션 드레스업 스타일링 게임

무대 뒤에서 한 일
  • 아이템 지급 10~20초에서 2~5초로 단축
  • 어드민 통계, 콘텐츠 관리 기능
  • AWS에서 자체 서버로 데이터 이전

Python / MySQL

유미의 세포들 더 퍼즐 게임 화면

유미의 세포들 더 퍼즐

매치-3 퍼즐

무대 뒤에서 한 일
  • 재화 흐름 통계 시스템 추가
  • 시스템 개편에 맞춘 DB 컬럼 통합
  • AWS에서 자체 서버로 데이터 이전

PHP / MySQL

동시 접속이 늘수록
드러나던 병목을
구조로 풀었습니다.

문제
로그인 API마다 걸린 락이 모든 유저의 요청을 한 줄로 세워, 접속이 몰리면 대기가 길어졌습니다.
해결
요청 전체를 막던 락 경합을 줄이고 서로 영향을 주지 않는 작업을 분리해 병렬로 처리했습니다. DB 커넥션 풀과 누락된 인덱스도 보완했습니다.
결과
로그인은 30초~3분에서 10~30초로, 아이템과 랭킹 데이터 처리는 5~15초에서 2~6초로 줄었습니다.
  1. LOGIN락 경합 축소
  2. SESSION동시 요청 분리
  3. CHANNEL POOL최소 부하 배치, 자동 증설
  4. REDIS랭킹 실시간 반영
  5. MYSQL영속 데이터, 인덱스 보강

로그인은 기존 구조의 병목을 개선했고, 채널 풀 분산 구조는 새로 설계했습니다.

문제를 끝까지
따라간 네 가지 프로젝트

상황, 과제, 해결 과정, 결과를 순서대로 풀었습니다. 구조가 바뀐 지점은 도식으로 함께 정리했고, 제목을 누르면 접을 수 있습니다.

01

코코마인

SKYWALK, 2024.12 ~ 2026.02

코지 라이프 시뮬레이션 SNS, 가입자 1만+, 피크 동접 500~1,000명

팀과 역할서버 2명, 클라이언트 5명, UI 1명 구성에서 서버 콘텐츠 개발을 맡았습니다. 개발 중반 서버 팀원이 이탈한 뒤로는 서버를 단독으로 담당했고, 채널 분산과 스케일아웃 같은 주요 기술 방향은 CTO와 검토한 뒤 적용했습니다.

GoC#ASP.NET CoreMySQLRedisBigQuery
로그인 처리 시간30초~3분10~30초
아이템, 랭킹 데이터 처리5~15초2~6초

상황

  • 로그인 API마다 락이 걸려 있어 접속이 몰리면 모든 세션이 순서대로 대기했습니다
  • 광장과 빌리지는 단일 채널에 유저가 몰려 렉과 끊김이 잦았습니다
  • 아이템과 랭킹처럼 큰 데이터를 조회하고 갱신할 때 렉이 생겼습니다
  • 운영팀은 게임 데이터가 필요할 때마다 개발팀에 직접 요청해야 했습니다

과제

  • 로그인 안정화
  • 광장/빌리지 채널 분산
  • 채팅 서버 확장
  • 대용량 조회 최적화
  • 운영툴 설계

해결 과정

  1. 로그인 병목: 락 경합을 줄이고 독립 작업을 병렬로

    로그인 과정에서 API마다 걸린 락 때문에 요청이 직렬로 처리되는 병목을 확인했습니다. 요청 전체를 막던 락 경합을 줄이고 서로 영향을 주지 않는 작업을 분리해 병렬로 처리했습니다. 남은 병목은 DB 커넥션 풀 확충과 누락된 인덱스 추가로 해소했습니다.

  2. 채널 풀: 인원이 가장 적은 채널로 배치

    광장과 빌리지에 기본 5개의 채널 풀을 두고, 신규 유저를 인원이 가장 적은 채널에 배치하는 분산 로직을 설계했습니다. 채널별 유저 상태를 격리해 같은 채널의 유저끼리만 상호작용하도록 구성했습니다. 동시 접속 때 채널별 인원 카운터가 꼬이는 경쟁 상태(race condition)는 Go의 sync.Mutex로 보호했습니다.

  3. 자동 증설: 25/30명에서 5개 채널을 한 번에

    전체 채널이 정원 30명 중 25명에 가까워지면 채널 5개를 자동으로 일괄 증설하도록 구현했습니다. 증설 직후 유저가 새 채널로 한꺼번에 몰리는 부하 폭주(thundering herd)를 막기 위해 신규 유저는 점진적으로 나눠 배치했습니다. 정원 30명은 실제 플레이 블라인드 테스트로 검증해 확정했습니다.

  4. 채팅 서버 확장과 빌리지, 지적도 신규 개발

    기획팀과 스펙을 협의한 뒤 코코마인 산리오 캐릭터즈에서 만든 채팅 서버를 코코마인에 맞게 다시 설계했습니다. 빌리지와 지적도 서버는 새로 추가하고, 빌리지 안의 인터랙티브 아이템, 상호작용 모션, 주소 시스템을 함께 만들었습니다.

  5. 랭킹: Redis에 실시간 반영

    코코마인 산리오 캐릭터즈에서 Redis로 전환한 랭킹 구조를 바탕으로, 기부 기여도와 패션매치 점수를 Redis에 실시간으로 반영하고 조회는 페이징과 Redis 캐싱으로 처리했습니다.

  6. 운영툴과 조회 최적화

    운영팀 담당자와 필요한 기능을 협의해 요구사항을 확정하고 ASP.NET Core 기반 운영툴을 설계, 개발했습니다. 렉이 생기는 구간에는 인덱싱과 쿼리 최적화를 적용해 아이템과 랭킹처럼 큰 데이터의 조회와 갱신 시간을 5~15초에서 2~6초로 줄였습니다.

로그인 처리 구조, 이전과 이후
이전API 락 때문에 요청이 한 줄로 대기, 30초~3분
요청 1
요청 2
요청 3
이후독립 작업은 병렬 처리, 커넥션 풀과 인덱스 보강, 10~30초
요청 1
요청 2
요청 3

막대 길이는 처리 흐름을 설명하기 위한 개념도이며, 실측 수치는 위 결과와 같습니다.

채널 풀 분산과 자동 증설
CH1
CH2
CH3
CH4
CH5
+5자동 증설
CH6
CH7
CH8
CH9
CH10
  • 점선은 증설 기준 25명 (정원 30명)
  • 신규 유저는 인원이 가장 적은 채널부터 점진적으로 배치
  • 채널별 인원 카운터 갱신은 sync.Mutex로 보호

결과

  • 로그인 처리 시간 30초~3분에서 10~30초, 아이템과 랭킹 데이터 처리 5~15초에서 2~6초로 단축
  • 광장과 빌리지의 1채널 과밀을 최소 부하 배치와 자동 증설로 완화
  • 유저 간 채팅, 빌리지, 지적도 등 상호작용 콘텐츠 확장
02

놀러와, 마이홈

SKYWALK, 2024.01 ~ 2026.02

라이프스타일 시뮬레이션 SNG, 한국/일본/대만/영문권 4개 권역 운영, 가입자 20만+, 동접 200~2,000명

JavaMySQLBigQueryAWSLooker Studio
결제 오류 빈도하루 4~5건1~2주에 1건
아이템 조회 시간3~10초 단축

상황

  • MySQL 5.7이 2023년 10월 EOL을 맞아 보안 패치가 끝나 8.0 마이그레이션이 불가피했습니다
  • 네트워크 지연 시 결제가 하루 4~5건씩 실패하거나, 결제는 완료됐는데 아이템이 지급되지 않는 일이 반복됐습니다
  • 운영팀이 게임 데이터가 필요할 때마다 개발팀에 요청해야 해 의사결정이 느렸습니다
  • 권역마다 콘텐츠가 달라, 한 권역에서만 발생하는 오류가 있었습니다

과제

  • MySQL 8.0 마이그레이션
  • 결제 안정화
  • 운영팀용 대시보드
  • 4개 권역 유지보수

해결 과정

  1. 결제: 재시도해도 두 번 지급되지 않게

    네트워크 지연으로 결제가 실패하면 자동으로 재시도하는 로직을 추가했습니다. 재시도 전에는 이전 결제 내역과 지급 내역을 대조해 이미 지급된 건을 다시 지급하지 않도록 했고, 결제는 완료됐지만 아이템이 지급되지 않은 건은 안전하게 복구하도록 구현했습니다.

  2. MySQL 5.7에서 8.0으로

    인증 방식과 GROUP BY 처리처럼 8.0에서 호환성이 깨지는 부분을 찾아 소스 코드를 수정하고, 테스트를 거쳐 배포했습니다. 주요 쿼리에는 인덱싱과 최적화를 함께 적용했습니다.

  3. 운영팀이 직접 보는 대시보드

    운영팀과 필요한 지표를 정한 뒤 BigQuery와 Looker Studio로 재화, 토큰, 로그 대시보드를 구축했습니다. 개발팀에 요청하지 않아도 데이터를 바로 확인할 수 있게 됐습니다.

  4. 4개 권역 운영과 문서화

    권역마다 다른 콘텐츠에서 생기는 오류를 찾아 수정하고 신규 콘텐츠를 개발했습니다. 다른 개발자도 운영 이력을 빠르게 파악하도록 콘텐츠와 버그 목록을 문서로 정리하고 계속 갱신했습니다.

결제 재시도와 지급 정합성 처리 흐름
결제 요청
네트워크 지연, 실패
재시도 전
결제 내역과 지급 내역 대조
이미 지급된 건다시 지급하지 않음, 중복 지급 방지
결제 완료, 아이템 미지급미지급 아이템을 안전하게 복구
결제 미완료자동 재시도 진행

결과

  • 결제 오류가 하루 4~5건에서 1~2주에 1건으로 감소
  • 대시보드 도입 뒤 운영팀의 단건 데이터 요청이 "이런 통계도 보고 싶다"는 기획성 요청으로 바뀜
  • 오류가 잦은 구간을 운영팀이 직접 파악할 수 있게 됨
03

충청북도교육청 인사관리 시스템

UXIS, 2021.12 ~ 2022.07

교육공무직원 인사 행정 시스템, 대상 인원 약 6,400~10,000명

JavaNexacroMySQLeGovFrameworkSpring

상황

  • 6,400~10,000명 규모의 교육공무직원 전보(인사이동)를 담당 공무원이 제출 서류를 직접 받아 수기와 엑셀로 점수를 계산해 판별했습니다
  • 인사기록은 문서로 보관돼 필요할 때마다 찾아봐야 했습니다

과제

  • 전보 점수제 기반 자동 판별 알고리즘
  • 인사기록 통합
  • 근무성적평정, 설문, 통계

해결 과정

  1. 서류 데이터를 점수로 바꾸고 자동 집계

    수기와 엑셀로 취합하던 서류 데이터를 항목별로 점수화해 자동으로 집계하고, top-down 정렬로 우선순위를 판별하는 전보 알고리즘을 설계했습니다.

  2. 동점자와 중복 점수를 따로 판별

    엑셀로는 잡아내기 까다로웠던 동점자와 중복 점수 케이스를 프로그램이 자동으로 구분하는 판별 로직을 별도로 구현했습니다.

  3. 인사기록 통합과 통계

    문서로 흩어져 있던 인사기록을 하나로 통합해 한 번에 조회할 수 있게 했고, 근무성적평정, 설문조사, 통계 기능을 개발했습니다.

전보 판별 알고리즘 흐름
  1. 서류 데이터 구조화항목별 점수 기준 정리
  2. 점수 자동 집계항목 점수를 합산
  3. 우선순위 판별top-down 정렬
  4. 예외 판별동점자와 중복 점수 분리

결과

  • 6,400~10,000명 규모의 인사이동 판별을 수기와 엑셀에서 점수 기반 자동 처리로 전환
  • 점수를 매길 때마다 과정을 일일이 확인할 필요가 없어져 인사이동 판단이 빨라짐
  • 통계로 이동이 많은 부서와 선호 부서를 파악할 수 있게 됨
04

C++ 네트워크 게임 서버 학습 프로젝트

개인 프로젝트, 2026.07 ~ 진행 중

접속 처리 구조를 v1~v6으로 단계별 구현하고, GUI에서 구조별 동작 차이를 재현하고 비교하는 프로젝트

C++20CMakeLinuxWindowsepollIOCPDocker
GitHub
Linux 서버동시 접속 28,000개
처리 메시지560,000건
Windows IOCP 점진 유지12,000개, 120,000건

목표

  • C++ 기반 게임 서버의 접속, 통신, 멀티스레드 처리 방식을 직접 구현하며 서버 구조의 기본기를 다지기
  • 같은 기능을 여러 구조로 만들고 같은 조건에서 테스트해, 구조마다 한계가 어디서 오는지 확인하기
버전별 서버 구조
버전구조핵심
v1단일 스레드 블로킹한 번에 한 접속만 처리, 다른 클라이언트는 연결 대기
v2접속별 스레드접속마다 스레드를 새로 생성
v3고정 스레드 풀정해진 수의 스레드를 재사용
v4Linux epoll Reactor이벤트 기반으로 다수 접속 처리
v5epoll + worker pool네트워크 처리와 작업 처리를 분리
v6Windows IOCP 비동기 서버AcceptEx와 완료 통지 기반 비동기 처리

해결 과정

  1. 이전 버전의 한계를 다음 버전에서 개선

    한 번에 한 명만 처리하는 서버에서 시작해 접속마다 스레드를 만드는 방식, 스레드를 재사용하는 방식, Linux epoll과 Windows IOCP까지 구현했습니다. 접속 수가 늘 때 스레드를 효율적으로 쓰고 네트워크 처리와 작업 처리를 나누는 구조를 익혔습니다.

  2. 데이터 전송과 종료를 안정적으로

    큰 데이터가 한 번에 전송되지 않는 상황을 고려해 남은 데이터를 이어 보내고, 같은 사용자의 메시지 순서가 바뀌지 않도록 송신 큐를 구성했습니다. 접속이 남아 있어도 서버가 안전하게 종료되도록 작업과 스레드의 종료 순서를 구현하고, pending I/O drain을 확인했습니다.

  3. 자동 검사

    반복 접속과 해제, 서버 종료 상황을 자동으로 테스트하고 메모리 오류가 없는지 검사했습니다.

  4. 구조 비교용 크로스플랫폼 GUI

    서버 버전 선택과 실행, 최대 200개 클라이언트 연결, 개별/지연/반복 전송, Echo 응답 집계를 한 화면에서 제어하도록 만들었습니다. 호스트 OS에 맞춰 실행 가능한 버전과 Native/Docker 방식을 판별하고, 실행 파일이 없으면 CMake로 자동 빌드합니다.

부하 테스트 결과
환경조건결과
Linux (Docker 내부 네트워크)동시 접속 28,000개메시지 560,000건 모두 처리
Linux (Docker 내부 네트워크)30,000개 접속 시도클라이언트의 임시 포트 범위가 먼저 소진, 연결된 28,231개의 메시지는 전부 정상 처리
Windows IOCP (Debug)순간 접속 2,000개Echo 20,000 / 20,000
Windows IOCP (Debug)점진 접속, 동시성 64 제한12,000개 연결 유지, Echo 120,000 / 120,000
Windows IOCP (Debug)순간 접속 2,500개 이상backlog 128과 pending AcceptEx 16개가 접속 폭주를 다 흡수하지 못해 일부 연결 거부
공통4 MiB 분할 전송여러 조각으로 나눠 보내도 전체 내용이 정확히 전달됨

모든 테스트에서 pending I/O drain과 종료 코드 0을 확인했습니다. 12,000개는 Windows 동적 포트 범위의 영향을 받으므로 서버의 절대 한계로 해석하지 않았고, 대량 로그가 stdout pipe를 막지 않도록 측정 시 출력은 NUL로 보냈습니다.

결과

  • 부하 테스트로 네트워크 처리 스레드에 작업이 몰리는 병목을 발견하고 다음 개선 지점을 도출
  • macOS, Linux, Windows에서 실행 가능한 범위를 판별하고, 같은 UI에서 구조별 차이를 재현하는 실험 환경 구축

라이브에서 겪은 문제와
재발 방지까지

실서비스에서 실제로 겪은 장애와 데이터 문제를 원인, 조치, 재발 방지 순서로 정리했습니다.

코코마인새벽 장애

전체 로그인 지연

원인
특정 유저의 아이템이 과도하게 많아 조회 중 락이 걸리면서 전체 로그인이 지연
조치
인덱싱과 limit으로 즉시 지연을 해소
재발 방지
임시 조치 뒤 락 구조 자체를 근본적으로 개선
코코마인새벽 장애

이벤트가 열리지 않음

원인
기획팀 이벤트 데이터가 커밋에서 누락된 상태로 배포
조치
누락된 파일만 다시 커밋 받아 무점검 배포로 이벤트 복구
놀러와, 마이홈새벽 장애

일본 서버 다운

원인
df로 확인하니 디스크가 가득 찬 상태. crontab 로그 정리 배치가 오작동해 로그가 과도하게 쌓임
조치
오래된 로그 파일을 즉시 정리해 서버 복구
재발 방지
로그 정리 배치를 재점검하고 수정
코코마인데이터 불일치

업적 기능의 실데이터 불일치

원인
테스트 환경에서는 문제가 없었지만, 이미 아이템을 판매하거나 사용한 유저의 실데이터와 업적 조건이 맞지 않음
조치
사용 현황과 로그를 분석해 업적 갱신을 일괄 처리
재발 방지
업적을 새로 추가할 때 케이스를 더 촘촘히 확인하는 로직을 서버에 추가
코코마인라이브 전 사전 검증

자체 부하테스트 봇으로 병목을 먼저 찾기

방법
접속, 로그인, 간단한 플레이까지 자동화한 부하테스트 봇을 직접 만들어 라이브 전에 로그인, 아이템, 광장, 채팅 구간의 병목을 확인
조치
확인한 병목을 바탕으로 구조를 개선하고, 락, 레이스 컨디션, 데드락 가능성이 있는 구간을 다시 점검해 수정

참여한 프로젝트 전체

회사와 기간별로 정리했습니다. 회사 이름을 누르면 목록이 펼쳐지고, 프로젝트를 누르면 상세 내용이 열립니다.