-
양방향통신에대해 알아보자카테고리 없음 2024. 1. 25. 17:32
개요
양방향통신을 구현해 보고자 구글링을 하던 중 공부하게 된 개념들을 정리해 보았다.
HTTP로는 양방향 통신을 구현할 수 없는 걸까?
결론부터 말하자면 http는 절대 절대 절대 양방향이 되지 않는다. 그 이유를 알아보자.
http는 클라이언트에서 req를 보내면 서버에서 res를 보내는 단방향만 가능하다. 이건 불변의 진리이다.
애당초 http는 서버에서 클라이언트로 req를 보내는 것조차 불가능하다는 것이다. 무조건 클라이언트에서만 서버로 req를 보낼 수 있고
서버는 클라이언트의 요청을 응답하는 것만 가능하다.
하지만 http로 마치 통신하는 것처럼 느끼게 만드는 방법을 고안해 냈다.
polling - 서버에 주기적으로 요청을 보내는 방법이다.
일정 시간 간격으로 계속 계속 물어보는 방법이다.
http polling의 특징
1. 주기적으로 물어보므로 응답 간격을 일정하게 할 수 있다.
2. 주기적으로 몰아서 물어보기 때문에 배치프로세싱되어서 db를 튜닝하는 효과가 나온다.
3. 실시간으로 주는 건 불가능하다. 실시간 효과를 내려면 간격을 줄여야 하지만 서버와 클라이언트 모두 부담이 간다.
4. 보낼 데이터가 없는데도 클라의 요청에 계속 응답해야 하므로 리소스 낭비가 일어난다.
http는 단발성 통신이기 때문에 header가 매우 무거운 프로토콜 중 하나이다.
응답 간격을 높이면 실시간성이 떨어지고 그렇다고 간격을 좁히면 클라와 서버에 부담이 간다.
그래서 새로운 기법을 고안하게 되었다.
long polling - 집착녀, 집착남
polling과 다른 점이 있다면 polling은 주기적으로 물어본다면, long polling은 일단 보내고 time out 될 때까지 무한정으로 기다린다.
서버가 만약 클라이언트와 연결을 끊으면 클라이언트는 바로 다시 연결해 버린다. 반면 서버가 데이터를 보내주면 클라이언트는 받자마자 바로 다시 서버에 세 요청을 한다. 사실상 실시간이라 해도 될 정도이다..
http long polling의 특징
1. 항상 연결이 유지되어 있다.
2. 변경에 매우 민감하게 반응한다. 사실상 실시간으로 통신이 가능하다.
3. 데이터가 주어지는 즉시 바로 반응하고 보내므로 요청간격이 줄어든다면 polling보다 훨씬 데이터를
많이 보내게 된다.
long polling은 실시간으로 데이터를 핸들링할 수 있다는 polling에 없는 장점을 얻게 된다.
하지만 데이터 이동이 활발하다면 오히려 polling보다 훨씬 더 많은 데이터 이동이 일어나서 리소스 낭비 더 크다.
양방향 통신은 어떻게 하는 걸까?
그럼 양방향 통신을 위한 통신방법은 어떤 게 있을까
웹 소켓(Web Socket)
웹 소켓이란 두 프로그램 간의 메시지 교환을 위한 통신 방법 중 하나이다. Transport protocol의 일종으로 서버와 클라이언트 간의
효율적인 양방향 통신을 실현하기 위한 구조이다. 웹 소켓을 이용하면 하나의 HTTP접속으로 양방향 메시지를 자유롭게 주고받을 수 있습니다.
Socket.IO란
Socket.IO는 웹 소켓 연결을 통해 클라이언트와 서버 간에 실시간 양방향 통신을 가능하게 하는
JavaScript 라이브러리이다. Socket.IO는 클라이언트와 서버 간의 실시간 통신을 위한 사용하기 쉬운 인터페이스를 제공한다.
마치며
구현전 기본 개념들을 정리해보았다. 이 글을 적으면서 지금까지 내가 이해했던 내용을 간추리자면
http는 절대 양방향 통신이 되지 않는다. 하지만 흉내는 낼 수 있다. 웹소켓을 사용하면 위에서 말한 polling, long polling보다 더 좋은
효율을 낼 수 있고 socket.io는 웹소켓을 더 쉽게 사용하기 위해 만들어진 js기반의 라이브러리이다. 이 글이 나처럼 개념공부를 하시는 분들에게 도움이 되었으면 좋겠다.