채팅 기반 마피아 게임(Spring Boot 서버 + Unity 클라이언트)에서 방장이 대기실 설정을 바꾸는 기능을 만들었다. 바꿀 수 있는 항목은 방 제목, 최대 인원, 공개/비밀방 여부, 비밀번호다. 참가자의 준비 상태는 그대로 두고, 바뀐 내용은 채팅방에 시스템 메시지로 알린다.1. PUT과 PATCHPUT은 리소스 전체를 보낸 값으로 바꾸는 요청이고, PATCH는 보낸 필드만 바꾸는 요청이다. PATCH는 "보내지 않은 필드"와 "기본값을 보낸 필드"를 구분할 수 있어야 쓸 수 있다.Unity의 JsonUtility는 int, bool 필드를 빼고 직렬화하지 못한다. 최대 인원만 바꾸고 싶어도 privateRoom: false가 항상 함께 간다. 이 상태로 PATCH를 쓰면 서버는 "공개방으로 바..
채팅 기반 마피아 게임 서버(Spring Boot + Redis)와 Unity 클라이언트에서, 대기실에 있던 플레이어가 앱을 끄면 방 데이터만 남는 문제를 해결한 과정을 정리한다. 처음 떠올린 방법부터 최종 구현까지 어떤 선택지를 비교했고 왜 그렇게 결정했는지를 함께 남긴다. 1. 고아룸고아룸은 실제로 접속한 플레이어는 없는데 방 데이터만 Redis에 남아 있는 방이다. 방 나가기는 대기실의 [나가기] 버튼이 보내는 DELETE /api/v1/rooms/{roomId}/players/me 하나뿐이었고, 이 요청이 가지 못하면 서버는 플레이어가 떠났다는 사실을 알 방법이 없었다.증상은 빈 방이 목록에 남는 것에 그치지 않는다. 실제 사람이 있는 방에 유령 참가자가 섞이면 자리를 차지하고, 준비를 할 수 없..
서버의 로비(방) API는 요청한 사람을 토큰의 memberId로 받아 서비스 안에서 직접 User를 조회하고 있었다.반면 게임·투표·밤 API는 CurrentUserResolver로 userId를 구해 서비스에 넘기고 있었다. 같은 일을 하는 방식이 두 가지 섞여 있었고, 이번 작업에서 로비도 게임 쪽 방식으로 맞췄다.1. Member와 UserMember는 로그인 계정이고 User는 게임 프로필이다.한 사람은 계정 하나와 프로필 하나를 가지며, 둘은 users.member_id(UNIQUE) 값으로 1:1 연결된다. Member (members)User (users)역할로그인 계정게임 프로필가진 정보username, password, provider(LOCAL/GOOGLE/KAKAO), provide..
채팅 기반 마피아 게임의 대기실(Room 씬)에 방장 위임과 플레이어 추방 기능을 추가했다. 서버는 Spring Boot(Java), 클라이언트는 Unity(C#)이고, 서버 푸시 없이 클라이언트가 1초마다 방 상태를 조회(polling)하는 구조다.1. REST API 설계방장 위임은 "방장이 누구인가"라는 방의 속성을 정하는 요청이고, 추방은 방의 참가자 하나를 지우는 요청이다. HTTP 메서드는 이 의미에 맞춰 골랐다.PUT은 리소스의 상태를 정하는 메서드다. 같은 요청을 여러 번 보내도 결과가 같아야 하는데(멱등성), "방장을 5번 유저로 정한다"는 몇 번을 보내도 결과가 같으므로 PUT이 맞다. DELETE는 리소스를 지우는 메서드라 "방의 참가자 7번을 지운다"는 추방과 대응된다. 성공 시 돌..
게임의 대기실(Room 씬)에 레디 기능을 추가했다.https://youtube.com/shorts/siGQmesypjw?feature=share 방장을 뺀 모든 참가자가 레디하고 인원이 4명 이상이면 방장이 게임을 시작할 수 있다.방 상태는 Redis에 JSON으로 저장되고 클라이언트는 1초마다 방을 조회(polling)한다. 요약서버 - feat(Room):참가자 준비(레디) 기능 추가PUT /api/v1/rooms/{roomId}/players/me/ready 추가body: {"ready": true | false}, 성공 시 204ready 누락/본문 없음 400, 게임 중·미참가자·방장 409방장을 제외한 모든 참가자가 준비해야 게임 시작 가능 (아니면 409)RoomService.setRea..
방 검색 기능을 추가했다.로비의 FindRoomArea에 검색어를 입력하고 Enter나 검색 버튼을 누르면, 서버가 제목이 일치하는 방만 골라서 돌려준다. 규칙은 다음과 같다.제목만 검색하고 일부만 맞아도 찾는다.대소문자와 공백을 무시한다. "초보 만"으로 검색해도 "초보만" 방이 나온다.비밀방도 검색 결과에 포함한다.검색어는 공백을 빼고 30자까지 받는다.1. Query ParameterQuery Parameter는 URL의 ? 뒤에 key=value 형태로 붙는 값이다.같은 자원을 어떤 조건으로 조회할지 지정할 때 쓴다. 검색 API를 새로 만들지 않고 기존 방 목록 API(GET /api/v1/rooms)에 keyword를 선택 파라미터로 붙였다.응답 형식이 같아서 클라이언트 DTO를 바꿀 필요가 ..