본문으로 건너뛰기

게임듀오

DEV팀 Server Developer

2025.01 — 현재

모바일 게임 개발 및 퍼블리싱 회사. 12개 라이브 서비스 공통 백엔드 플랫폼 설계, 데이터 파이프라인 구축, 공통 패키지 체계 운영

주요 성과

  • 마케팅 데이터 조회 비용 급증(전체 스캔 과금 구조) — 파티셔닝 튜닝 분석 후 Write IOPS 증가 문제로 기각, gRPC 기반 분산 읽기(Storage Read API) 전환, 비용 82% 절감(TB당 $6.25→$1.1)
  • 배치 처리의 수집 기간 한계(60일) — 서버리스 아키텍처 전환, 수집 범위 6배 확장(60일→360일), 처리 시간 2시간→5분 단축
  • 7개 프로젝트 간 코드 중복과 컨벤션 불일치 — 공통 패키지 체계 설계(NestJS 유틸 10모듈 + 게임서버 Kit 2패키지), 업그레이드 자동화로 배포 시간 3시간→15분 단축
  • 3개 광고 플랫폼 데이터 분산에 따른 마케팅 조회 지연(18초) — 테이블 정규화 및 인덱스 튜닝, 조회 성능 97% 개선(18초→0.5초)
  • 게임 확률 공시 의무화 규제 리스크 — DynamicModule 기반 확률 패키지를 다중 게임에 통합 + CDK 기반 감사 로그 파이프라인, 통합 테스트 커버리지 94%+ 확보(12 suites, 115 tests)

프로젝트

Glider Sheet Audit Log 시스템

2025.01 ~ 2025.04

게임 운영 중 데이터 변경 이력 추적 불가로 인한 밸런스 문제 대응 지연 해결

  • 6개 게임 간 데이터 변경 이력 추적 불가 — UUID 기반 크로스 환경/프로젝트 엔티티 추적 Git-like 버전 관리 시스템 설계, 6개 게임 간 데이터 일관성 보장
  • 엔티티 변경 기록의 수동 관리 부담 — Auditable 데코레이터 + TypeORM Subscriber 패턴으로 이벤트 소싱 기반 변경 자동 기록 파이프라인 설계, 엔티티 변경 이력 자동 추적 체계 구축
  • 다중 환경 간 엔티티 충돌 감지 및 병합 부재 — 상위/하위 엔티티 충돌 감지와 유니크 제약조건을 고려한 3-Way Merge 엔진 구현, 6개 게임 다중 환경 간 버전 병합 자동화
  • 버전 간 변경 사항 비교 비효율 — Base Audit 유무에 따른 증분 비교와 스냅샷 비교의 이중 전략 Diff 엔진 설계, 비용 효율적 버전 비교 체계 확립
  • PK 의존 엔티티 추적의 환경 간 불일치 — 공유 식별자 기반 크로스 환경 엔티티 추적 체계 설계로 PK 의존 탈피, 마이그레이션/비교/병합 시 정확한 엔티티 추적 보장

기술 선택 이유

TypeORM EntitySubscriberInterface 동작과 제약을 별도 분석 후 채택. Auditable 데코레이터 + Subscriber 조합으로 엔티티 변경을 표준화된 Audit 파이프라인으로 자동 수집하는 AOP 방식 설계.

TypeScript NestJS TypeORM MySQL

마케팅 통합 플랫폼

2025.02 ~ 현재

마케팅 전용 DB 분리 기반 위에 Google Ads/Meta/TikTok 캠페인·소재·지표를 단일 시스템에서 관리하는 통합 마케팅 플랫폼

  • 3개 광고 플랫폼 캠페인 관리 분산 — Google Ads/Meta/TikTok 캠페인 생성·배포·수정과 리텐션 지표 관리를 단일 플랫폼에서 처리하는 API 개발, 통합 캠페인 자동화 체계 마련
  • NAS-S3 간 에셋 동기화 신뢰성 부족 — SQS 서버-워커 분리, outbox 자동 발행, asset_nas_sync 상태추적 설계, 에셋 복원 신뢰도 보장
  • Meta 에셋 동기화 성능 병목 — ORM 단건 저장을 벌크 처리로 전환, Image 동기화 72% 단축(25.7s→7.1s), DB 트랜잭션 95% 단축(10~16s→0.3~0.5s)
  • 소재 처리 Lambda 비용 부담 — Graviton2 ARM64 아키텍처 전환, 소재 처리 Lambda 비용 20% 절감
  • 마케팅 데이터 조회 비용 급증 — BigQuery Storage Read API 도입으로 gRPC 스트리밍 기반 고성능 데이터 읽기 전환, BigQuery 비용 82% 절감(TB당 $6.25→$1.1)
  • 100+ 컬럼 테이블 조회 성능 저하(18초) — 테이블 3개(메인/시계열/예측) 정규화, 인덱스+커서 페이지네이션 적용, 조회 성능 97% 개선(18s→0.5s)

