현재 퀴즈존에서 사용자를 식별하기 위해 쿠키에 세션ID를 담고 이를 활용하고 있음

이를 위해 express-session, cookie-parser 를 사용하고 있음

처음 서비스에 연결이 있다면 무조건 세션 ID를 발급하고 세션을 할당함

퀴즈 게임을 진행하기 위해 퀴즈존에 접속하게되면 API를 통해 퀴즈존 입장 처리와 퀴즈존 상태 관련 데이터를 전송받기 때문에 사용자는 쿠키를 통해 세션 ID를 무조건 발급 받게됨

하지만 Nest의 웹소켓 처리를 위해 활용한 WsAdapter의 특성으로 인해 웹소켓에서 REST API의 Controller와 유사한 역할을 담당하는 Gateway에서는 미들웨어로 등록한 express-session, cookie-parser 의 처리를 직접적으로 활용할 수 없음

웹소켓 연결

웹소켓 연결은 아래와 같은 과정을 거침

  1. 클라이언트에서 ws:// (https 환경이라면 wss://) 프로토콜로 연결을 시도
  2. 브라우저에서 http를 통해 웹소켓 연결 요청을 보냄
  3. 서버에서 http 응답 헤더를 통해 현재 연결을 웹소켓으로 Upgrade 하라는 응답을 보냄
  4. 클라이언트에서 Upgrade 응답을 받으면 해당 http 연결을 웹소켓 연결로 승격하고 이후부터는 해당 연결(채널)을 통해 데이터를 주고받음

express-session

express-session은 express의 미들웨어를 구현한 함수로 NestApplication의 use 메서드는 내부적으로 선언된 httpAdapter의 use를 호출할 뿐임

Nest에서 ws 라이브러리 사용