HTTP 프로토콜의 동작 방식
일반적으로 google.com에 접속할 때마다 요청이 백엔드 서버로 이동하고, 해당 요청은 HTTP나 HTTPS 형식으로 들어간다. 요청이 전송되면 클라이언트와 서버 간에 TCP 연결이 생성되고, 응답이 수신되면 이 연결은 닫히게 된다.
웹 사이트가 각기 다른 5개의 정보를 검색하기 위해 웹 서버에 5개의 요청을 보낸다고 가정해보자. 요청이 서버에 도달할 때마다 별도의 별도의 연결을 생성할 것이다. 응답이 수신되면 서버에서는 데이터를 요청하는 작업을 수행할 것이다. 해당 방식이라면 만약 웹 서버에 대한 수백 개의 요청은 수백 개의 새로운 연결과 수백 개의 정보를 검색할 것이다. 즉, 웹 사이트를 방문할 때마다(요청이 있을 때마다) 매번 새로운 커넥션을 만드는 것이다.
WebSocket이란
웹 소켓은 HTTP와 달리 'ws://주소'를 사용한다. 양방향 통신이므로 발신자와 수신자는 모두 데이터를 보낼 수 있다. 클라이언트가 서버와 연결을 설정할 때 처음으로 생성되는 연결은 클라이언트나 서버가 닫는 순간까지 유지된다.
클라이언트(웹 브라우저)와 서버가 있다고 가정해보자. 연결을 시작할 때 handshake가 이루어지고 커넥션이 열린다. 연결이 열리면 양방향 메시지 처리 측면에서 통신이 발생한다. 클라이언트가 필요한 정보를 충분히 받고 연결을 닫기로 결정하면 연결이 종료된다.
WebSocket의 쓰임
웹 소켓은 대표적으로 새로고침없이 UI를 업데이트시켜야 하는 실시간 앱에서 활용할 수 있다. Ajax를 생각할 수 있지만, Ajax는 내부적으로 HTTP를 사용하고 있으므로 통신이 필요할 때마다 새로운 연결을 만든다. 이외에도 게임 앱이나, 채팅 앱 등에서 사용한다.
WebSocket을 지양해야 하는 경우
첫 번째로, 실시간 업데이트가 필요하지 않을 때이다. 한 번의 데이터 요청으로 충분한 경우, 굳이 WebSocket을 사용할 필요는 없다. HTTP는 응답 후 연결이 끊어지지만 WebSocket은 응답 후에도 연결이 지속되고 있기 때문이다. 두 번째로, Restful 서비스로 데이터를 가져오는 것이 충분할 때이다.
'DevOps' 카테고리의 다른 글
아파치 카프카 개발 (0) | 2022.01.25 |
---|---|
아파치 카프카(Apache Kafka) 기초 (0) | 2022.01.19 |
모놀리식 vs 마이크로서비스 아키텍처 (0) | 2021.11.21 |
CSR / SSR (+ SPA / MPA) (0) | 2021.11.08 |
마이크로서비스 아키텍처(MSA) 개념 및 이해 (0) | 2021.11.04 |
댓글