양방향 프로토콜(full duplex)를 지원하는 web socket에 대해서 공부를 시작했다.
헬스타트 프로젝트에서 같은 헬스장을 공유하는 사람들한테 채팅방을 제공하면 좋을 거 같다고 생각해서 추가하기로 했다(자소설 닷컴 채팅방 같은 느낌으로)
web socket의 구조나 방법은 이해를 했는데 아직 코드 레벨로는 많이 부족한 느낌이다.
오늘의 궁금한점
1. web socket 프로토콜을 연결할 때, http 프로토콜로 WebSocket handshake 요청 보낸 후(upgrade) 진행하는걸로 알고 있는데 ws는 http 위에서 동작하는 프로토콜인가???
2. http 프로토콜에서 사용자 인증을 위해서는 jwt를 같이 보내거나 session id를 보내서 인증을 진행하는데 ws 프로토콜로는 어떻게 처리하는가??? (메시지를 보낼 때 마다 ws 헤더? 쪽에 인증 정보를 담아서 보내야하는가?)
-> websocket 자체가 양방향 통신 + statefull한 프로토콜이기 때문에 첫 메시지 or ws로 업그레이드 요청시에만 인증을 하면 충분하다.
3. 다대다 채팅방을 만드는 경우에 한명이 메시지를 보내면 다른 모두가 해당 메시지를 받아야하는데 이때 client 간에 ws 연결이 필요한가? 아니면 채팅방과 사람간에 연결하고 pub/sub 구조로 진행을 하는가?
-> 이 부분은 stomp의 simple broker를 통해서 pub/sub 구조로 진행하는 것으로 이해했다. 하지만 아직 client간 ws 연결이 필요한가는 잘 모르겠다.
4. web socket, http 모두 application layer에서 동작하는 프로토콜이다. 그런데 왜 http 요청을 통해서 web socket으로 upgrade를 한다는 표현을 쓰는걸까? smtp 요청을 쓸때에는 이런걸 안하는걸로 알고있는디...
-> smtp는 독자적인 포트, 문법체계를 가진 프로토콜이기 때문에 http에서 돌아가지 않아서 가능.
하지만 web socket은 http와 동일한 포트(80, 443)을 사용하기 때문에 겹치는 상황이라 따로 명시를 해줘야함.
그러면 드는 궁금점 왜 동일한 포트를 사용하게 했지?
smtp나 다른 겹치지 않는 프로토콜은 옛날(http 비표준)일 때 독자적으로 개발
web socket의 경우 2010년대에 개발 -> 비표준 포트, 비 http 트래픽을 차단 -> 포트를 그대로 사용하고 http 요청을 통해서 업그레이드 하는 방안을 사용
-> upgrade는 http에서 web socket으로 바꾸고자 하는 의미(포트가 동일하기 때문). web socket이 http보다 상위에서 돌아가는 개념이 아니라 현재 포트에서 사용하는 프로토콜을 바꾼다는 의미
역시 이론과 실습은 거리가 있다. 이론적으로 많이 알면 실습을 빨리 할 수는 있겠지만, 그 정도 이론적 지식을 쌓는 시간에 실습을 하며 더 자세하고 빠르게 알 수 있다. 특히나, 우리는 만들어진걸 이해하고 가져다 쓰는 입장(프레임워크 사용)이니까 어떤 기술을 익히는데에는 실습만한게 없는거같다.
오늘은 이론적인 지식을 주로 공부했으니 내일부터는 실습을 하며 머리박치기를 해보자!!!!
'일기' 카테고리의 다른 글
| 6.9 - 오늘의 기록 (채팅 이해, 다양한 방법으로 구현) (0) | 2025.06.09 |
|---|---|
| 5.26 - 오늘의 기록 (채팅에 어떤 db를 사용하는게 맞을까?) (0) | 2025.05.26 |
| 5.23 오늘의 기록 (2) | 2025.05.23 |
| 5.21 - 오늘의 일기 (채팅 고도화) (0) | 2025.05.21 |
| 5.20 - 오늘의 일기 (mongo db) (0) | 2025.05.20 |