Suhwanc

 

1. 서론

보통 다른 글에서 보면 HTTP의 역사부터 설명을 하던데, 딱히 내가 들었을 때는 기억에 남는 게 없어서 이번 글에서는 HTTP 특징만 설명할 예정이다.

서론이니 딴 소리를 아주 잠깐만 하자면.. 스프링이라는 이름 유래는 이전에 Java EE(엔터프라이즈 에디션)의 스펙을 구현한 EJB가 기술의 복잡도가 증가해서 성능이 느렸던 것을 탈피하여, EJB 시절을 “겨울”에 빗대어 겨울 후의 “봄”으로 새로운 시작한다는 것을 의미하는 스프링(봄)이 되었다고 한다. 

 

ㅈ나 카리스마 있어..

 

 

2. 이 모든 게 HTTP

최근 HTTP의 중요도가 갈수록 높아지고 있다.

정확히 말하자면, 거의 대부분을 HTTP 메시지에 담아 전송하고 있는데 예를 들어 HTML, JSON, 이미지, 영상, 파일뿐만 아니라 서버 간 데이터를 주고받을 때에도 HTTP 메시지를 사용한다. 

 

그래서 필자도 HTTP에 대한 내용을 정리하고 있는게 아닐까..

 

 

 

3. HTTP 기반 프로토콜

TCP의 경우 HTTP/1.1 을 주로 사용한다. 이후 헤더나 상태 코드 분석 그림에서 자주 볼 것이다.

UDP의 경우 HTTP/3을 사용한다. 앞서 말했듯 UDP의 사용량이 증가하면서 HTTP/3의 사용도 증가하고 있다.

 

 

4. HTTP 특징

 

1) 클라이언트 서버 구조

 

HTTP는 클라이언트 - 서버 간 요청(request) 응답(response) 구조를 갖는다.

보통 클라이언트가 서버에 요청을 보내면, 서버가 응답을 하는 방식이다.

 

 

2) 무상태 프로토콜 (stateless)

 

무상태란 서버가 클라이언트의 상태를 보존하지 않는다는 것이다.

이 부분은 HTTP의 매우 중요한 특징인데, 상태를 보존한다는 것은 무언가 저장소가 있어야 한다는 것이고 이 부분은 항상 비용이 들기 마련이기 때문이다.

 

예를 들자면, 나는 중학교 3년 내내 거의 한 피시방만 매일 갔었는데, 가끔은 피시방 알바 누나한테 내가 노답 인생인걸 들키고 싶지 않을 때가 있었다. 만약 알바 누나가 "하.. 이 새끼 또 왔네?"라고 하면, 알바 누나는 상태 프로토콜인 것이다.

반대로 알바 누나의 기억이 매번 리셋되서 처음 보는 듯 대한다면 이건 무상태 프로토콜이다.

 

하지만 알바 누나가 금붕어는 아니므로, 정말 중요한 정보는 주기적으로 기억을 한다 치자.

예를 들어 후불 손님의 경우 돈 떼이면 안 되므로 꼭 기억을 해야 한다. 이 부분은 브라우저 쿠키나 서버 세션등을 사용해 최소한의 상태 유지를 하면 된다. (보안 issue)

 

또한 알바가 다른 사람으로 교체되었을 때 상태 프로토콜은 인수인계를 제대로 안 해주면 돈 떼일 수 있으나

무상태 프로토콜은 이전 내용들을 모두 요청에 담기 때문에 알바가 바뀌어도 괜찮다. (서버 고장 issue)

 

따라서 무상태 프로토콜은 확실한 장점이 된다.

 

 

3) 비 연결성 (connectionless)

 

HTTP는 기본적으로 비 연결성 특징을 가진다.

이유는 간단하다. 매번 연결해도 워낙 연결 속도가 빨라 클라이언트가 많아도 동시 처리 요청은 많지 않다.

반면 연결을 유지하면 연결된 클라이언트 하나 하나가 자원이라 비 연결성보다 확장성이 훨씬 낮다.

 

다만 이러한 특징 때문에 (꼭 비 연결성 때문만은 아니지만..)

대학교 수강 신청, 코로나 백신 신청 같은 대규모 트래픽이 등장하는 날에는 서버 개발자들이 매우 힘들어한다고 한다..

 

이런 문제를 극복하기 위한 방법으로는 실제 접근 전에 대기 페이지를 통해 먼저 연결 후 넘어간다던지.. 하는 방법이 있다고 한다.

 

 

이렇게 HTTP의 특성에 대해 아주 얕게 살펴보았다. 다음 시간에는 HTTP의 내부적 요소들 (응답 메시지, 헤더 등)에 대해 알아보겠다.