기술 선택 이유

BigQuery Storage Read API로 비용 82% 절감. GCP Pub/Sub → AWS Lambda/SQS 하이브리드 파이프라인으로 이벤트 기반 처리 전환, Outbox 패턴으로 API 비차단 비동기 발행 설계.

AWS Lambda Apache Arrow BigQuery GCP Pub/Sub Google Ads API Meta API MySQL NestJS S3 SQS BigQuery (Storage Read API) TikTok API TypeORM TypeScript gRPC

AWS Lambda 마이그레이션 & Event-Driven Architecture

2025.06 ~ 2025.08

마케팅 지표 60일 → 360일 확장에 따른 배치 작업 한계 해결 및 배치 처리 서버리스 전환

  • 전체 서버리스 전환 시 운영 안정성 리스크 — API 서버(EC2)는 유지하고 배치/Job 처리만 Lambda로 분리하는 하이브리드 아키텍처 설계, 워크로드별 최적 리소스 활용 달성
  • 배치 처리의 수집 기간 한계(60일) 및 처리 시간 2시간 — SQS+Lambda+EventBridge 기반 Event-Driven 비동기 처리 전환, 처리 시간 2h→5m 단축, 수집 범위 6배 확장(60일→360일)
  • 비동기 전환 시 데이터 정합성 보장 필요 — 예약·지연 발행 기반 트랜잭션 아웃박스 패턴 적용, 이벤트 기반 아키텍처에서 데이터 정합성 보장
  • Lambda 스로틀링, CloudWatch 비용 증가, 빌드 OOM 발생 — Batch Size 벌크 처리, CloudWatch 로그 경량화, 빌드 OOM 조치, Lambda 운영 안정화 및 비용 절감
  • Lambda 대량 실행 시 DB 커넥션 고갈 — RDS Proxy 풀링 기반 커넥션 관리 도입, DB 커넥션 고갈 문제 해결

기술 선택 이유

배치·이벤트성 작업이 서버 본체에 묶여 독립 배포 불가한 제약 해소를 위해 Lambda 선택. SQS로 비동기화하여 트래픽 변동 시 처리 지연과 확장성 한계 해결.

TypeScript NestJS AWS Lambda SQS SNS EventBridge RDS Proxy AWS CDK

Cloud Data 동기화 시스템

2025.08 ~ 현재

환경 간 동적 게임 데이터 불일치 문제를 해결하기 위한 S3 기반 동기화 및 DDL 자동 관리 시스템

  • 환경 간 동적 게임 데이터 불일치 — S3 기반 개발/스테이징/프로덕션 환경 간 동기화 시스템 구축, 환경 간 데이터 일관성 보장
  • 환경 간 스키마 불일치 수동 관리 부담 — PK 컬럼 타입 동적 결정, 컬럼 타입 불일치 감지·MODIFY, 인덱스 자동 생성·RENAME DDL 자동 관리 엔진 구현, 스키마 동기화 자동화
  • Cloud Data 적재 및 S3 업로드 성능 병목 — 병목 구간 분석 및 저장/업로드 최적화, 대용량 처리 지연 해소
  • 동기화 작업 불안정(타임아웃, 스케줄링 충돌) — job 분리, 스케줄링 방식 전환, timeout 조정, non-blocking 처리 적용, 운영 안정성 개선
  • CloudData 운영 장애 4건(캐시, 메타데이터, 키, 옵션 누락) — Redis 캐시 무효화, DDL SKIP 메타데이터, 복사 키 삭제, excludeCloudData 전달 누락 수정, CloudData 안정화
  • 시트 마이그레이션 시 excludeCloudData 옵션 미전파로 전체 삭제 리스크 — POST 경로 4곳에 excludeCloudData 옵션 전달 보강, Cloud Data 전체 삭제 리스크 차단

기술 선택 이유

S3 Lifecycle 정책(30일 Glacier IR, 90일 만료)으로 비용 최적화. 이벤트성 실행에서 스케줄링 방식으로 전환하여 동기화 누락 위험 감소.

