소켓(Socket)과 HTTP

Lee Jinwook·2022년 12월 18일
1

네트워크

목록 보기
1/1

1. 소켓(Socket)이란?

  • 소켓은 운영체제에서 제공하는 네트워크 프로그래밍 인터페이스입니다. 따라서 응용 프로그램은 네트워크 통신을 위해 소켓을 사용해도 되고, 안 해도 됩니다. 하지만 소켓을 사용할 경우, 개발자는 TCP, UDP 같은 프로토콜 제어가 가능합니다. 또한 소켓 프로그래밍은 소켓을 사용해 TCP/IP, Bluetooth, IrDA와 같은 통신 프로토콜을 이용해서, SW를 개발하는 것을 의미합니다.

2. HTTP와 Socket

2-1) HTTP

  • HTTP는 웹 개발(웹 기반 응용 프로그램)에서 주로 사용되는 네트워크 통신 프로토콜입니다. HTTP의 주된 특징은 Stateless입니다. 즉, 응용 레이어에 속한 프론트엔드, 백엔드 프로그램은 HTTP으로 통신을 하고, 한 번의 상호간의 통신이 진행 됐더라도 상대방에 대한 정보를 다음 통신에 활용하지 않습니다. 또한 HTTP 통신은 한 번 이상의 클라이언트로 부터 요청이 선행되어야 통신이 가능한 구조입니다. HTTP는 TCP, SCTP와 같은 안정적인 연결 지향 프로토콜 위에서 실행될 수 있습니다. 클라이언트가 서버에 HTTP 요청을 보내면 클라이언트와 서버 사이에 TCP 연결이 열리고 응답을 받은 후 TCP 연결이 종료됩니다. 각 HTTP 요청은 서버에 대한 별도의 TCP 연결을 엽니다. 클라이언트가 서버에 10개의 요청을 보내면 10개의 개별 TCP 연결이 열립니다.

2-2) Socket

  • 소켓은 TCP/IP기반으로 동작하지만 브라우저, HTTP 등에 제한되지 않습니다. 운영체제 상에서 다양한 형태로 통신을 구현할 수 있습니다. 따라서 동영상 스트리밍, 게임 서비스 등 클라이언트와 서버간 실시간 통신이 필요한 서비스에서 주로 사용됩니다.

2-3) Stateful vs Stateless

  • 흔히 Socket은 Stateful하고 HTTP는 Stateless하다고 합니다. 그런데 Socket, HTTP 대부분 TCP 기반에서 작동하는데 그렇다면 TCP는 HTTP 요청일 때 연결마다 맺고 끊음을 반복하고 Socket 요청일 때는 연결을 유지하는 것일까요? 정답은 아니다 입니다. HTTP는 응용 레이어이고 전송 레이어인 TCP와는 독립적이기 때문에 서로 영향을 주고 받지 않습니다. 따라서 HTTP는 응용 레이어에 속하고 단지 요청과 응답을 전송 레이어에 보내는 역할만 하기 때문에 Stateless하다고 하는 것입니다. Socket은 원래 OS에서 제공하는 네트워크 인터페이스이기 때문에 통신 자체를 수행하지 않고, Socket 통신이라 함은 OS에서 제공하는 Socket 데이터 및 API를 사용해서 클라이언트와 서버의 연결이 지속적으로 이어지도록 하는 통신 행위를 의미합니다.

3. WebSocket은 무엇일까?

  • WebSocket은 응용 레이어에서 HTTP를 사용하지 않고 Socket을 직접 핸들링하여 브라우저상에서 웹 서버와의 양방향 통신을 위한 프로토콜입니다. html5 이상 버전에서 호환되며, ws://, wss://로 시작하는 양방향 상태 저장 프로토콜입니다. 한 번 연결을 맺게 되면 클라이언트와 서버 간의 연결을 시작할 때마다 클라이언트-서버는 핸드셰이크를 만들고 새로운 연결과 이 연결을 만들기로 결정합니다. 연결이 설정되고 활성 상태이면 종료될 때까지 동일한 연결 채널을 사용하여 통신이 수행됩니다.

0개의 댓글