2025년 2월 3주차

김동환·5일 전
0

WIL (Week I Learned) - 2025년 2월 21일


FACTS (사실, 객관)

이번 주는 웹소켓을 활용한 마피아 게임 개발에서 많은 문제를 해결하는 과정의 연속이었다. 특히 유저의 세션 관리, 브로드캐스팅 지연, 연결 종료 감지 관련한 이슈들이 계속 발생했다.

유저 재접속 시 세션 유지 문제 해결

  • socket.id가 아닌 userId를 기반으로 기존 세션을 복구하도록 수정
  • Redis를 활용해 연결 상태를 저장하고 복구하는 방식 도입

이벤트 브로드캐스팅 지연 문제 해결

  • io.to(roomId).emit() 방식을 활용하여 모든 유저가 동시에 이벤트를 받을 수 있도록 개선
  • 네트워크 패킷 로깅을 통해 특정 유저가 이벤트를 받지 못하는 원인 분석

소켓 연결 종료 감지 개선

  • disconnect 이벤트가 지연되거나 호출되지 않는 문제를 해결하기 위해 disconnecting 이벤트 활용
  • pingTimeout을 조정하여 유저의 네트워크 연결 상태를 더 빠르게 감지

FEELINGS (느낌, 주관)

이번 주는 정말 정신없이 바빴다. 🤯
웹소켓 기반의 실시간 시스템이 생각보다 훨씬 예민하고, 단순한 로직처럼 보여도 실제 구현 과정에서는 많은 변수가 존재한다는 것을 체감했다.

디버깅이 어렵고, 한 가지 문제가 해결되면 또 다른 문제가 튀어나왔다.

  • 재접속 문제를 해결하면, 이벤트 브로드캐스팅이 꼬이고

  • 브로드캐스팅을 고치면, 연결 해제 감지가 늦게 되고...

    하지만 문제를 해결할 때마다 성취감을 느꼈고, 코드가 점점 개선되는 걸 보면서 뿌듯했다.

  • 특히 Redis를 도입하고, 클라이언트 재접속 문제를 해결했을 때 "이제 제대로 동작하는구나!"라는 느낌을 받았다.

  • 네트워크와 실시간 이벤트를 다루는 데 자신감이 조금 붙었다.

하지만 아직도 개선해야 할 부분이 많다는 생각에 완벽하게 해결했다는 느낌은 들지 않는다.
이제 좀 더 체계적으로 설계를 다듬고, 테스트를 강화해야 할 것 같다.


FINDINGS (배운 것)

이번 주에 배운 가장 중요한 것들:

웹소켓 기반의 실시간 시스템에서는 "세션 관리"가 핵심이다.

  • 단순히 socket.id를 사용하면 재접속 시 새 ID가 부여되어 기존 정보를 유지할 수 없다.

  • 따라서 userId 또는 sessionId 기반으로 유저를 관리해야 한다.

  • Redis 같은 외부 저장소를 활용하면 확실한 상태 관리를 할 수 있다.

    브로드캐스팅 이벤트는 신중하게 관리해야 한다.

  • socket.emit()은 개별 전송이므로, 브로드캐스팅하려면 io.to(roomId).emit() 같은 방 단위 전송을 활용해야 한다.

  • 클라이언트 네트워크 상태에 따라 이벤트가 손실될 가능성이 있으므로, 패킷 로깅 및 재전송 메커니즘도 고려해야 한다.

    웹소켓 연결 종료 감지는 여러 가지 방법이 있다.

  • disconnect 이벤트가 호출되지 않는 경우도 있으므로, disconnecting을 활용하면 더 정확하게 감지할 수 있다.

  • pingTimeout을 조정하면 네트워크가 끊긴 유저를 더 빠르게 감지할 수 있다.

  • 추가로, 클라이언트에서 heartbeat을 주기적으로 보내는 방식도 고려할 수 있다.


FUTURE (미래)

다음 주부터는 이번 주에 배운 내용을 기반으로 더 나은 시스템을 만들 계획이다.

Redis를 활용한 유저 세션 복구 시스템 최적화

  • 현재는 단순한 userId 기반 복구지만, 게임 상태까지 저장하는 방식으로 확장할 예정

    브로드캐스트 이벤트 로직 테스트 및 최적화

  • 여러 네트워크 환경에서 지연이 발생하지 않는지 테스트

  • 이벤트 로깅 및 모니터링 시스템 도입

    네트워크 상태에 따른 유저 연결 관리 개선

  • pingTimeout 조정뿐만 아니라, 클라이언트에서 주기적으로 heartbeat을 보내는 방식도 실험할 계획

이번 주는 해결해야 할 문제들이 많았지만, 그만큼 성장할 수 있었던 한 주였다. 다음 주는 더욱 체계적으로 설계하고, 테스트를 강화하는 방향으로 발전해야겠다!

profile
Node.js 7기

0개의 댓글

관련 채용 정보