내일배움캠프 Node.js 트랙 42일차
웹소켓 이벤트 명세서 작성하기
패킷 구조와 PAYLOAD
드디어 타워 디펜스 프로젝트가 시작되었다!
지난 개인 프로젝트에 이서어 웹소켓 통신으로 실시간 게임을 구현하게 되었다. 잠시 내 개인 프로젝트를 돌아보자면, 게임 기획 단계부터 어느 정도 윤곽을 잡고 코드를 작성하기 시작했던 게 도움이 많이 되었던 것 같다. 이번 프로젝트는 규모가 더 커진 만큼 API 명세서를 더 꼼꼼히 써두는 게 좋지 않을까. 그래서 오늘 하루는 오후 늦게까지 팀원들과 어떻게 게임을 만들어나갈지 길게 회의를 나누게 되었다.
그러다 살짝 고민에 빠졌는데, 웹소켓 이벤트의 경우 어떻게 명세서를 작성해야할지 확신이 없었기 때문이다. 때마침 참고가 되었던 건 지난 프로젝트 때 제작했던 패킷 구조였다.
아래 테이블들은 내 코드에서 실제로 사용되었던 패킷 구조와 payload를 정리한 내용이다.
공통 패킷
필드 명 | 타입 | 설명 |
---|---|---|
handlerID | int | 요청을 처리할 서버 핸들러의 ID |
uuid | int | 요청을 보내는 유저의 UUID |
clientVersion | string | 현재 클라이언트 버전 (”1.0.0”) (고정) |
payload | JSON | 요청 내용 |
스테이지 이동
필드 명 | 타입 | 설명 |
---|---|---|
currentStage | int | 현재 스테이지 |
targetStage | int | 이동하는 스테이지 |
재료 획득
필드 명 | 타입 | 설명 |
---|---|---|
clientIngId | int | 클라이언트에서 획득한 아이템 ID |
clientScore | int | 클라이언트 기준 스코어 |
clientStageId | int | 클라이언트 기준 스테이지 ID |
clientTimestamp | int | 클라이언트 기준 타임스탬프 |
지난 프로젝트는 클라이언트가 특정 이벤트를 호출할 때 사용될 공통 패킷을 설정하고, 핸들러마다 필요한 payload를 변수로 받는 방식으로 구성되어 있었다. 따라서 핸들러 ID나 이벤트 네임으로 함수들을 분류하고 그에 따른 payload를 미리 구상하는 것이 오늘 팀 회의의 목표 중 하나가 되었다.
구글 스프레드시트로 명세서 작성하기
이벤트 핸들러 목록
대략적으로 매핑을 해두었던 핸들러 함수들의 목록을 작성하고 그 역할을 간단하게 정의해보았다.
공통 패킷
패킷에서 공통으로 정의된 키들은 위와 같이 정리해보았다. 기본적으로 직전 프로젝트의 구성과 다르지 않다. 다만 userId에 들어가는 값이 이번에는 uuid가 아니라 실제 생성된 계정의 ID가 들어갈 예정이다. 따라서 클라이언트에서 이 값을 어떻게 전달할지 구현하는 게 관건이 될 것으로 보인다.
핸들러 함수별 PAYLOAD
핸들러 함수별 PALOAD는 위와 같이 작성해보았다. 지면상의 이유로 일부만 가지고 왔는데 사실 변동될 가능성이 높아보인다. 특히나 towerId나 towerCoordinate 부분은 실제 구현하는 팀원들이 둘 중 하나의 데이터만 사용할 수도 있다. 특정 id를 가진 tower를 생성, 수정, 삭제하는 것과 특정 좌표에 있는 tower를 생성, 수정, 삭제하는 것은 (중복 건설이 안 된다는 가정 하에) 같은 의미이기 때문이다. 때마침 내가 클라이언트에서 타워 파트를 맡게 되었으므로, 이 패킷을 어떻게 작성하고 어떻게 수정하는 게 좋을지 깊게 고민해봐야할 것 같다.
'개발일지 > TIL(Today I Learned)' 카테고리의 다른 글
2024-12-27 (1) | 2024.12.27 |
---|---|
2024-12-26 (1) | 2024.12.26 |
2024-12-23 <복잡한 IOCP 쉽게 이해하기> (4) | 2024.12.23 |
2024-12-22 <전송 계층> (1) | 2024.12.22 |
2024-12-20 <트러블 슈팅> (1) | 2024.12.20 |
댓글