본문 바로가기

프로그래밍/cs 지식

http 통신의 진화 과정과 웹 소켓, 폴링

 

HTTP (Hyper Text Transfer Protocol)

http은 html파일을 전송하는 프로토콜 이라는 뜻 이다. 웹 브라우저에서 일어나는 통신이고, 초기에는 html 파일을 전송하는 목적으로 만들어 졌다. 현재는 json, image 파일등 또한 전송 가능하다. 

사진과 같이 클라이언트가 서버로 요청을 보내면 서버가 응답하는 단방향통신이다.

http

서버의 응답에는 상태 코드가 포함되며 상태 코드는 다음과 같이 5개의 클래스로 분류 된다.

  • 1xx (정보): 요청을 받았으며 프로세스를 계속한다
  • 2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
  • 3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
  • 4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
  • 5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다

요약 

  • http는 단방향 통신
  • html, json, image등 다양한 파일을 주고 받을 수 있음
  • 서버의 응답 이후 connection이 끊어지는 것이 기본이지만, keep alive옵션을 통해서 커넥션을 조금 더 유지할 수 있음.
  • 어쨋든 서버와 클라이언트는 클라이언트의 요청에 의해서만 통신이 이루어 짐.

 

http의 단점과 해결책

http의 특징 중 하나인 서버의 응답 이후 연결이 끊어지는 특성 (connectionless)가 단점이 될 때가 있다. 

서버와 클라이언트의 연결과 단절에는 많은 리소스가 들어가는데, 실시간으로 데이터를 전송해야 하는 경우(주식 시세 서비스와 같은) 매번 커넥션을 끊고 다시 연결하는 것은 매우 큰 부담이 될 것이다.

이러한 문제를 해결하기 위해서 다양한 시도 들이 있었는데

 

  • 폴링(polling):  리얼타임 웹을 위한 기업으로 일정한 주기(특정한 시간)을 가지고 서버와 응답을 주고받는 방식,
    • 지속적인 연결을 흉내낼 순 있지만, 결국 http의 단점을 극복한 것은 아님.
    • 연결을 맺고 끊음에 대한 과도한 리소스는 여전히 서버에 부담으로 작용함
  • 웹소켓(socket): http를 기반으로 하지만, http의 문제점들을 해결하기 위해 나온 새로운 통신
    • 진정한 의미의 양방향 통신이 가능함.
    • http와 마찬가지로 프로토콜임.
    • 클라이언트와 한번 연결이 되면 계속 같은 라인을 사용해 통신하기 때문에 HTTP사용시 필요없이 발생되는 HTTP와 TCP연결 트래픽을 피할 수 있음
    • http 기반이기 때문에 http의 기본 특성을 그대로 가져감. 80(http) 443(https)를 사용하기 때문에 추가적인 방화벽 개방이 필요 없고, cors나 인증등의 과정 모두 동일하게 가져갈 수 있음.
    • 소켓 통신 과정

http 통신과 소켓 통신을 적절히 잘 사용하자!

 

참고) 

https://ko.wikipedia.org/wiki/%ED%8F%B4%EB%A7%81#%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99

https://kotlinworld.com/75#HTTP%--%ED%--%B-%EC%-B%A-%EC%-D%--%--%ED%--%B-%EC%-B%A-%--%EB%B-%A-%EC%-B%-D