2025년 2월 27일

김동환·2025년 2월 27일

오늘의 TIL

  1. 인지
    밤 페이즈에서 모든 플레이어의 행동이 완료된 후에도 클라이언트가 밤 결과를 정상적으로 수신하지 못하는 문제가 발생함.
    추가적으로, 클라이언트에서 같은 이벤트가 중복으로 여러 번 출력되는 현상이 확인됨. 게임에 참여한 모든 플레이어에게 이벤트가 개별적으로 전송되면서, 결과가 8번 출력되는 문제가 발생함.

  2. 원인
    서버에서 processNightResult 실행 후 결과를 클라이언트에 명확하게 전송하지 않음.
    ROOM:NIGHT_RESULT 이벤트가 정상적으로 실행되지 않거나, 특정 조건에서 누락될 가능성이 있음.
    server.to(roomId).emit()을 사용하여 이벤트를 전송하는 과정에서, 방(Room)에 속한 모든 클라이언트가 개별적으로 동일한 이벤트를 수신하게 됨.
    이로 인해 클라이언트에서 하나의 이벤트를 한 번만 받아야 하는데, 여러 번 출력되는 문제가 발생함.

  3. 대응
    서버에서 강제적으로 추가 이벤트를 전송하여 문제 해결 시도.
    server.to(roomId).emit('GAME:RESULT_TEST'); 이벤트를 추가하여 클라이언트가 결과를 정상적으로 받을 수 있도록 조치함.
    GAME:RESULT_TEST 이벤트를 클라이언트에서 확인한 결과, 정상적으로 반응하는 것을 확인.
    또한, 클라이언트에서 중복 출력되는 문제를 해결하기 위해 다음 조치를 검토함.
    이벤트가 중복 실행되지 않도록 서버에서 한 번만 실행되도록 개선.
    클라이언트에서도 동일한 이벤트를 여러 번 수신하지 않도록 필터링 로직 추가.

  4. 해결
    triggerNightProcessing에서 server.to(roomId).emit('GAME:RESULT_TEST');를 추가한 후, 클라이언트가 정상적으로 반응하는 것을 확인함.
    클라이언트에서 중복 수신 문제가 발생하는 원인을 분석한 결과, 서버에서 이벤트가 플레이어 수만큼 개별 전송되는 것이 원인이었음.
    해당 문제를 해결하기 위해 이벤트가 한 번만 실행되도록 처리.

  5. 개선
    기존 이벤트(ROOM:NIGHT_RESULT)가 정상적으로 동작하는지 점검하고, 왜 실행되지 않았는지 원인 분석 필요.
    GAME:RESULT_TEST를 추가해 테스트를 진행했으므로, 최종적으로 ROOM:NIGHT_RESULT 이벤트가 예상대로 실행되도록 수정해야 함.
    서버에서 processNightResult가 한 번만 실행되는지 확인하고, 불필요한 중복 실행을 방지하기 위한 구조 개선 필요.
    클라이언트에서도 이벤트를 한 번만 처리하도록 개선하여, 같은 결과가 여러 번 출력되지 않도록 조치.

  6. 결론
    이벤트 정상 수신 문제 해결: GAME:RESULT_TEST 이벤트를 추가하여, 클라이언트가 밤 결과를 정상적으로 수신할 수 있도록 조치함.
    중복 이벤트 실행 문제 해결: 클라이언트에서 같은 이벤트가 여러 번 출력되는 문제를 방지하기 위해 서버에서 이벤트를 한 번만 실행하도록 개선.
    추가 검토 예정: 기존 ROOM:NIGHT_RESULT 이벤트가 정상적으로 작동하지 않은 원인을 파악하고, 이후 유사한 문제 발생 가능성이 있는 다른 이벤트 처리 방식도 점검할 예정.

profile
Node.js 7기

0개의 댓글