웹이나 앱에서 필요로 하는 데이터들은 서버에서 받아온다.
네트워크를 통해 서버로부터 데이터를 가져오기 위한 통신으로는 HTTP통신과 Socket 통신 크게 두가지로 분류한다.
HTTP 통신과 Socket 통신은 어떤 차이점이 있을까?
'하이퍼 텍스트'란 연결 고리를 통해 다른 문서로 접근할 수 있는 텍스트를 말한다.
(HTML의<a>
태그를 떠올리면 이해하기 쉽다.)
하이퍼 텍스트를 보기 좋고, 누구나 동일한 방법으로 표현하기 위해
HTML(인터넷 기반의 하이퍼 텍스트 작성을 위한 방법)이 탄생하였다.
HTTP 통신은 클라이언트에서 서버로 요청을 보내고 서버가 응답하는 방식으로 통신이 이루어진다.
응답에는 클라이언트의 요청에 따른 결과를 반환하며, 이로 인해 다음과 같은 특성을 가진다.
HTTP 통신 = 클라이언트의 요청이 있을 때만 서버가 응답하는 방식. 단방향 통신
서버의 응답에는 응답코드가 같이 전송되며, 사용자는 응답코드와 메시지 응답으로부터 오는 메세지 바디를 통해 요청 값을 전달 받는다.
초기의 HTTP 통신에서는 서버가 응답한 후 클라이언트(사용자)의 Connection을 곧바로 끊어버렸으나, 최근에는 성능상의 이유(Connection을 맺고 끊는 비용이 비싸다)로 Keep Alive 옵션을 통해 일정기간 동안 클라이언트와 Connection을 유지하는 방식으로 통신이 가능해졌다.
두 프로그램이 서로 데이터를 주고 받을 수 있도록 양쪽(두 프로그램 모두)에 생성되는 통신 단자이다.
소켓 통신이란 서버와 클라이언트 양방향 연결이 이루어지는 통신으로, 클라이언트도 서버로 요청을 보낼 수 있고 서버도 클라이언트로 요청을 보낼 수 있는 통신으로 다음과 같은 특성을 가진다.
소켓 통신 = 클라이언트와 서버 양쪽에서 서로에게 데이터 전달을 하는 방식. 양방향 통신
보통 실시간 채팅, 동영상 스트리밍, 온라인 게임 등 실시간으로 데이터를 주고 받아야 하는 경우 Connection을 자주 맺고 끊는 HTTP 통신보다 소켓 통신이 적합하다.
하지만 소켓 통신은 계속해서 Connection을 들고 있기 때문에 HTTP 통신에 비해 많은 리소스가 소모되는 단점이 있다.
개념을 조금 더 깊이 들어가보면 HTTP는 결국 소켓 통신이다.
소켓은 IP와 Port number을 사용해 만들어진 통신의 양 끝단을 의미하는데,
IP와 Port number를 활용하는 TCP 레이어 위에 올라간 HTTP 또한 같은 방식을 사용한다.
즉, HTTP 통신은 소켓 통신을 활용한 통신 방식의 일종이다.
하지만 HTTP 통신과 Socket 통신을 구분하는 이유는 한쪽에서만 요청에 대한 응답을 하는 웹 통신의 특성상 HTTP가 하나의 중요한 프로토콜로 구분되었기 때문이다.
http://
로 시작되는 프로토콜은 내부 구현에서는 소켓을 사용하지만 별도 프로토콜로 구분한 이유가 이 때문이다.
결과적으로 HTTP 통신은 소켓통신의 일종이지만, 소켓통신이 HTTP 통신은 아니라고 말할 수 있다.
🌍참고링크
[네트워크 프로그래밍] Http 프로그래밍과 Socket 프로그래밍 차이
HTTP 통신과 Socket 통신의 차이점