한걸음씩
로그인
한걸음씩
로그인
230302 TIL
이지섭
·
2023년 3월 2일
팔로우
0
내일배움캠프 TIL
0
오늘의 공부
웹소켓 프로그래밍
단방향 프로토콜인 HTTP의 단점을 보완하기 위해 개발된 프로토콜
일반 소켓 통신과는 달리 HTTP 80포트를 사용하여 연결되기 때문에 방화벽의 제약이 없다.
웹소켓이 없었을 땐... 양방향 통신을 하기 위한 여러 방법들이 있었다
polling
새로운 정보가 있는지 계속해서 서버에 요청하여 확인하는 방식
계속 새로고침
클라이언트가 많아질 수록 서버 부담 급증
long-polling
클라이언트가 서버에 요청을 보낸 상태로 기다린 뒤, 서버가 응답을 하면 즉시 이벤트를 전달하며 연결이 종료
다수의 이벤트가 한번에 발생할 경우 서버 부담 급증
streaming
long-polling과 비슷하지만, 연결이 종료되지 않고 계속해서 새로운 이벤트를 받는다
long-polling의 단점은 해소되었지만, 데이터를 '주고 받는'것 보단 받기만 하는것이 더 중점
web socket
연결을 계속 유지
클라이언트의 요청 없이도 서버가 먼저 데이터를 보낼 수 있다
TCP 소켓과 다른 점?
최초 연결(Handshake)이 HTTP request를 통해 이루어지므로 추가 방화벽을 열지 않고도 통신이 가능하고, CORS나 인증 등 HTTP의 특성을 동일하게 가진다.
항상 web socket이 좋은 것은 아니다. 상황에 따라 적절한 방식을 사용
HTTP와 REST에서 Application은 여러 URL로 모델링 된다.
반면에 웹 소켓은 일반적으로 초기 연결을 위한 URL이 한 개만 존재한다.
이런데 어떻게 여러개의 방이 개설되는지 이해가 가지 않았지만,
STOMP를 이용하면 가능한 것 같다.
문제와 시도
채팅내역 저장은 어떻게 하나?
모든 내역들을 한 줄 한 줄 RDB에 저장하는것이 맞나?
테이블 구조를 어떻게 짜야하나
다수의 채팅방은 어떻게 구현하나?
웹소켓은 URL이 하나뿐인데, 어떻게 다수의 채팅방을 구현하나?
해결과 학습
채팅내역 저장은 어떻게 하나?
대용량 데이터를 다루는 실무에서는 어떨지 모르겠지만, RDB에 저장하는 사례들이 많았다.
하지만 매 전송 시 마다 INSERT를 하면 DB의 부담이 커지므로
Redis를 활용하여 일정량을 임시 저장해둔 뒤
flush하듯 한번에 INSERT하는 방식을 적용해볼 생각
4개의 테이블로 나누어 구현예정
모임 채팅방
모임 채팅방 채팅내역
개인 채팅방
개인 채팅방 채팅내역
다수의 채팅방은 어떻게 구현하나?
STOMP를 활용하면 해결 가능한 듯 하다. 학습이 필요
메모
프론트 <-> 백 연결하는 작업에서 잔 오류들을 해결하느라 시간을 많이 뺏겼다...
이지섭
Stop thinking. Just do it.
팔로우
이전 포스트
230208 TIL
다음 포스트
230306 TIL
0개의 댓글
댓글 작성
관련 채용 정보