2025/01/03 2

CQRS 패턴을 이용한 데이터 쿼리 - 게임 전적과 통계 구현

들어가기에 앞서리그오브레전드의 전적 검색이나 통계 시스템을 생각해보자. ​각 사용자의 전적에서는 사용한 챔피언별로 판수나 승률이 함께 조회된다. 심지어 각 챔피언별 판수나 승률, 아이템과 어떤 스펠을 사용했을때 가장 승률이 높은지도 알 수 있다.op.gg ​보이는거만 해도 각 챔피언당 몇 백만 판수씩 나오는데, 고작 플레이 수나, 승패에 따른 승률을 연산하기 위해 일일이 DB에서 꺼내와 더할건가?​예시가 너무 게임이라 다시 들자면 토스에서 제공하는 서비스중에서 서초구에 위치한 20대들의 평균 잔고가 얼마인지 제공하는게 있다.   모든 사용자들 중에서 서초구, 20대인 사람들을 쿼리문으로 조회해서 평균 잔고를 모두 더했겠는가? 그 사용자들이 100만 명이어도 평균을 계산하기 위해 모든 잔고를 더할건가? ...

project/wargame 2025.01.03

MSA? 이길 수 없다면 합류해라 (feat. Kafka IPC 트러블슈팅)

당근마켓도 100만 MAU 뜨고 나서야 MSA를 도입했다는거 보면, 사실 그정도 규모 이하는 모놀리식으로 충분하다는 소리다.​도대체 왜 이렇게 MSA에 목메이게 되었는가..​이길 수 없다면 합류해라​나도 MSA하겠다​​이거말고 진짜 MSA를 결심한 이유원래 C++로 이뤄진 게임 서버와 통신하기 위해 Kafka를 사용했었다.   매칭 결과나 전적 결과를 저장하기 위해서라도 전달 과정에서 최소 한번은 디스크에 기록되어야 했다.​1. 매치메이킹의 결과를 받아서 게임 서버에 방을 생성2. 게임이 끝나면 그 결과를 다시 웹서버로 전달 대충 목적인데 닭 잡는데 소 칼 쓰는 느낌이다. 그래서 kafka를 좀 더 효율적으로 쓰기 위해서 고도화를 고민해봤다. ​일단 Redis를 이용하던 매치메이킹 기능이 스케줄러로 동작..

project/wargame 2025.01.03