지금까지 공부한 웹 통신은 단방향 통신을 대표하는 HTTP통신과, 양방향 통신을 대표하는 웹소켓을 이용한 통신이 있습니다.
HTTP 통신
HTTP는 HyperText Transfer Protocol의 약자로 HTML파일을 전송하는 프로토콜이라는 의미를 가집니다.
이때 이 통신 과정은 간단하게 클라이언트가 서버로 요청을 보내면, 서버는 그에대한 응답을 클라이언트에게 보내는 과정을 통해 이루어 집니다.
문자를 보내는 장면을 떠올리면 편할텐데, 다시말해 통신은 요청과 응답을 보낼때에만 연결되고, 그마저도 먼저 요청을 하지 않으면 응답또한 없다는 것입니다.
Asynchronous Javascript And XML의 약자로 Java Script에서의 비동기적 HTTP 통신을 의미하는 단어입니다.
여기서 비동기 방식의 통신이란, 통신 과정에서 응답을 기다리지 않고, 다른 것들을 먼저 처리하다가 응답이 오면 그 때 응답을 처리한다는 것을 의미합니다.
이 Ajax를 활용할 수 있는 방법에는 다음이 있습니다.
줄여서 XHR이라고도 불리우는 방법으로 초기에 주로 사용했던 방법으로 지금은 잘 사용하지 않는듯 합니다.
jquery를 통해 구현되어있는 방법으로, jquery만 안다면 쉽게 구현이 가능하다는 장점이 있습니다.
ES6부터 javascript에 내장되어 있는 라이브러리입니다.
Node.js와 브라우저의 통신을 위한 라이브러리 입니다.
주로 react에서 사용된다고 합니다.
비교
ajax
vsfetch
vsaxios
ajax
- 장점
- jquery를 사용하여 코드를 작성할 경우 호환성에 대해 보장 가능
- 단점
- jquery를 사용해야함
fetch
장점
- 내장 라이브러리이기 때문에 따로 설치할 필요 없고 안정적이다.
- 리턴 객체가 Promise객체로 다양하게 활용 가능
단점
- 지원하지 않는 브라우저가 있음(인터넷 익스플로러)
- 요청에 대한 타임아웃을 지원하지 않음
Axios
장점
- 요청에 대한 타임아웃을 지원함
- 브라우저 호환성이 뛰어남
- 리턴 객체가 Promise객체로 다양하게 활용 가능
단점
- 설치가 필요하다
자바 라이브러리
HTTP는 요청을 보내는 Client와 요청에 대한 응답을 보내는 Server의 역할이 나누어져 있다는 단점이 존재했습니다.
즉, 요청이 없으면 응답을 할수 없고, 이것은 실시간 통신이 불가능 하다는 것입니다.
이를 해결하기 위해 HTML5부터 등장한 것이 바로 웹 소켓이라는 방법입니다.
(웹 소켓은 HTTP와 같이 OSI 7계층에 위치한 프로토콜이고, 4계층의 TCP에 의존합니다.)
HTTP와는 달리 전화를 하는 장면을 떠올리시면 이해하기 쉬울 것 같습니다.
양방향 통신을 위한 프로토콜
양방향 통신을 하기위해 websocket기술을 활용하는 라이브러리
(JavaScript와 JQuery의 관계와 비슷)
비교
WebSocket
vssocket.io
WebSocket
- 장점
- 빠르고 비용이 적어 많은양의 데이터들을 전송할 수 있음
- 80, 433의 기존에 사용하던 포트로 접속하기 때문에 방화벽을 추가적으로 열 필요가 없다.
- 단점
- 데이터를 전송할 때 연결된 클라이언트의 목록이 필요하고, 하나씩 직접 보냄
- HTML5의 기술로 브라우저 호환성이 좋지 않음
socket.io
- 장점
- websocket보다 다양한 편의성을 제공함
- websocket과 달리 서버에 연결된 소켓들에 데이터를 전송할때 broadcast를할 수 있음
- Node.js기반의 기술로, 호환성이 좋음
- 연결이 끊어지면 지속적으로 연결 요청
자세한 내용은 https://tech.kakaoenterprise.com/121 를 참고하면 좋을 것 같습니다.
간단하게 말하면 webrtc는 웹에서 사용할 수 있는 유일한 p2p기술로 서버를 거치지 않고 클라이언트끼리 연결하는 기술입니다.
(UDP기반의 RTP프로토콜 사용)
장점
1:1 방식
카카오톡 보이스톡, Azar등 과 같이 1:1로 연결되는 방식을 의미합니다.
- 국가 공인 전화번호가 필요하지 않음텍스트
- 품질이 전화보다 떨어지지 않음
1:N 방식
개인방송과 같은 것을 의미합니다.
- webrtc를 활용하면 기존의 방송 방식보다 낮은 지연시간을 필요로 하게 됨.
N:N 방식
줌이나 디스코드, 클럽하우스와 같은 화상회의 서비스를 의미합니다단점
- 전문가가 부족하고 기술 자체도 어려워 관련 문서가 많이 부족함
- 네트워크 기술에 대한 이해가 부족하면 품질이 안좋아짐
- 브라우저 호환성이 낮다(Internet Explorer 사용불가)
각 방법당 클라이언트와 서버의 통신에서 호환이 필요하므로 찾아봐야함.
서버가 socket.io로 통신을 할 때, 클라이언트도 socket.io로 통신해야 함.
한 서버에 여러 클라이언트가 접속한다고 할 때, 반드시 필요한 과정.
예를들어 한 클라이언트가 서버의 메모리를 변경할 때 다른 클라이언트도 같은 메모리를 사용할 가능성이 있음.