기간: 2024.11.09 ~ 2024.12.14
프로젝트 링크: https://www.x-mas.run/
프로젝트 설명: 실시간 웹 3D 멀티플레이 게임
나의 역할:
- 백엔드 개발 → 캐릭터 스킬 , 선물뺏기 상호작용 , 아이템 등등 서버가 게임상태를 갱신할때마다 계산하는 인게임 로직부분 개발
- 클라이언트들간의 동기화 및 유효성 검사
- aws 인프라 세팅 및 github CI/CD 부분 담당
내가 만난 문제와 해결과정:
초반 설계과정) 물리엔진 주체를 어디에 둘지?
- 클라이언트 데이터를 조작하는 해킹을 방지하기위해 처음에는 서버에 주체를 두었음
- 네트워크 속도, 서버와의 통신주기에 따라 크게 변하는 사용자 경험과 사용자수에 비례한 서버연산량 증가 등 우리의 코딩으로 해결할수없는 단점들이 있다고 판단했음
- 클라이언트로 물리엔진 주체를 옮겨서 사용자가 본인 캐릭터의 움직임을 즉각적으로 조정할수있게 변경했음
클라이언트간의 동기화와 데이터 유효검 검증의 과정이 필요했음
- 동기화 부분은 백엔드 서버 내부에 큐를 만들어 소켓 통신이 도착하는 순서를 보장하였고, UDP 통신으로 변경하려고 시도했을때는 서버에서도 예측모델을 적용해서 데이터를 갱신하려했으나 UDP 통신으로 변경하진않았기에 서버에서의 예측은 포함하지않았음.
- 유효성 검사부분은 게임에서 가능한 위치와 속도 범위를 정해두고 이를 체크했으며, 스킬이나 아이템 사용으로 인해서 발생하는 여러 예외상황도 체크하여 적용했음