본문 바로가기
📖 Computer Science/네트워크

[CS Study] 네트워크 (3) - HTTP

by 헤이즐넛 좋아하는 개발자 2025. 5. 7.

시작하기 전에

저번에 TCP와 UDP를 살펴봤으니 HTTP로 넘어가 봅시다.

앞의 글에서 HTTP는 TCP/IP 4계층에서 응용 계층에 속한다고 언급했습니다. 출발해봅시다.


HTTP(HyperText Transfer Protocol)

2가지 특징이 있다:

 

1. 비연결성

  • 클라이언트에서 요청을 보낸 후 서버로부터 응답을 받으면 연결을 끊는 것이다.
  • 비연결성은 불특정 다수를 대상으로 한 서비스에 유리하다.
  • 연결을 유지하지 않음으로써 자원을 아낄 수 있다.
  • 하지만 클라이언트를 기억할 수 없다. 따라서 동일한 클라이언트에게 반복적인 요청이 오면 연결과 연결 해제를 반복해서 자원을 낭비할 수 있다.
  • 이러한 단점을 극복하기 위해 일정 시간 동안 연결을 유지하는 HTTP Keep Alive가 있다. 클라이언트에서 HTTP 요청을 보낼 때 연결 헤더에 Keep Alive를 추가해서 보내면 된다.

2. 무상태(stateless)

  • 서버에서 클라이언트의 상태를 저장하지 않는 것이다.
  • 예를 들어, '아이스 아메리카노 한 잔 주세요'와 '카드로 할게요'라는 주문을 따로 하면 카드 요청 때는 클라이언트(손님)가 아이스 아메리카노를 주문했다는 것을 까먹는다. 따라서 '아이스 아메리카노 한 잔을 카드로 결제할게요.'라고 요청 사항을 모두 담아 하나로 물어봐야 한다.
  • 클라이언트가 요청에 필요한 데이터를 모두 가지고 있거나 서버가 클라이언트로부터 받은 요청 사항을 모두 저장해야 한다.
    이를 각각 쿠키(cookie)와 세션(session)이라고 한다.
  • 서버 확장성이 좋다는 장점이 있다. 클라이언트의 요청에 응답하는 서버가 바뀌어도 되기 때문에 서버를 계속 확장해도 된다. 특정 서버에 문제가 생겨 응답하지 못하는 문제점도 보완할 수 있다.

HTTP에서는 클라이언트와 서버가 메시지를 주고받을 때 정형화된 형식인 HTTP 메시지를 주고받는다.

구조는 다음과 같다:

  • 요청 라인: 요청 URI, 요청 방법, HTTP 버전 등을 포함한다.
  • 상태 라인: 요청에 대한 HTTP 상태 코드와 HTTP 버전을 포함한다.
  • 헤더(header): 키-값으로 구성된 다수의 헤더 항목으로 구성된다.
  • 빈 줄: 헤더의 끝을 나타내고, 헤더와 바디를 구분한다.
  • 바디(body): 요청 방법 메서드가 POST인 경우만 바디가 있고, 그 외 메서드에서는 비어 있다.

HTTP 상태 코드란, 클라이언트의 요청에 대한 서버의 상태를 알려 주는 코드다. 세 자리 숫자이며, 시작 숫자로 의미를 알 수 있다.

  • 1xx: 클라이언트로부터 요청을 받아 처리 중
  • 2xx: 요청을 성공적으로 처리함
  • 3xx: 요청 처리를 위해 추가 처리 필요
  • 4xx: 클라이언트 오류
  • 5xx: 서버 오류

자주 나오는 HTTP 상태 코드:

  • 200: 요청을 성공적으로 처리함
  • 401: 인증되지 않음
  • 403: 접근 실패
  • 404: 클라이언트에서 요청한 자원을 찾지 못함
  • 500: 서버 내부 오류 발생
정리하고 싶었던 HTTP를 정리했다.
우리는 HTTP보다 HTTPS를 더 자주 볼 것이다. 이건 뭘까?

HTTPS(HyperText Transfer Protocol Secure)

보안 계층 SSL/TLS를 이용해 HTTP의 보안을 강화한 웹 통신 프로토콜이다.

HTTP는 데이터 암호화를 거치지 않아서 보안에 취약하다.

 

SSL(Secure Socket Layer) 암호화 프로토콜이 몇 가지 문제점이 있어, 이를 보완한 TLS(Transport Layer Security)가 등장했다.

현재 HTTPS에서는 TLS가 통용되고 있다.

  • 데이터를 송신 시 응용 계층에서 보안 계층으로 데이터를 보내면 SSL/TLS가 데이터를 암호화해 전송 계층으로 전달한다.
  • 데이터를 수신 시 전송 계층에서 보낸 데이터를 보안 계층의 SSL/TLS에서 받아 복호화한 후 응용 계층으로 전달한다.

SSL/TLS에는 암호화를 위해 2가지 암호화 방식, 대칭키 암호화 방식과 공개키 암호화 방식을 사용하는데 이는 앞에서 정리한 적이 있으니 넘어가도록 한다.

 

 대칭키 암호화 방식과 공개키 암호화 방식

더보기

 대칭키 암호화 방식과 공개키 암호화 방식

'SKT 유심 해킹 - 사건 정리' 글에서 정리했다:
https://hazel-nut-library.tistory.com/entry/CS-Study-SKT-%ED%95%B4%ED%82%B9-%EC%82%AC%EA%B1%B4

웹 통신 프로토콜들을 살펴봤으니 이제는 사용자가 URL을 입력했을 때 화면이 어떻게 나타나는 것인지를 알아보자.

웹 페이지 접속 과정

과정은 다음과 같다:

  1. 사용자가 URL을 웹 브라우저에 입력한다.
  2. 웹 브라우저는 입력한 URL을 바탕으로 DNS(Domain Name System) 서버에 연결할 IP를 요청한다.
  3. DNS 서버는 IP 주소를 웹 브라우저에게 응답으로 제공한다.
  4. 웹 브라우저는 DNS 서버에서 받은 IP를 통해 웹 서버와 TCP/IP 연결을 하고 HTTP 요청을 보낸다.
  5. 웹 서버는 받은 HTTP 요청에 웹 페이지와 필요한 리소스를 포함하여 응답한다.
  6. 웹 브라우저는 받은 응답을 바탕으로 사용자에게 웹 페이지를 보여 준다.
HTTP 통신을 활용할 수 있는 대표적인 방법으로 REST가 있다. 또한 위에서 HTTP 매서드라는 워딩이 나왔다.
다음 글에서는 이를 알아보자.