Skip to content

[refactor/#740] 게임 생성 시 보드 브로드캐스트 비동기로 처리하도록 수정 - #753

Merged
kanghana1 merged 6 commits into
developfrom
refactor/#740
Oct 2, 2026
Merged

kanghana1 merged 6 commits into
developfrom
refactor/#740

Conversation

@kanghana1

@kanghana1 kanghana1 commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

❤️ 기능 설명

문제 원인

WS CREATE_GAME 핸들러가 한 스레드(Tomcat worker)에서 아래를 모두 동기로 처리해, 구독자가 많을수록/연속 조작 시 딜레이가 누적되는 문제가 있었습니다.

  1. createGame() 쓰기 TX (게임판 락 + 커밋)
  2. getBoard() 보드 재조회 -> 1의 활성 게임 조회와 중복된 별도 읽기 TX
  3. 요청자에게 GAME_CREATED 응답
  4. broadcastBoardUpdate() -> Redis SMEMBERS + 구독 세션마다 직렬화/전송

변경 후

  • WS 스레드: createGame() TX → GAME_CREATED 응답 만 수행
  • 보드는 createGame TX 안에서 이미 조회한 활성 게임 + 새 게임으로 조립해 반환 (재조회 제거)
  • 같은 보드 스냅샷을 이벤트에 실어, 커밋 후 비동기 리스너가 재조회 없이 BOARD_UPDATED/MEMBERS_UPDATED 전파

연결된 issue

연결된 issue를 자동으로 닫기 위해 아래 {이슈넘버}를 입력해주세요.

close #740



🩷 Approve 하기 전 확인해주세요!

  • 나머지 WS 액션(START/COMPLETE/DELETE/MOVE_TO_WAITING/MOVE_COURT)은 기존 동기 구조 유지 -> 후속 이슈에서 동일 패턴 적용 예정입니다
  • 비동기 전파로 순서 역전 가능성이 있고 해당 건은 이미 [REFACT] 게임판 실시간 스냅샷 순서 보장 #742 를 파두셨더라고요! 머지 후 해당 부분 작업하겠습니다

✅ 체크리스트

  • PR 제목 규칙 잘 지켰는가?
  • 추가/수정사항을 설명하였는가?
  • 테스트 결과 사진을 넣었는가?
  • 이슈넘버를 적었는가?

@kanghana1
kanghana1 requested a review from Dimo-2562 September 28, 2026 14:53
@kanghana1 kanghana1 self-assigned this Sep 28, 2026
@kanghana1 kanghana1 added the 🌟 REFACT New feature or request label Sep 28, 2026
event,
GameRealtimeProtocol.TYPE_BOARD_UPDATED,
() -> gameBoardBroadcaster.broadcastBoardUpdate(
event.gameBoardId(), boardDto.forBroadcast(), null));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기서 자기 세션까지 포함해서 브로드 캐스트를 진행하는데, GAME_CREATED ACK와 브로드 캐스트를 요청자는 모두 받는 구조입니다.

현재 isGameHost가 본인 요청 ACK에는 true로 오지만, 브로드 캐스트로 받은 것은 false이므로 잘못된 값이 적용될 수 있습니다! 세션을 넘겨서 브로드캐스트를 요청자는 빼는 방안은 어떨까요?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거를 구현할 때도 고민을 했었는데, 프론트에 확인해보니까 isGameHost 필드를 사용하고있지 않다고 합니다! 그래서 요청자가 브로드캐스트를 함께 받더라도 잘못된 값이 적용되지는 않을 거 같아요

차라리 742번 이슈를 해결하면서 isGameHost 필드를 제거하는 방향으로 하는게 어떨까 싶습니다! 순서 관련 이슈도 해결하고나면 지금 방식을 유지하는 게 나을 거 같다고 생각했습니다!

@Dimo-2562 Dimo-2562 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

스냅샷 순서가 잘못 적용되는 문제는 PR에서 추후에 적용해준다고 작성해주셔서 인지하고 있겠습니다!! 수고하셨습니다~

@kanghana1
kanghana1 merged commit a9d749e into develop Oct 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🌟 REFACT New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REFACT] 게임 생성 핸들러 경량화

2 participants