개발일지/TIL(Today I Learned)

2024-12-24

프린스 알리 2024. 12. 24.

내일배움캠프 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

댓글