본문 바로가기

TIL

[TIL] Socket에 대한 간단 설명

HTTP vs Socket

HTTP

HTTP란 Hyper Text Transfer Protocol의 약자로 HTML 파일을 전송하는 프로토콜이라는 의미를 가집니다. 웹브라우저에서 통신이 일어나며, 초기에는 HTML 파일 정송을 목적으로 만들어졌으나 현재는 JSON, Image, 짧은 Video 등의 다양한 파일 형식을 지원합니다.

HTTP 특성

HTTP 특성에는 가장 크게 비연결성무상태성이라는 두가지 특성을 지닙니다.

각각에 대해 간략히 나열해 보겠습니다.

비연결성(Connectionless)

비연결성이란 클라이언트와 서버가 한 번 연결을 맺은 후, 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질을 말합니다.

비연결성의 장점

HTTP 프로토콜이 이러한 특성을 지니게 된 이유는 HTTP는 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되었기 때문입니다.

예를 한번 들어보겠습니다. 만약 서버에서 다수의 클라이언트와 연결을 계속 유지해야 한다면, 이에 따른 많으 리소스가 발생하게 됩니다.

따라서 연결을 유지하기 위한 리소스를 줄이면 더 많은 연결을 할 수 있으므로 비연결적인 특성을 갖게 된 것입니다.

비연결성의 단점

반대로 단점도 존재합니다.

서버에서는 클라이언트를 기억하고 있지 않으므로 동일한 클라이언트의 모든 요청에 대해, 매번 새로운 연결을 시도/해제의 과정을 거처야하므로 연결/해제에 대한 오버헤드가 발생한다는 단점도 있습니다.

 

무상태성(Stateless)

HTTP의 비연결성(Connectionless)로 인해 서버가 클라이언트를 식별할 수 없는 상태를 일컫어 보통 무상태성(Stateless)라고 합니다.

다시 말해, 서버가 클라이언트의 상태를 보존하지 않는다는 말을 의미합니다.

무상태성의 장점

무상태성의  장점은 서버 확장성이 높다는 것입니다. 이 말은 무한한 서버 증설이 가능하다는 의미인데, 이를 스케일 아웃(Scale-Out)이라고 합니다.

무상태성의 단점

하지만 이렇게 클라이언트의 정보가 서버에 저장되어 있지 않아 발생하는 한계점도 존재합니다.

예를 들어, 로그인이 필요한 서비스와 같이 유저의 상태를 유지해야 할 경우, 클라이언트에서 유저의 정보를 가지고 있다가(쿠기, 세션 등) 서버에 전송해야할 경우가 발생할 수도 있습니다.

요즘 거의 모든 서비스가 로그인 기능을 기반으로 만들어지므로 이는 HTTP의 분명의 단점으로 작용하는 것 같습니다.

 

 

Socket

소켓(Socket)이란 두 프로그램이 서로 데이터를 주고 받을 수 있도록 양쪽(두 프로그램 모두)에 생성되는 통신 단자를 말합니다.

Socket 특성

소켓의 특성은 클라이언트에서만 요청을 낼 수 있는 HTTP 프르토콜과 달리 서버에서 요청을 보낼 수 있으며, 더불어 실시간성이라는 특성을 가지고 있습니다.

Socket의 장점

소켓은 비연결성(연결/해제 반복)의 특성을 지닌 HTTP 프로토콜과 달리 클라이언트와 서버가 한번 연결되고 나면 강제로 연결을 해제할 대까지는 지속적으로 연결을 유지한다는 특징이 있습니다. 이는 채팅, 주식 등과 같이 실시간성이 중요한 서비스에서 용이하게 작용할 수 있는 특징입니다.

Socket의 단점

연결 상태 유지가 자유로운만큼 HTTP에 비해 리소스를 많이 잡아 먹는다는 특징이 있습니다.

 

 

자 그럼 이제  소켓의 또 다른 형태인 웹 소켓(WebSocket)에 대해 간단히 설명해보겠습니다.

 

WebSocket

웹 소켓은 기본적으로 HTTP 프로토콜을 기반으로 동작하는 웹 서비스들이 HTTP의 비연결성이라는 특성으로 인해 실시간성 통신이 어렵다는 한계점을 극복하기 위해 탄생하였습니다.

 

Socket vs WebSocket

그렇다면 소켓과 웹소켓의 차이는 무엇일까요?

가장 크게 동작하는 계층다루는 데이터 형식에 있어 차이가 있을 것 같습니다.

 

일반적으로 다루는 소켓(socket)의 동작 계층은 OSI 7계층 기준으로 TCP, UDP가 속한 4계층에 위치하며, 웹 소켓(websocket)도 TCP에 의존적이긴 하지만 HTTP을 기반으로 7계층에 위치하고 있습니다.

 

또 다루는 데이터 형식에 있어 TCP에 기반한 소켓 통신은 단순히 바이트 스트림을 통한 데이터 전송이므로 바이트로 이루어진 데이터를 다루는 반면, 웹 소켓은 어플리케이션(Application) 계층인 7계층에 기반하기 때문에 메세지 형식의 데이터를 다루게 됩니다.

 

[참고] 용어 정리

여기서 메세지 형식의 데이터란 일반적으로 커뮤니케이션 시스템에서 사용되는 데이터 형식을 의미합니다.

이 형식의 데이터는 일반적으로 텍스트, 이미지, 오디오, 비디오 등의 다양한 유형의 컨텐츠가 포함됩니다.

참고 사이트

https://victorydntmd.tistory.com/286

https://velog.io/@pikadev1771/HTTP-pdptvkgo

https://kotlinworld.com/75

https://velog.io/@jinh2352/HTTP-vs-Socket-HTTP%EC%99%80-%EC%86%8C%EC%BC%93-%ED%86%B5%EC%8B%A0%EC%9D%98-%EC%9E%A5%EB%8B%A8%EC%A0%90

https://gusrb3164.github.io/web/2021/10/28/websocket-socket/