프로젝트/메타버스 게임

[메타버스 게임] 캐쥬얼 배틀로얄 프로젝트 기술 스택

마달랭 2025. 3. 27. 16:32

개요

2주간의 명세와 MVP 기획 과정을 거친 후 직접 개발을 위한 기술 스택을 정리하는 시간을 가졌다. 우선 가장 크게 우려가 되었던 부분은 멀티 플레이 환경에서의 각 세션간의 동기화를 처리해주는 과정이었다.

 

클라이언트는 유니티를 사용하기로 결정하였으며, 서버는 지연이 가장 발생하지 않는 소켓 서버를 사용하기로 결정하였다. 직접 데디케이트 소켓 서버를 통해 연결된 모든 유저에게 브로드캐스팅 하는 방법으로 처리하고 싶었지만 프로젝트 기간이 한정되어있는 관계로 해당 부분은 프레임워크를 사용하기로 결정하였다. 선택한 프레임워크는 유니티 미러로 클라이언트 끼리의 동기화를 진행해 주는 기능을 사용하기 쉽게 제공해 준다.

 

프로젝트를 어느정도 진행하고 나서야 깨달은 것이지만 유니티 미러는 P2P방식으로, 만약 호스트가 접속을 종료하게 되면 연결된 클라이언트들이 모두 튕겨져 나간다는 단점이 있었다. 이 부분은 유니티 미러 자체를 데디케이트 서버처럼 동작하게끔 하여 유저간 동기화만 지원해 주는 것으로 해결하였다.

 

 

시스템 아키텍쳐



유저 플로우

  1. 각 클라이언트는 실행 시 소켓 서버로 소켓 연결을 진행한다. 이때 각 세션에 임시 토큰을 부여한다.
  2. ID와 password를 통해 회원가입이 가능하며 이미 등록된 ID는 사용이 불가능하다.
  3. 회원가입 시 ID는 정규식을 통해 이메일 형식이거나 영어, 숫자로만 이루어져 있는지 검증 절차를 밟는다.
  4. 회원가입이 정상적으로 완료된 경우 데이터베이스에 유저 정보가 저장되며 이 때 비밀번호는 SHA-256 알고리즘을 통해 해싱되어 저장된다.
  5. 회원가입한 ID와 password를 입력하여 로그인을 진행한다, DB를 탐색하며 ID가 존재하는지, password를 해싱한 값과 DB에 저장된 값이 일치하는지를 판단하여 일치한다면 로그인을 진행한다.
  6. 로그인 시 임시로 발급된 토큰을 신규로 갱신하며 서버의 해시맵에 유저id와 토큰을 매칭시키고, 토큰과 세션의 포인터를 매칭시킨다, 각 세션에는 연결된 유저id와 이름, 닉네임, 토큰값 등을 기록해 준 뒤 로비로 이동한다.
  7. 로비에선 현재 생성된 방 목록을 조회하고, 방 생성과 참가 로직을 수행할 수 있다.
  8. 또한 자신의 닉네임을 변경할 수 있는 기능도 제공한다.
  9. 유저가 방을 만들 경우 DB에서 TERMINATED상태인 방의 id, ip주소, 포트번호를 반환하여 클라이언트에서 해당 방(유니티 미러)에 입장하게 한다.
  10. 방 생성과 입장이 성공적으로 이루어 졌다면 해당 방의 상태를 WAITING으로 변경하여 방 목록 조회 시 해당 방에 참가할 수 있도록 보여지게 된다.
  11. 방에 참가중인 사람이 방 생성시 설정했던 MaxPlayers보다 적을 경우 해당 방에 참가할 수 있다.
  12. 각 방에서 2명 이상의 사람이 모인 경우 게임을 시작할 수 있다, 클라이언트간 동기화는 유니티 미러가 책임지며 게임 내에서 발생한 모든 이벤트를 Json형식으로 기록하여 게임이 끝난 경우 로그서버로 전송한다.
  13. 로그 서버에서는 해당 데이터를 전처리하여 지표 정보를 파싱해 지표 서버로 전달하고, 지표 서버에선 스킬 선택 여부에 대한 상관관계를 조사하여 NoSQLDB에 저장한다. 해당 데이터는 추후 클라이언트에게 스킬 강화에 대한 추천을 위한 지표로 활용된다.
  14. 기타 게임에서 발생된 모든 로그 데이터는 메시지큐를 걸쳐 일정 스케쥴링에 따라 엘라스틱 서치에 기록된다.

 

기술 스택

  • 클라이언트 : Unity
  • 인프라: AWS EC2, Docker
  • 로드밸런서 : NginX, K8S
  • 메인 소켓 서버 : Boost.asio C++
  • 검증 DB : PostgreSQL
  • 게임 서버 : Unity Mirror
  • 로그 서버 : SpringBoot
  • 지표 서버 : SpringBoot
  • 지표 DB : MongoDB
  • 메시지 큐 : Kafka
  • 로그 DB : Elasticsearch
  • 데이터 처리 : logstash
  • 데이터 분석 : kibana

난 메인 소켓 서버와 검증 DB에 대한 역할을 맡았다.

728x90