Socket 통신과 HTTP 통신의 차이점

DOHYEON AN·2023년 7월 13일
0

안녕하세요 여러분! 오늘은 네트워킹의 중심 개념인 'Socket 통신'과 'HTTP 통신'에 대해 이야기해보려 합니다. 이 두 가지 모두 데이터를 네트워크를 통해 전송하는 방법이지만, 동작 방식과 사용 사례에서 중요한 차이점이 있습니다. 이해를 돕기 위해 두 가지를 구분하는 핵심 요소를 아래에서 다루겠습니다.

Socket 통신이란?

Socket은 연결 지향형 네트워크 모델인 TCP/IP 네트워크에서 두 대의 컴퓨터간의 네트워크 연결을 활성화하는 엔드포인트입니다. 각각의 소켓은 고유한 주소를 가지며, 이는 IP 주소와 포트 번호의 조합으로 이루어져 있습니다. 이 두 정보를 통해 소켓은 데이터가 올바르게 도착하는 곳을 알 수 있습니다.

Socket 통신은 주로 실시간 시스템에서 사용되는데, 이는 양방향 통신이 가능하고 연결이 유지되는 동안에는 데이터를 지속적으로 전송할 수 있기 때문입니다. 즉, 클라이언트와 서버간에 연결이 활성화되고 난 후에는 양쪽 모두 데이터를 보내거나 받을 수 있습니다.

예를 들어, 채팅 앱을 생각해보세요. 실시간으로 메시지를 전송하고 받아야 하므로 Socket 통신이 이상적입니다. 한 유저가 메시지를 보내면, 서버는 해당 메시지를 받아 다른 유저의 소켓에 보냅니다.

HTTP 통신이란?

HTTP는 Hypertext Transfer Protocol의 약자로, 웹 브라우저와 웹 서버 간에 HTML 페이지나 이미지와 같은 웹 자원을 주고 받을 때 주로 사용하는 프로토콜입니다.

HTTP는 '요청-응답' 모델을 사용합니다. 클라이언트(보통 웹 브라우저)가 HTTP 요청을 서버에 보내면, 서버는 해당 요청에 따른 결과를 HTTP 응답으로 보냅니다. 이 응답은 웹 페이지의 HTML, CSS, JavaScript 코드, 이미지 등을 포함할 수 있습니다.

즉, 웹 페이지를 로드하거나 웹 서버에 데이터를 전송하는 등의 작업을 할 때는 HTTP 통신이 이루어집니다. HTTP는 또한 상태를 유지하지 않는(stateless) 프로토콜입니다. 즉, 각 요청과 응답은 독립적이며, 서버는 이전 요청에 대한 정보를 저장하지 않습니다.

Socket 통신과 HTTP 통신의 차이점 그리고 각자의 장점에 대해서

그렇다면 Socket 통신과 HTTP 통신의 차이점은 무엇일까요? 가장 주요한 차이점은 '연결의 유지'와 '데이터 전송 방식'에 있습니다.

  1. 연결의 유지: Socket 통신은 클라이언트와 서버 간에 지속적인 연결을 유지합니다. 이에 반해, HTTP 통신은 요청이 있을 때만 임시 연결이 형성되며, 응답이 전달되면 연결이 끊어집니다.
  2. 데이터 전송 방식: Socket 통신은 양방향 통신이 가능하여, 클라이언트와 서버 모두 언제든지 데이터를 보낼 수 있습니다. 반면에 HTTP는 단방향 통신으로, 클라이언트가 요청을 보내면 그에 대한 응답이 서버로부터 돌아옵니다.
  3. 상태 정보의 유지: HTTP는 stateless 프로토콜이므로 각 요청과 응답은 서로 독립적입니다. 서버는 클라이언트의 상태 정보를 유지하지 않습니다. 이에 반해, Socket 통신은 연결이 유지되는 한 상태 정보가 유지됩니다.

Socket 통신의 장점

  1. 실시간 통신: Socket 통신은 양방향 통신이 가능하므로, 데이터를 실시간으로 주고 받을 수 있습니다. 이는 채팅 앱, 게임, 실시간 데이타를 주고받는 IoT 기기 등에서 굉장히 유용합니다.
  2. 지속적인 연결: Socket 통신은 클라이언트와 서버간에 지속적인 연결을 유지합니다. 이로 인해 데이터를 주고받는 데 있어 속도가 빠르고, 높은 효율성을 가질 수 있습니다.
  3. 상태 정보 유지: Socket 통신은 연결이 유지되는 동안 클라이언트와 서버 사이의 상태 정보를 유지할 수 있습니다. 이는 예를 들어 게임 상태, 로그인 상태 등을 유지하거나 두 개체 간의 대화 흐름을 추적하는 데 유용합니다.

HTTP 통신의 장점

  1. 단순성과 확장성: HTTP는 웹의 기본 통신 프로토콜로서, 요청과 응답이라는 간단한 방식으로 동작합니다. 이로 인해 개발이 간단하고, 웹 서비스의 확장성이 뛰어납니다.
  2. 무상태성: HTTP는 무상태성(stateless)을 가집니다. 이는 서버가 클라이언트의 상태 정보를 저장하지 않아 각 요청이 독립적으로 처리됩니다. 이러한 특성은 서버의 메모리를 절약할 수 있으며, 서버가 다운되거나 새로운 서버가 추가되어도 클라이언트와의 통신에 문제가 없다는 것을 의미합니다.
  3. 캐싱 기능: HTTP는 캐싱 기능을 가지고 있습니다. 캐싱은 데이터나 자원을 재사용하는 것으로, 웹 성능 향상에 큰 역할을 합니다. 예를 들어, 웹 사이트를 방문할 때 로고 이미지나 자주 사용하는 스크립트 파일 등은 한 번 받아온 후 로컬에 저장해두었다가 재사용합니다. 이는 불필요한 데이터 전송을 줄여주고, 페이지 로딩 시간을 줄여줍니다.

결론

Socket 통신과 HTTP 통신은 각각 서로 다른 상황과 요구사항에 따라 최적화된 프로토콜입니다. 실시간 데이터 통신이 필요한 경우 Socket 통신을, 웹 페이지와 같은 자원을 요청하는 경우 HTTP 통신을 사용하게 됩니다. 이 두 가지 통신 방식을 이해하고 적절히 활용하면 네트워크 프로그래밍에 있어 더욱 다양한 문제 해결이 가능해집니다.

profile
데이터 엔지니어 안도현입니다 :)

0개의 댓글