Web

HTTP 프로토콜

oagree0123 2021. 8. 25. 15:10

url의 앞에 http나 https가 붙어있는 경우를 본 적이 있을 것입니다. 이번 글에서는 HTTP가 무엇인지 알아보도록 하겠습니다. 그리고 HTTP와 HTTPS의 차이점을 간단하게 확인해 보겠습니다.

 

프로토콜

프로토콜은 컴퓨터 내부 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다. 기기간 통신은 교환되는 데이터의 형식에 대해  상호 합의를 요구합니다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라 합니다. 간단하게설명하자면 "내가 이런 방식으로 줄 테니까 너는 이런 방식으로 받아. 그리고 너가 준 것은 내가 이렇게 받을께" 라고 약속하는 것입니다.


1. HTTP (Hypertext Transfer Protocol)

HTTP는 인터넷상에서 데이터를 주고 받기 위한 1) 서버/클라이언트 모델을 따르는 프로토콜입니다. 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동하며 기본 포트는 80번입니다. 

 

TCP/IP 프로토콜은 다음에 더 자세하게 알아보도록 하겠습니다.

 

1) 서버/클라이언트 모델

서비스 제공자(Service Provider)인 서버(Server)와 서비스 요청자(Service Requester)인 클라이언트(Client)로 구분되는 네트워크 모델입니다. 이 모델에서 자원은 서버에 집중되며 클라이언트는 데이터를 재현하는데 필요한 최소한의 자원을 가지는 것이 일반적입니다.

[클라이언트 / 서버]

 

HTTP 프로토콜로 데이터를 전송하거나 받기 위해서는 위의 그림과 같이 요청(Request)을 서버로 보내고 응답(Response)을 받아야 합니다. 

URL (Uniform Resource Locators)

URL은 클라이언트가 서버에게 자원을 요청하기 위해 입력하는 영문 주소입니다. URL의 구조는 아래의 그림과 같습니다. 

[URL의 구조]

 

2. HTTP 프로토콜 특징

HTTP 프로토콜의 특징에는 크게 두 가지가 있습니다. 

  1. 비연결성 (Connectionless)
  2. 상태가 없는 (Stateless)

2.1 Connectionless

먼저, Connectionless는 위에서 설명한 것과 같이 클라이언트가 요청하고 서버가 응답을 마치면 연결을 끊어버리는 것을 의미합니다. 연결을 끊는 이유는 다수의 클라이언트를 서버에 연결한 것을 계속 유지할 경우, 많은 리소스가 발생하기 때문입니다. 이는 불특정 다수를 대상으로 서비스하는데 적합하다는 장점을 가지고 있습니다.

 

그러나 단점도 존재합니다. 단점은 동일한 클라이언트의 요청에 대해 매번 새로운 연결을 시도해야하며, 연결을 끊어버리기 때문에 클라이언트의 이전 상태를 알 수 없게 됩니다. 이러한 특징을 Stateless라고 부릅니다.

2.2 Stateless

Stateless을 조금 더 설명하자면 동일 클라이언트에서 온 현재 요청과, 이전의 요청을 구분하지 못한다는 것입니다. 이는 각각의 통신이 독립적으로 수행된다는 것입니다. 이러한 특징은 장점도 있지만 웹 서비스를 하는 데 있어 문제가 발생합니다. 클라이언트가 로그인을 한다던가 쇼핑몰 사이트의 장바구니 같은 기능을 사용하지 못한다는 것입니다. 이에 대해 

HTTP는 Cookie를 이용하여 문제를 해결하고 있습니다. 

 

2.3 Cookie

Cookie는 클라이언트와 서버의 상태 정보를 담고있는 정보의 조각입니다. 클라이언트가 로그인에 성공했을 경우에 서버는 로그인 정보를 자신의 데이터베이스에 저장하고 동일 값을 cookie 형태로 클라이언트에게 전송합니다. 클라이언트는 다음의 요청에 cookie를 서버에 전송하는데 서버는 cookie의 값으로 자신의 데이터베이스를 조회해 로그인 여부를 판단할 수 있습니다.

 

상태를 유지하는 방식으로 쿠키와 세션에 대해 다음에 더 자세히 알아보겠습니다.

 

3. HTTP 요청 메소드 (HTTP Request Method)