TypeScript NestJS TypeORM MySQL S3

사내 공통 라이브러리 체계

2025.07 ~ 현재

NestJS 유틸 10개 모듈 + 게임서버 Kit 2개 패키지 개발·운영으로 다중 프로젝트 코드 일관성 달성

  • 서비스 간 공통 코드 중복 및 유지보수 비용 증가 — core, repository, cache, lock, slack, crypto, smb, hash, type, iac 10개 모듈 라이브러리 체계 설계, 7개 프로젝트 공통 코드 일원화 및 의존성 관리 표준화
  • Repository 계층 코드 비대화(2000+줄) 및 타입 안전성 부족 — Bulk·Audit Log·TypeORM 타입 좁히기 지원, 함수 오버로딩+TypeScript 제네릭 적용, SRP 분리, Repository 모듈 코드 품질 및 재사용성 향상
  • 멀티 인스턴스 환경의 동시성 제어 부재 — ElastiCache (Redis) 기반 분산 락 데코레이터 설계, 멀티 인스턴스 환경 동시성 제어 체계 구축
  • 7개 프로젝트 패키지 업그레이드 수작업(3시간) — workflow_dispatch+matrix 병렬 실행, 변경 패키지 CI 테스트 자동화(GitHub Packages), 업그레이드 배포 시간 3h→15m 단축
  • 게임서버 공통 코드 5개 브랜치 분산 관리 — Sheet+5개 서브모듈을 @gameduo/glider-sheet로 추출, 5개 브랜치 차이 분석·충돌 해결, 게임서버 Kit 패키지 분리 완료
  • CI 테스트 실행 시간 과다(15m47s) — ts-jest isolatedModules+Entity 타입 명시 적용, CI 61% 단축(15m47s→6m06s), 81 suites 978 tests 통과

기술 선택 이유

ElastiCache(Redis) 기반 분산 락을 AOP 데코레이터로 구현하여 비즈니스 로직에서 락 코드 분리. Jest 30 VM 격리 대응 시 5가지 옵션 검토 후 poolSize=2 채택.

ElastiCache (Redis) GitHub NPM NestJS Slack API TypeORM TypeScript

확률 계산 및 감사 로그 분석 파이프라인 (Glider Probability)

2026.02 ~ 현재

게임 확률 검증 체계 부재에 따른 규제 리스크 해소를 위한 확률 계산 패키지와 CDK 기반 감사 로그 분석 인프라 개발

  • 12개 게임 확률 계산 로직 분산 및 규제 대응 부재 — NestJS DynamicModule 기반 5개 함수+Kinesis 로깅을 @gameduo/glider-probability로 패키지화, 12개 게임 확률 패키지 통합
  • 확률 감사 로그 분석 인프라 부재 — Kinesis→Firehose(Dynamic Partitioning+Parquet)→S3→Glue→Athena E2E 파이프라인 CDK 코드화, 확률 감사 로그 분석 인프라 조성
  • 모킹 기반 테스트의 회귀 신뢰도 부족 — 모킹 삭제, LocalStack+Testcontainers 기반 통합 테스트 교체, 회귀 신뢰도 강화, 12 suites 115 tests 커버리지 94%+ 확보

기술 선택 이유

Kinesis → Firehose(Dynamic Partitioning + Parquet) → S3 → Glue → Athena 파이프라인을 CDK로 코드화. Parquet 컬럼형 포맷으로 Athena SQL 분석 비용 최적화, LocalStack Testcontainers로 모킹 기반 테스트 제거.

기여도: changmin님 초기 구현체를 패키지 구조화. P0 버그 수정, 테스트 안정화(94%+ 커버리지), CDK 인프라 구축, 12개 프로젝트 적용은 단독 수행.
TypeScript NestJS AWS CDK Kinesis Firehose S3 Athena Glue Parquet LocalStack Testcontainers

외부 활동

Amazon Q Developer를 활용한 개발 생산성 향상

외부 발표
2025.10

Games on AWS 2025 고객 세션 발표

개발자 1인이 10일 만에 시간당 병렬 처리 Job 수 기준 데이터 파이프라인 용량 270배 확장한 사례 공유

기술 스택

Node.js TypeScript NestJS TypeORM MySQL ElastiCache (Redis) BigQuery Apache Arrow gRPC AWS Lambda SQS SNS EventBridge S3 RDS Proxy AWS CDK GCP Pub/Sub Ad Platform APIs (Google, Meta, TikTok) Slack API GitHub NPM Kinesis / Firehose Athena Datadog