about-matching-server

매칭 서버 분리 및 WebFlux 구현

Status

Accepted

Context

  • 기존 게임 서버는 매칭 로직과 게임 로직이 함께 동작하고 있어 다음과 같은 문제가 발생:
    • Spring MVC 기반으로는 I/O 중심의 매칭 시스템과 맞지 않아 블로킹 발생 가능
    • 게임 서버 Rolling 무중단 배포의 불가능
  • 이를 해결하기 위해 매칭 서버를 별도로 분리하고, 비동기/논블로킹 처리가 가능한 Spring WEBFLUX 기반으로 구현을 검토함.

Decision

  • 매칭 서버를 별도의 마이크로서비스로 분리
  • Spring WebFlux 기반 비동기 서버로 구현
  • 매칭 완료 시 기존 게임 서버로 REST API 호출

Consequences

  • 매칭 서버 분리로 게임 서버 부하 감소
  • Reactive 방식으로 동시 접속자 수 확장 용이
  • 매칭 로직 개선 시 게임 서버 배포 없이 단독 배포 가능
  • WebFlux 기반으로 논블로킹 I/O 처리, 대규모 매칭 처리 가능

Alternatives Considered

  • 기존 게임 서버에 매칭 로직 유지
    • 단점: 블로킹 발생 가능, 확장성 낮음
  • Reactive Netty 직접 구현 또는 express 같은 비동기 프레임워크 사용
    • 단점: 생산성 낮음, Spring 생태계 활용 불가