매칭 서버 분리 및 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 생태계 활용 불가