HTTP 통신
Hyper Text Transfer Protocol의 약자로써 인터넷에서 데이터를 주고받는 프로토콜을 말합니다.
Client의 요청(Request)이 있을 때만 서버가 응답(Response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식
HTTP로 실시간 통신 하는 법
poilling 폴링
- 브라우저가 일정한 주기마다 서버에 HTTP 요청을 보내는 방식
- 실시간 데이터의 업데이트 주기는 예측 불가능하므로, 불필요한 요청에 따른 서버 및 네트워크의 부하가 늘어난다
- 실시간 야구 문자 중계같이 5~10초 주기로 계속 업데이트를 시키는 방식
단점 : time interval을 어떻게 잡냐에 따라 서버의 부하가 올라가거나 실시간성이 떨어지는 trade off 관계를 갖는다
사용 : 실시간성이 조금 떨어져도 되고 시간을 늘려 여러대의 클라이언트와 통신을 할 때 사용
- 페북의 친구 리스트의 온라인 상태 확인 (1분주기)
long polling 롱 폴링
- polling의 서버 부하를 줄이면서 실시간성을 높이기 위한 방식
- HTTP 요청 시 서버는 해당 연결을 바로 해제하지 않고 일정시간 대기시킨다. 대기 시간 중 데이터가 업데이트(변경)가 일어났으면 바로 클라이언트에게 응답을 보내고 전달 받은 데이터를 처리한다. 응답을 받은 클라이언트는 바로 서버에 다시 요청을 보낸다
- 브라우저의 요청이 있어도 요청한 서버의 데이터 변경이 없으면 보내지 않는 것
- 응답이 와서 연결이 끊기면 클라이언트가 서버에 다시 요청한다
단점 : 여러 클라이언트와 잦은 데이터 변경이 일어나면 서버의 부담이 크다
수백~수천대의 Client와 연결된 채팅 Server에서 한명이 채팅을 쓰면 데이터가 변경되어 Server는 변경된 데이터를 연결된 모든 Client에게 동시에 Response를 보내고, 다시 모든 Client에게 Request를 받으므로 순간적으로 Queue가 쌓여서 Server에 부담을 줄 수 있다
즉 서버의 부하도 줄이고, 실시간성도 높여주지만 대규모 클라이언트와 연결되있고 데이터가 자주 변경되는 경우에서는 오히려 서버에 부담감을 줄수 있다
사용 : 실시간성이 필요한 적은 수의 클라이언트와 연결되있는 경우에 사용
- 웹 1:1 채팅
- 10명 이하의 상대와 채팅하는 경우
Streaming 스트리밍
- long polling의 연결구축에 대한 부하를 해결하는 방식이다
- 요청에 대한 응답을 완료하지 않은 상태에서 데이터를 계속 내려받는 방식이다
- → 따라서 응답을 받더라도 연결을 끊고 다시 request요청을 보내는 과정이 없고 계속 응답을 받아 처리한다
- 서버는 무한정 혹은 일정 시간동안 요청을 대기시키고, chunked 메시지를 이용해서 응답 시 연결을 계속 유지한다
단점 : 클라이언트에서 서버로 데이터를 보내는게 힘들다
→ 따라서 실시간 양방향 통신이 아니라 실시간 단방향 통신이 주로 이뤄진다
결론
WebSockets 작동원리
브라우저가 서버로 WebSocket request를 보내면, 서버가 받거나 거절한다. handshake가 성립되면 연결이 된다. http의 경우 stateless여서 상태를 저장할 수 없어 backend는 response만 브라우저는 request만 사용 가능합니다. webSocket에서는 한번 연결이 성립되면, 양방향의 연결이 생겨 원하는 만큼 메세지를 주고 받고 할 수 있다.
'기술 면접 정리 > 네트워크' 카테고리의 다른 글
네트워크 토폴로지 (0) | 2022.05.11 |
---|---|
리피터와 허브 (0) | 2022.05.10 |
물리 계층의 역할 (0) | 2022.05.09 |
OSI 모델, TCP/IP 모델 (0) | 2022.05.08 |
유니 캐스트/멀티 캐스트/브로드 캐스트 (0) | 2022.05.08 |