HTTP 통신에 대해 공부하다가 문득 엘리스 코치님께서 하신 말씀이 떠올랐다.
스트리밍 서비스나 업비트 처럼 실시간으로 업데이트가 필요한 웹 서비스는 HTTP 통신이 아니라 Socket 통신을 이용한다고 하셨다.
생각해보니 주식 사이트같은 경우는 1초 단위로 주가가 업데이트 되는데, HTTP처럼 매번 서버에 요청을 보내고 받아오기에는 그 속도가 말이 안된다.
분명 어떤 방법이 있을 것인데, 그것이 바로 Socket 통신이었다.
그럼 HTTP 통신과 Socket 통신에는 어떤 차이가 있는가?
HTTP 통신
Hyper Text Transfer Protocol의 약어로 웹 통신 프로토콜이다. 대부분의 웹 사이트는 HTTP 통신을 한다. 클라이언트가 서버에게 요청을 보내면 서버는 들어온 요청에 따라 응답을 보낸다. 여기서 주목해야할 점은 클라이언트가 요청을 보낸다는 것이다. HTTP 통신은 클라이언트만 서버에 요청을 할 수 있다. 서버는 클라이언트에게 받은 요청에 따라 응답을 보낼뿐, 먼저 클라이언트에게 데이터를 보낼 수는 없다.
HTTP 통신은 클라이언트가 서버에게 요청을 시도할 때 클라이언트와 서버가 연결된다. 평소에는 연결을 유지하고 있지 않는다. 다만 요청을 보낼 때마다 새로운 연결을 시도하면 시간이 너무 지체되는 문제를 방지하고자 요즘에는 Keep Alive 라는 설정을 이용해 일정시간동안 연결을 유지한다. 하지만 보편적으로 HTTP는 클라이언트와 서버의 연결을 계속해서 유지하지 않는다.
주로 게시판을 사용하는 웹 서비스에서 이용된다. 서버는 유저가 웹 서비스를 이용하면서 게시판을 사용할 때만 요청을 처리하면 되는데 그 외의 시간에도 계속 연결을 유지하고 있는 것은 너무 자원의 낭비이기 때문이다.
Socket 통신
HTTP 통신과 다르게 Socket 통신은 클라이언트가 요청하지 않아도 서버에서 데이터를 보낼 수 있다. 그리고 클라이언트와 서버가 한 번 연결되고 나면 직접 끊기 전까지 연결이 유지된다. 따라서 클라이언트와 서버가 동시에 데이터를 주고 받을 수 있다. 그렇기에 Socket 통신을 하면 실시간으로 데이터가 업로드 될 수 있는 것이다. 별도의 요청이 없어도 계속해서 새로운 데이터를 클라이언트에게 넘겨줄 수 있기 때문이다.
위에서 말했듯 스트리밍 사이트나 주식 사이트에서 Socket 통신을 주로 사용한다.
지금까지 만들어 봤던 웹 서비스는 모두 HTTP 통신이었다. 그런데 Socket 통신을 이용하면 뭔가 다이나믹한 웹 서비스를 만들 수 있을 것 같다. 아래 주소에서 Socket 프로그래밍을 체험해 볼 수 있다. 엘리스 과정이 끝나고나면 언젠가 한 번쯤 체험해보면 좋겠다.
Socket.IO
SOCKET.IO 4.0 IS HERE ~/Projects/tweets/index.js const io = require('socket.io')(80); const cfg = require('./config.js
socket.io
'Etc' 카테고리의 다른 글
[DATABASE] Index 에 대해 알아보자 (0) | 2021.10.29 |
---|