Spring 입문주차/1주차

3. HTTP란 무엇일까?

note994 2024. 8. 10. 19:28

HTTP(HyperText Transfer Protocol)란?


데이터를 주고 받는 양식을 정의한 "통신 규약"중 하나가 HTTP이다.

매우 범용적인 양식을 가지고 있어 전 세계에서 제일 널리 쓰이는 통신 규약이다.

여기서 말하는 통신 규약이란, 컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속을 의미한다.

누군가가 나에게 한국어로 말을 걸면 바로 이해할 수 있지만 갑자기 중국어나 불어로 말하면 알아듣지 못한다.

마찬가지로 컴퓨터끼리 데이터를 주고 받을 때 정해진 규칙 없이 매번 요청하는 방식이 다르다면 소통에 큰 문제가 발생한다.

현재 이용되는 대부분의 웹 서버가 HTTP를 기반으로 정해진 규칙에 맞게 데이터를 주고 받는다.

또한, 모든 브라우저는 HTTP 프로토콜을 기본으로 지원하기 때문에 우리는 매일 HTTP를 이용하는 셈이 된다.


우리는 어떻게 HTTP로 데이터를 주고 받을까?

HTTP에서는 언제나 Request, Response 라는 개념이 존재한다.

서버와 브라우저의 관계로 가볍게 말하면 아래와 같이 동작한다.

1. 브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보)를 요구(Request)한다.

2. 서버는 브라우저가 원하는 페이지가 있는지 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 응답(Response) 해준다.

3. 브라우저는 서버에게 전달받은 데이터를 기반으로 브라우저에 그려준다.


브라우저에서 HTTP가 동작하는 것을 직접 확인해보기

개발자 도구와 네트워크 탭 열어보기(F12)

원하는 웹 페이지 어디든 들어가서 F12를 누르면 아래와 같은 창이 뜬다. 이것을 DevTool 혹은 개발자 도구라고 부른다.

네트워크 탭을 누르고 새로고침을 하면 뭔가 쭉 나오는데 이것이 바로 브라우저가 지금 페이지를 보여주기 위해 서버에서 받아온 데이터 목록이라고 이해하면 된다.

이제 Name부분에서 아무거나 하나 클릭해본다.

General : 브라우저에서 서버로 보낸 Request 데이터라고 보면 쉽다.

 

Status Code 200은 '요청이 성공했다'라는 뜻이다.

HTTP 상태 코드(Status Code)를 통해 브라우저와 서버간의 요청, 응답 과정에서 발생할 수 있는 상황들을 표현할 수 있다.

HTTP 상태 코드는 3자리 숫자로 이루어져 있다.

첫 번째 자리 숫자는 상태 코드의 분류를 나타내는 용도로 사용되며, 나머지 두 자리는 세부적인 정보를 나타낸다.

Request Headers : 이것도 브라우저에서 서버로 보낸 Request 데이터라고 보면 된다.

Response Headers : 서버가 웹 페이지 데이터와 함께 보낸 추가 데이터이다.


Response 탭 살펴보기

이제 Headers 탭에서 Response 탭으로 바꿔보자

아래와 똑같지 않더라도 괜찮다. 알 수 없는 글자들이 막 써있는것이 보이면 된다.

이것은 서버에서 브라우저로 반환해 준 웹 페이지를 그려주기 위한 데이터이다. 

 


추가 데이터와 데이터는 무엇이 다른가?

위에서 개발자 도구로 직접 보면서 나온 애매한 단어들이 있다.

Headers 탭에서는 추가 데이터라고 많이 말했었고, Response 탭에서는 그냥 데이터라고 말했다. 이것에 대해서 조금 더 자세히 알아보자

HTTP에는 크게 다음과 같은 구성 요소가 존재한다.

Method (호출/요청 방식)

GET : 이름 그대로 어떤 리소스를 얻을 때 사용된다. 브라우저의 주소창에 URL을 입력하면 GET 메서드를 사용해서 서버에 요청을 보낸다.

POST : 웹 서버에 데이터를 게시할 때 사용하는게 일반적이다. (ex. 회원가입, 게시글 작성, 댓글 작성)

그외 DELETE 등의 여러 요청 방식이 존재한다.

가장 대표적인 요청 방식이 GET과 POST이다.




Header(추가 데이터, 메타 데이터)

브라우저가 어떤 페이지를 원하는지

요청 받은 페이지를 찾았는지

요청 받은 데이터를 성공적으로 찾았는지

어떤 형식으로 데이터를 보낼지

GET naver.com HTTP/1.1

이러한 사례 외에도 아주 다양한 의사 표현을 위한 데이터를 모두 Header 필드에 넣고 주고 받는다. 위에서 설명된 메서드도 사실은 헤더에 포함되어 서버로 보내진다.


Payload (데이터, 실제 데이터)

서버가 응답을 보낼 때에는 항상 Payload를 보낼 수 있다.

클라이언트(브라우저)가 요청을 할 때에도 Payload를 보낼 수 있다. 

그리고 "GET method를 제외하곤 모두 Payload를 보낼 수 있다"는게 HTTP에서의 약속이다.