HTTP 요청 메소드는 요청의 종류를 서버에 알려주고, 요청하는 데이터에 특정 동작을 수행할 경우에 사용됩니다. 

  • GET : 존재하는 자원에 대한 요청 (SELECT)
  • POST : 새로운 자원을 생성 (INSERT)
  • PUT : 존재하는 자원에 대한 변경 (UPDATE)
  • DELETE : 존재하는 자원에 대한 삭제 (DELETE)
  • HEAD : 서버 헤더 정보를 획득, GET이랑 비슷하나 Response Body를 반환하지 않음
  • OPTIONS : 서버에서 지원하는 메서드 종류를 확인하기 위한 요청, CORS에서 사용
  • TRACE : 클라이언트의 요청을 그대로 반환, 서버 상태를 진단하기 위한 목적으로 사용

 

4. HTTP 상태 코드 (HTTP Status Code)

위에서 본 URL과 요청 메서드가 클라이언트에서 설정해야 할 정보라면, HTTP 상태 코드는 서버에서 설정하는 응답 정보입니다.

 

상태 코드는 성공/실패 여부를 확인할 수 있어 에러 처리를 할 수 있기 때문에 중요합니다. 간단한 예를 들어 보면

사용자 목록을 불러오는 GET 메소드 요청을 보내겠습니다.

http://domain.com/users

위 요청에 대한 응답으로 상태 코드는 200(성공)과 404(실패)로 나뉩니다. 이 HTTP 상태 코드로 추가적인 로직을 구현할 수 있습니다.

  • 10x : 정보 확인
  • 20x : 통신 성공
  • 30x : 리다이렉트
  • 40x : 클라이언트 오류
  • 50x : 서버 오류

2XX - 성공

200 번대의 상태 코드는 요청을 성공적으로 처리했음을 의미합니다.

상태코드 의미
200 GET에 대한 요청 성공
204 No Content, 성공했으나 응답 본문에 데이터가 없음
205 Reset Content, 성공했으나 클라이언트의 화면을 새로고침 하도록 권고
206 Partial Content, 성공했으나 일부 범위의 데이터만 반환

3XX - 리다이렉션

300번대의 상태 코드는 클라이언트가 이전 주소로 데이터를 요청하여 서버에 새 URL로 리다이렉트를 유도하는 경우를 의미합니다.

상태코드 의미
301 Moved Permanently, 요청한 자원이 새 URL에 존재
303 See Other, 요청한 자원이 임시 주소에 존재
304 Not Modified, 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고

4XX - 클라이언트 에러

400번대 상태 코드는 클라이언트의 코드가 잘못된 경우입니다. 유효하지 않은 자원을 요청하거나 요청 권한이 잘못된 경우 발생합니다. 가장 익숙한 상태 코드는 요청한 자원이 서버에 없다는 의미인 404 코드입니다.

상태코드 의미
400 Bad Request. 잘못된 요청
401 Unauthorized, 권한 없이 요청, Authorization 헤더가 잘못된 경우
403 Forbidden, 서버에서 해당 자원에 대해 접근 금지
404 Not Found, 요청 URI에 대한 리소스가 존재하지 않는 경우
405 Method Not Allowed, 허용되지 않은 요청 메소드
409 Conflict, 최신 자원이 아닌데 업데이트 하는 경우

5XX - 서버 에러

500번대 상태 코드는 서버 쪽에서 오류가 난 경우입니다.

상태코드 의미
501 Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
503 Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우

 

5. Keep Alive

Keep Alive는 HTTP 1.1부터 지원하는 기능으로 이전에는 지원하지 않았던 상태를 유지하는 방법입니다. 위에서 HTTP는 클라이언트와 서버 사이에서 응답이 끝나면 끊긴다는 것을 설명했습니다. 이는 간단한 페이지라고 해도 많은 데이터를 가지고 있기 때문에 웹 페이지 하나를 표시하는데 여러 번의 연결과 끊김의 과정이 반복되어야 합니다. 

 

이러한 문제에 대해 연결 상태를 유지하는 것을 Keep Alive라 합니다. 

Connection: Keep-Alive

Keep-Alive:timeout=5, max=200

위와 같은 설정으로 하나의 연결당 5초 동안 유지하며, 최대 200개까지 허용하는 것을 볼 수 있습니다.

 

6. HTTPS (Hyper Text Transfer Protocl Secure)

HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜입니다. HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제 삼자가 정보를 볼 수 없도록 공개키 암호화를 지원합니다.

 

HTTPS는 암호화를 위해 SSL(Secure Sockets Layer)을 사용했습니다. SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 할 수 있도록 도와주고, 개인 정보 등 다른 사람에게 보여줘서는 안되는 정보 등을 도난당하는 것을 막아 줍니다.

 


참고 문서

 

HTTP 프로토콜이란?

1. HTTP 프로토콜이란? HTTP(Hypertext Transfer Protocol)는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다. 애플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동한다.

shlee0882.tistory.com