우선 어제 발견한 에러
이 에러는, http://localhost/webSocketTest 경로로 들어가서 발생한 에러이다.
어제 코드를 살펴보면 handShake에 대한 설정을 해두지 않았기에 , HandShake를 통해 upgrade가 필요하다는 내용이다.
그렇다면 HandShake의 기본 개념은 포트를 전환한다. 라고 생각을 하고 구조를 살펴보자.
인터넷에서 많이 본듯한 이 자료의 의미는 http://localhost:port/webSocketTest 링크로 들어온 사용자가 있다면, Upgrade Header의 값으로 Response Header를 전환한다는 의미인 것 같다.
그렇다면 어제 본 error code인 아래 에러 코드가 이해가 된다.
즉, "너 경로 잘 못 들어왔는데 우리가 해줄게,, 근데 업그레이드 할 값이 없네?" 정도로 생각하면 될 것 같다.
**HTTP 101 번은 성공적으로 handshake가 마무리 되었음을 알려주는 값이다.
WebSocket Test
우선 구현한 코드에 이상이 있는지 체크하기 위해서 Crome의 플러그 인인 Simple WebSocket Client를 다운 받았고 여기서 테스트를 진행해보려한다. 왜인지 모르겠으나 PostMan에서는 Port를 찾지 못한다...
정상적으로 WebSocket Server가 생성 되었다.
webSocket Session을 통해 Session ID가 들어오는 지 확인하고, 연결이 활성화 되었다고 log로 표현한다.
실시간으로 값을 제대로 받아오는지 확인하기 위해서 두 개의 Session을 열어준다.
왼쪽 session에서 안녕하세요를 입력하게 되면,
이렇게 뜨는데 , 빨간 색 글씨는 "Request 된 내용으로 보인다. "
자 동작은 잘 되는지 확인했으니, 어떤 구조로 어떤 정보를 담고 실행이 되는지 이제 파헤쳐 보자 \
WebSoket - INFO
메세지를 보내면
session 정보와 message payload한 값이 보인다.
WebSoketSession 내에서는 session ID와 uri , 즉 경로 값을 가지고 있다.
그럼 message에는 어떤 정보들이 있는지 살펴보자
Message가 가지고 있는 정보이다.
여기서 WebSocketMessage<?> message를 파라미터로 받으면서 제네릭타입으로 받고 있는데, 기본적으로 TextMessage타입이 들어오고 있는 것으로 보인다. payload는 request로 전송한 message값, 그 안의 byte 값, 등이 들어있는 것 같고,
last.가 true일 경우 전송을 수행하는 것 같다.
이렇게 정보를 전송해주면
이제 다른 세션 아이디에 정보가 업로드가 되는 구조 인것 같다.
Handle Message가 한번더 실행이 되며
Session iD값이 바뀌고
동일한 정보가 들어오고 있다.
즉, 하나의 메세지를 보내면
message를 send하면 webSocket Frame을 사용하여, 다시 재전송 되는 느낌을 강하게 받았다.
암튼,,! 오늘은 테스트와 기본적으로 어떤 정보들을 담고 있는지에 대해 알아보았다.
다음 포스트는 아마도, WebSocket과 Load Balancer에 대해 이야기 를 할 것 같기도 하다,,
'IT > Spring' 카테고리의 다른 글
Spring webSoket의 이해 - 기본 개념을 따라서 (2) | 2024.05.02 |
---|