랭킹 서비스를 설계하면서.. 게임이 끝나면 발생하는 프로세스를 추적해보았습니다. 게임이 종료될 때마다 게임 서비스(멀티 모드, 배틀 모드)에서 참여한 모든 유저에 대한 게임 결과를 유저 서버에 전송한다.유저 서버가 게임 결과를 받아서 경험치를 업데이트 한다.유저 서버에서 게임 결과를 통해 경험치를 업데이트하고, 랭킹 서버로 업데이트한 경험치를 보낸다.저희가 걱정한 부분은 게임 기록에 대한 손실이었습니다. 만약 유저 서버가 일시적으로 다운되거나 응답이 늦어질 경우 게임 기록이 손실될 위험이 있다고 판단하였습니다.유저 입장에서 게임 기록이 손실되는 일은 있어서는 안된다고 생각했습니다. 따라서 저희는 메시지 큐를 도입하여 이 문제를 해결하고자 하였습니다. 메시지큐 중에서 RabbitMQ와 Kafka를 비교하고..
실제 서비스 운영을 고려..MSA를 적용하여 확장성과 안정성을 강화하고자 하였습니다.근거는 다음과 같습니다.저희의 MVP(Minimum Viable Product)는 멀티 모드였습니다. 처음 기획할 때 목표는 멀티 모드를 빠르게 배포하여 서비스를 운영하면서 추가 기능을 독립적으로 개발하고자 하였기 때문에 MSA를 적용해야겠다고 생각했습니다.장애 격리를 목표로 하였습니다. 각 게임 모드를 독립적인 서비스로 분리하여, 하나의 서비스에 장애가 발생해도 다른 게임 모드는 정상적으로 운영되면 좋겠다고 생각했습니다.예를 들면, LOL을 할 때 랭크 게임에 문제가 발생해도 일반 게임이나 칼바람의 나락은 정상적으로 플레이 할 수 있는 것과 같이 구현하고 싶었습니다. 수평적 확장(Scaling Out)을 고려하였습니다...