Spring

[Spring] HTTP

Paragon53 2025. 3. 27. 19:31

HTTP(HyperText Transfer Protocol)

인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되었다. 

웹에서 자주 사용하는 프로트콜중 하나이며, TEXT, IMAGE, FILE, HTML, JSON 등 다양한 형태의 데이터가 HTTP를 통해 전송된다.
현재 자주 사용하는 것이 HTTP/1.1 (TCP)이다.

HTTP는 클라이언트 to 서버(요청) 뿐만 아니라, 서버 to 클라이언트(응답)에도 사용되며 서버 to 서버간의 데이터 통신에도 사용된다.(중요)

만약, 서버에서 다수의 클라이언트와 상태나 연결을 계속 유지해야 한다면 이에 따른 많은 서버의 리소스가 필요하다


- 클라이언트는 Request(요청)을 보내고, 응답을 기다린다.
- 서버는 요청에 대한 처리를 수행 후 결과를 Response(응답)한다.

클라이언트와 서버 구조
  클라이언트는 UI(User Interface)에 중점이고, 서버에서 데이터, 비지니스 로직을 담당하도록 만들어져 있어, 
  클라이언트, 서버 각자 독립적으로 발전할 수 있게되었다.



HTTP의 특성은 무상태와 비연결이 있다.

 무상태 (Stateless)는?

 클라이언트 요청을 계속 기억할 필요가 없고, 다음 요청과 함께 전달해 처리하는 방식으로, 서버가 클라이언트 이전 요청을 한번에 기억할 필요가 없어서 서버는 클라이언트의 상태를 보존하지 않는다.

 갑자기 요청량이 증가하여도 같은 사양의 서버(인스턴스)를 쉽게 여러 대 배치하여 동시에 더 많은 사용자 요청을 처리할 수 있도록 만들 수 있다.
  ( Scale Out 수평 확장성이 높다.)

대신, 처리가 완료 될때까지, 서버에 클라이언트가 데이터를 추가적으로 전송되는 데이터양이 증가(비용 증가) 하는 단점이 있다.


WebApplication을 만들때는 '서버의 확장성을 고려'하여 최대한 Stateless(무상태)하게 만들어야한다.
 
로그인을 한다면 어떻게 유지 되는간?(무상태의 한계의 예) => 햅경방법:  Cookie, Session, Token등 웹에서 지원하는 임시저장을 활용한다.


     연결(Connection)은 새로운 연결과정을 거치지 않기 때문에 시간을 단축시키고, 그 만큼 요청에 대한 처리속도고 빠르지만,   클라이언트는 필요한 경우를 제외하면 요청이 없기 떄문에 ,연결을 위한 자원이 낭비 된다.




     HTTP는 서버와 클라이언트연결을 유지하지 않는 모델이다!
    
     비연결 (Connectionless)은 
     서버와 클라이언트연결을 유지하지 않는 모델이며, 
     연결을 위한 자원이 낭비가 없어 서버 자원을 효율적으로 사용할 수 있다.
                                                                                                                                                 

문제점 해결
연결과 다르게 비연결일때는 클라이언트가 서버에 연결을 다시 요청해한다. HTTP 지속 연결 모델 사용
 요청이 추가적으로 오게되면 연결(3 way handshake)을 새로 해야 함으로, 요청에 대한 응답 시간이 증가한다  
  웹 사이트의 HTML, CSS, JS, 이미지 등의 정적 자원 모두를 다시 다운로드 한다 캐시, 브라우저 캐싱(임시저장)으로 해결


    
    HTTP 지속연결(Persistent Connections)
      하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지한다.
            - 연결을 한번만 맺고 끊기 때문에, Connectionless 방식보다 연결 횟수가 적어 그만큼 비연결 보다 속도가 빠르다.
              ex) HTML 요청 + CSS 요청 + JS 요청 + 이미지 요청