Socket, WebSocket
소켓(socket)이란?
TCP/IP 프로토콜을 이용하여 네트워크를 통해 데이터를 주고받을 수 있도록 호스트 사이의 네트워크 연결부를 만든다.
요청하는 호스트는 클라이언트 소켓,
요청받는 호스트는 서버 소켓이라고 한다.
클라이언트 소켓
데이터 요청을 위해 클라이언트는 클라이언트 소켓을 생성하여 서버에게 요청한다. 요청하는 소켓이다.
1. socket() 함수를 통해 소켓을 연다.
2. connect() 함수를 통해 서버 소켓에게 연결하는데 통신할 서버 IP, Port가 필요하다. 서버 IP, Port 와 connect() 함수를 통해 서버 소켓에게 통신을 시도한다.
3. 클라이언트가 서버에게 통신을 시도했을 때 서버는 accept() 함수를 통해 클라이언트의 socket descriptor를 반환
4. 이를 통해 클라이언트와 서버가 read(), write() 함수를 반복하며 통신을 한다.
서버 소켓
클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다.
1. socket() 함수를 이용하여 소켓을 생성한다.
2. bind() 함수로 ip, port 번호를 설정한다.
3. listen() 함수를 통해 클라이언트 접근 요청에 대한 수신 대기열을 만들어 몇개의 클라이언트를 대기 시킬지 결정한다.
4. accept() 함수를 사용하여 클라이언트와 연결을 기다린다.
여기서 클라이언트 또는 서버가 연결을 중단하기 위해선 close() 함수를 이용한다.
소켓 종류
스트림(TCP)
- 양방향으로 바이트 스트림을 전송, 연결 지향성이다.
- 오류수정, 흐름제어 보장
- 소량의 데이터보다 대량의 데이터 전송에 적합
데이터그램(UDP)
- 비연결형 소켓
- 데이터의 크기에 제한이 있다.
- 데이터 손실 가능성이 있으나 오류가 발생하지 않는다.
- 실시간 정보를 처리하기 위해 주로 사용한다.
웹소켓(WebSocket)이란?
웹소켓이란 HTTP 프로토콜을 사용하여 클라이언트와 서버를 연결하고 실시간으로 통신이 가능하도록 한다.
HTTP 통신은 클라이언트(브라우저)의 요청에 의해 서버가 응답을 해주는 방식이지만
웹소켓 통신 방식은 별도의 요청이 없어도 데이터를 수신할 수 있다.
HTTP 통신은 서버쪽 데이터가 업데이트 되더라도 클라이언트쪽에서 별도의 요청 및 refresh 를 하지 않는 이상
변경된 데이터가 업데이트 되지 않는다.
일반적으로 웹 어플리케이션에서는 실시간성으로 임시방편인 Polling, Long Polling 방식으로
실시간성을 유지해왔다. 하지만 실시간 업데이트가 중요한 시스템인 경우 Web Socket 이
아주 중요한 기술로 사용되고 있다.