HTTP (Hypertext Transfer Protocol)
웹서버와 웹브라우저 간의 웹정보를 교환하기위한 프로토콜 (통신규약) 이다.
0. HTTP 특징
- 클라이언트 - 서버 구조
- HTTP 메시지를 이용
- 비연결성 (Connectionless)
- 무상태 (Stateless)
- 단순함
1. 클라이언트 - 서버 구조
클라이언트(웹브라우저 등) 가 요청을 보내면 서버가 응답을 하는 구조이다. 1개의 요청(Request)에는 1개의 응답(Response) 를 반환하도록 되어있다. 또한 같은 조건의 요청이라면 응답은 항상 같다.
2. HTTP 메시지를 이용
HTTP 는 TCP/IP 로 클라이언트가 송신하는 요청(Request) 와 서버의 응답(Response) 으로 되어 있다.
리퀘스트에는 헤더 필드나 메시지의 바디가 존재하며, 요청메소드로 지정한다.
리스폰스에는 상태, 헤더 필드, 메시지의 바디가 존재하며, 처리 결과는 상태 코드로 표시된다.
자세한 내용은 아래를 참고하자.
링크1 : [HTTP] 3. HTTP 요청 메시지 (Request)
링크2 : [HTTP] 4. HTTP 응답 메시지 (Response)
3. 비연결성 (Connectionless)
HTTP 는 클라이언트와 서버가 TCP/IP 연결을 맺는다. 연결을 맺은 후 클라이언트의 요청이 있고 그에대한 서버가 응답을하면 연결을 끊는다.
이용자의 수가 많더라도 실제로 동시에 처리하는 요청은 그렇게 많지 않다. 수많은 이용자들의 클라이언트와 서버의 연결을 유지한다면, 실제로 처리되는 요청수보다 연결을 하고있는 그 자체에대한 자원낭비가 커지게 된다. 따라서 사용하지 않을때는 연결을 끊어 자원(리소스)의 낭비를 줄일 수 있다.
물론, 이러한 성격 때문에 매번 TCP/IP 연결 (3-way handshake) 시간이 추가된다. 그 결과로 매번 연결과 해제에 의해 서버에 막대한 부하가 생길 수 있다.
이에대한 해결책으로도 지속적 연결(persistent connections, keep-alive 속성)이 나오게 되었다. 자세한 내용은 아래에도 정리해 두었다.
HTTP/1.1 의 지속적 연결로 문제를 해결하였고 HTTP/2 와 HTTP/3 에서 더 많은 최적화를 진행중이다.
4. 무상태 (Stateless)
서버가 클라이언트의 상태를 보존하고 있지 않는다.
장점 : 서버 확장성 높음 (스케일 아웃)
단점 : 클라이언트가 추가 데이터 전송
■ 상태유지 (Stateful)
상태를 유지한다면?
서버가 클라이언트의 상태를 유지한다면 서버가 클라이언트의 정보를 가지고 있으므로 클라이언트는 최소한의 데이터만으로 요청할 수 있다. 이 때문에 해당 서버를 교체하게 된다면 이전 상태를 알 수 없게 되므로 상태 정보를 다른 서버에도 전달해야 한다.
고객 : A버거 세트 주세요
점원 : 음료는 무엇으로 하시겠습니까? (A버거 세트 상태 유지)
고객 : 콜라로 주세요
점원 : 알겠습니다. 5,000원 결제 도와드리겠습니다. 어떻게 결제하시겠어요? (A버거 세트, 음료 콜라 선택 상태 유지)
고객 : 카드로 하겠습니다.
점원 : 결제되었습니다. (A버거 세트, 음료 콜라 선택, 카드 상태 유지)
만약, 점원이 중간에 바뀐다면?
고객 : A버거 세트 주세요
점원1 : 음료는 무엇으로 하시겠습니까?
고객 : 콜라로 주세요
점원2 : ?? 콜라만 주문하시겠어요?
고객 : 카드로 하겠습니다.
점원3 : ?? 어떤 메뉴를 카드로 주문하시겠어요?
■ 무상태(Stateless)
서버가 클라이언트의 상태를 유지하지 않는다면, 클라이언트는 매번 데이터를 추가하여 요청해야 한다. 매번 데이터를 송신하므로 서버가 중간에 바뀌어도 문제가 되지 않는다.
즉, 갑자기 클라이언트의 증가에따라 무한히 서버를 증설할 수 있다. (수평확장이 유리하다, 스케일 아웃)
고객 : A버거 세트 주세요
점원 : 음료는 무엇으로 하시겠습니까?
고객 : A버거 세트, 음료는 콜라로 주세요
점원 : 알겠습니다. A버거 세트, 콜라로 선택하셔서 5,000원 결제 도와드리겠습니다. 어떻게 결제하시겠어요?
고객 : A버거 세트, 음료는 콜라로 주세요 결제는 카드로 하겠습니다.
점원 : 결제되었습니다.
점원이 중간에 바뀌면?
고객 : A버거 세트 주세요
점원1 : 음료는 무엇으로 하시겠습니까?
고객 : A버거 세트, 음료는 콜라로 주세요
점원2 : 알겠습니다. A버거 세트, 콜라로 선택하셔서 5,000원 결제 도와드리겠습니다. 어떻게 결제하시겠어요?
고객 : A버거 세트, 음료는 콜라로 주세요 결제는 카드로 하겠습니다.
점원3 : 결제되었습니다.
◾무상태 (Stateless) 의 실무적 한계
- 모든 것을 무상태로 설계할 수는 없다.
- 예를들면, 로그인이 필요없는 화면은 무상태, 로그인의 경우는 상태유지로 설계하는 것이다.
- 로그인한 경우, 로그인 했다는 상태를 서버에 유지해야한다.
- 상태유지는 최소한으로 사용한다.
- 상태를 유지하는 방법 : 브라우저 쿠키, 서버 세션 둥