한 줄이면 연결이 시작돼
브라우저의 WebSocket 생성자는 놀랄 만큼 단순해. new WebSocket(url) 을 호출하면 곧바로 프로토콜 전환 핸드셰이크를 시작하고, 생성자가 동기적으로 객체를 돌려준 뒤에도 백그라운드에서 연결 협상을 이어 가. open 이벤트가 오기 전에는 아무것도 보낼 수 없지만, 객체는 이미 있으니 이벤트 수신기는 미리 달 수 있어.
하위 프로토콜
두 번째 인자로 하위 프로토콜 이름 하나 또는 이름 배열을 줄 수 있어. 서버는 핸드셰이크 중 하나를 선택하거나 모두 거절하지. graphql-ws, graphql-transport-ws, mqtt 가 흔한 예야. open 뒤 ws.protocol 을 보면 서버가 선택한 값을 알 수 있어.
URL 을 통한 인증
브라우저 기본 WebSocket 생성자에는 fetch 처럼 사용자 지정 HTTP 헤더를 넣는 선택지가 없어. 그래서 인증 토큰을 URL 쿼리 매개변수로 넘기는 경우가 많아. wss:// 를 쓰면 전송 중 URL 은 암호화되지만 쿼리 문자열은 서버 접근 로그에 남기 쉬워. 오래 유효한 비밀값 대신 수명이 짧은 서명 토큰을 사용해야 해.