<aside> <img src="/icons/bookmark_purple.svg" alt="/icons/bookmark_purple.svg" width="40px" />

목차

</aside>

🎬 개요

친해지길 서비스에선 현재 같은 방에 새로운 탭으로 들어가면 중복으로 입장이 가능하다, 심지어 다른 사람으로 판정이 된다.

어째서일까? 이는 브라우저의 탭마다 다른 브라우징 컨텍스트를 가지기 때문이다. 각 탭마다 독립적인 메인 스레드를 가지고, 하나의 탭에서 저장된 정보가 다른 탭에서는 유지가 되지 않는다.

기존 프로젝트에선

    if (!socket) {
      connect();
    }

와 같이, 소켓이 존재하지 않을 경우 연결을 시도한다. 이미 A 탭에서 소켓에 연결했더라도 B 탭에 공유가 되지 않으므로 B 탭의 소켓은 null이고, 따라서 새로운 소켓 연결을 구축하게 된다.

이런 경우는 어떤 문제점이 있을까?

  1. 게임 결과 조작
  2. 불필요한 서버 리소스 낭비

과 같은 문제점이 있다.

각 문제점은 어째서 문제일까?

1. 게임 결과 조작

우리의 서비스는 각 참여자들의 관심사의 종류와, 어떤 관심사가 인기 있는지 나타내는 걸 목적으로 한다. 그런데 특정 사용자가 그 결과를 마음대로 조작할 수 있다면? 사용자 입장에서 우리 서비스가 나타내는 결과를 신뢰하기 어렵다. 결과를 신뢰할 수 없는 서비스는 사용자 입장에서 이용하고 싶지 않을 것이다.