HTTP 통신
•
HTTP는 요청(request)과 응답(response)로 구성되며, 클라이언트의 요청 시에만 서버가 응답한다.
•
클라이언트가 요청을 보내면 서버는 요청을 처리하고 응답을 반환하는데, KeepAlive와 같이 일정 시간 연결을 유지할 수 있는 방법이있지만 일반적으로 응답 이후 클라이언트 서버 간의 통신이 끊어진다.
•
웹 페이지, 이미지, 동영상 등 리소스를 요청하고 받는데 사용되며, 실시간 데이터 전달이 아닌 필요한 경우에 요청을 보낼 때 유리하다.
소켓 통신
•
TCP/IP 프로토콜을 기반으로하며, 클라이언트와 서버가 IP와 port 번호를 통해 데이터를 주고 받는다.
•
연결 지향적 통신 방식으로, 클라이언트와 서버의 지속적인 양방향 통신을 제공한다. 연결이 설정된 상태에서 여러 개의 요청과 응답을 주고 받을 수 있다.
•
동영상 스트리밍이나 온라인 게임 등에 사용되며, 실시간으로 데이터를 주고받는 경우에 더 유리하다.
HTTP vs 소켓 통신
•
소켓은 클라이언트와 서버 간의 연결을 지속적으로 유지하기 때문에, 서버 리소스에 더 많은 부하를 줄 수 있다. 반면 HTTP의 경우에는 요청과 응답을 처리하는 동안에만 연결을 유지하기 때문에 일반적으로 소켓에 비해 더 적은 리소스를 차지한다.
•
소켓 통신은 네트워크 계층에서 직접 데이터를 주고 받기 때문에 HTTP보다 더 낮은 수준의 프로코톨을 사용한다. 반면 HTTP는 어플리케이션 계층 프로토콜로, 요청과 응답을 구성하는 헤더와 메타데이터 등의 오버헤드가 있다.
•
소켓 통신의 경우 클라이언트와 서버 간의 통신이 직접적이기 때문에 세션 및 상태관리, 상태 유지를 어플리케이션 수준에서 개발자가 직접 처리해야한다. 반면 HTTP는 쿠키, 세션 등 상태 관리를 쉽게 처리할 수 있는 기능을 제공한다.
•
HTTP와 소켓 통신 모두 추가적인 보안 기능을 구현할 수 있지만, 일반적으로 소켓 통신을 사용할 때 더 유연하고 많은 기능을 제공할 수 있다. 그 이유로 소켓 통신은 SSL/TLS를 적용하여 암호화하거나 상호 인증 기능을 제공할 수 있고, 요청 및 응답에 대해 필터링이나 권한 부여같은 어플리케이션 수준에서 직접적으로 접근 제어 기능을 구현할 수 있기 때문이다.