서버와 클라이언트의 통신은 모두 HTTP 프로토콜만 이용하여 구현되는 것은 아니다. 실시간 채팅, 게임, 주식 차트 등의 실시간 통신이 필요한 서비스를 구현하려면 HTTP 프로토콜이 아닌 WebSocket 프로토콜을 이용하는 것이 좋다.
🧐 HTTP 프로토콜이 무엇이며 HTTP의 한계는?
그 전에 프로토콜이란?
프로토콜은 영어로는 "사전에 정해 놓은 순서" 를 의미한다. 컴퓨터가 서로 소통하기 위해 정한 규악을 가리킨다. 예를들어서 영어나 한국어 같은 언어도 사람끼리의 통신을 위한 프로토콜이라 생각할 수 있다.
서로의 언어(프로토콜) 가 일치하는 경우 소통의 문제가 없겠지만, 일치하지 않는 경우 소통(통신) 이 불가능하다.
또한, 통신 시에 이용하는 매체도 프로토콜이라 볼 수 있다. 대화를 할 때 음성을 사용하는 경우가 많은데, 이것은 음성이라는 통신 프로토콜 위에 한국어라는 통신 프로토콜을 올려놓은 것이다. 의미를 전달하는 부분인 언어 프로토콜이 일치한다고 하더라고 그것을 전달하는 프로토콜이 다르면 통신은 불가능하다. 예를 들어서 나는 음성으로 안녕하세요 라고 소통하는데 상대방은 내가 알 수 없는 수신호로 안녕하세요 라고 전달하면 상대방은 수신호로 안녕하세요 라는 의미로 보냈을지언정 나는 전혀 의미를 알 수 없다.
HTTP 프로토콜이란?
Hypertext Transfer Protocol 의 축약어이고 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다. 웹소켓과는 다르게 단방향 통신만 가능하다. 따라서 클라이언트에서 서버로의 요청은 가능하지만, 서버에서 클라이언트로는 요청을 보낼 수가 없다.
애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.
네트워크 전송 시 데이터 표준을 정리한 것이 OSI 7계층, 이 이론을 실제 사용하는 인터넷 표준이 TCP/IP 4계층이다.
그 중 HTTP는 L4 (Application Layer) 에 속하고, L4계층은 사용자와 가장 가까운 계층이다. 여기에 속하는 프로토콜로는 FTP, HTTP, SSH, Telnet, DNS, SMTP 같은 것들이 있다. 우리가 흔히 마주할 수 있었던 것들이다.
나중에 통신쪽도 한 번 날잡고 공부해야겠다. 공부해야 할 양이 상당하다..ㅎㅎ
HTTP 한계
HTTP는 요청한대로 응답을 보내주기만 하는 단순한 프로토콜이다. 단순 문서 전달에는 굉장히 효율적이었기 때문에 널리 사용될 수 있었다. 그러나 HTTP 프로토콜은 요청에 대해서만 응답을 보낼 수 있기에 계속 메시지를 받기만 하는 상황을 구현하기에는 힘들다. 또한, HTTP 프로토콜은 매 요청과 응답마다 연결을 생성하고 끊는 과정을 반복하는데 유사한 통신을 계속 반복해야 한다는 비효율성에 대한 문제가 있다.
이러한 HTTP 의 한계로 인해 웹소켓이 등장하게 되었다.
🚗 웹소켓 그래서 어디에 사용하고 개념이 뭔데?
웹소켓 탄생
HTTP 를 이용한 실시간 통신의 문제를 해결하기 위해 HTML5부터 웹소켓이 등장했다. 웹소켓은 실시간 양방향 통신 을 지원하기 때문에 한 번 연결이되면 그때부턴 클라이언트와 서버 모두 자유롭게 데이터를 주고 받을 수 있다. 지속적으로 업데이트되는 정보를 수신해야 하는 채팅이나 주식 보고서에서 연속적인 통신에 대해 유사한 통신을 계속해서 맺고 끊는 걸 반복하지 않게 하기 때문에 효율성을 높일 수 있다. 정보를 동시에 송수신 할 수 있기 때문에 정보 교환이 더 빨라진다.
(이 웹소켓을 이용한 주식 가격 알림 프로젝트를 이번에 진행해 볼 예정이다.)
웹소켓 프로토콜
아까 위에서 HTTP 는 L4(Application Layer) 계층의 통신 방법이었다. 하지만 웹소켓의 경우 TCP 계층에 속한다. TCP(Transmission Control Protol) 는 명칭 그대로 전송을 제어하는 프로토콜로, 신뢰도가 높은 데이터 전송을 가능케 한다. TCP 의 역할을 간단히 말하면, '애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 확실하게 전달하는 것' 이다.
HTTP 프로토콜을 이용할 때 'http' 를 이용하는 것처럼, 웹소켓을 이용할 때 'ws' 를 사용한다.
웹소켓 동작 방식
웹소켓은 연속적인 데이터 전송의 신뢰성을 보장하기 위해 Handshake 과정을 진행한다.
기존의 다른 TCP 기반의 프로토콜은 TCP Layer 에서 Handshake를 통해 연결을 수립하는 반면, 웹 소켓은 HTTP 요청을 기반으로 HandShake 과정을 거쳐 연결을 수립한다.
HandShake 과정을 통해 연결이 수립되면 HTTP 프로토콜이 웹소켓으로 업그레이드 된다. 이 이후에는 HTTP 는 사용되지 않고, 웹소켓 연결이 닫힐 때까지 웹 소켓 프로토콜을 사용하여 데이터를 주고 받는다.
웹소켓을 통해 주고받을 수 있는 데이터의 형태
메시지에 포함될 수 있는 교환 가능한 메시지는 텍스트와 바이너리이다.
👩💻 공부하게 된 이유
이번주부터 Kafka 를 활용하여 실시간 주식 가격을 websocket 을 이용해 전송받아 토스의 알림처럼 몇 % 이상 상승하거나 하락했을 때 카톡으로 알림을 보내주는 서비스를 미니 프로젝트로 진행해보고자 한다. 실시간 주식 가격은 한투 증권에서 Open API 로 받을 수 있기 때문에 계좌 개설하고 신청만 하면 받아볼 수 있다. 혼자서 진행하는 거지만 끝까지 초심을 잃지 않고 이 프로젝트를 끝내보고자 한다.
참고) https://www.joinc.co.kr/w/man/12/websocket#sid_2
'프로젝트 > kafka를 활용한 주식 알람' 카테고리의 다른 글
[Kafka] AWS EC2에 카프카 클러스터 설치하기 | LIM (1) | 2023.01.24 |
---|
댓글