프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

실시간 채팅 서비스를 만든다고 가정해 보자.

이런 서비스에서 HTTP를 기반으로 메시지를 주고받는다면 어떻게 될까?

 

 

HTTP(7계층)

HTTP의 경우 stateless 서비스이다. (연결성의 보장은 4계층인 TCP의 역할)

따라서 HTTP는 상대의 요청에 의한 Response만 가능하기 때문에 아래와 같이 클라이언트가 주기적으로 서버에 새로운 메시지의 여부를 물어보게 된다.

이러한 과정을 폴링이라고 한다.

 

 

이런 과정은 당연히 폴링의 주기에 따라 서버의 부하가 달라진다.

실시간 채팅이라면 연결과 해제가 수도 없이 발생하여 비효율적이다.

 

 

 

이런 문제를 해결하기 위해 롱 폴링 기법 사용된다.

 

롱 폴링은 연결 후 응답이 오거나 time out까지 연결을 유지할 수 있다.

하지만 채팅이 적다면 time out마다 재연결을 진행해 줘야 하는 비효율성이 존재한다.

또는 재연결시 로드 밸런싱 과정에서 기존 서버와 다른 서버로 접속될 수도 있다.

 

따라서 실시간 채팅의 경우, 연결이 항시 유지되는 웹소켓이 사용된다.

 

 

 

 

 

웹소켓(Web socket, 7계층) 

 

웹소켓도 HTTP처럼 TCP의 소켓을 사용해서 연결하는 7계층 프로토콜이다.

처음에는 HTTP의 핸드셰이크 과정을 동일하게 거쳐 80(or 443) 포트를 사용하고 이후에는 ws(web socket) 프로토콜로 통신한다.

웹소켓은 한쪽에서 중단하지 않는 이상 연결이 유지된다.

더군다나 양방향으로 전달까지 가능하므로 채팅 서비스를 위해서는 안성맞춤이다.

 

 

 

따라서 서버와 클라이언트 간의 실시간 통신이 중요하다면 웹소켓이 사용된다. (실시가 게임에도 사용)

하지만 항상 서버와 연결이 유지되므로 단순히 웹페이지 로드와 API 응답이 필요할 때 사용한다면 비효율적이다.

 

그러므로 웹 서비스는 기본적으로 HTTP를 사용하게 구현되지만 일부 기능이 web socket으로 서비스되는 것이다.

 

 

 

 

 

참조

가상 면접 사례로 배우는 대규모 시스템 설계 기초(알렉스 쉬 저)

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함