본문 바로가기
Spring boot 프로젝트 기록/기본적인 기초 공부

배경지식(1) - HTTP

by 으노으뇨 2021. 11. 16.
728x90
반응형
SMALL

하이터 텍스트 트랜스퍼 프로토콜

HTTP는 애플리케이션 레벨의 네트워크 프로토콜이다. 많은 웹 기반 애플리케이션이 HTTP를 이용하고 우리 프로젝트도 

HTTP로 서버와 클라이언트 간에 통신한다. 그런데 이 HTTP란 정확히 무엇일까??

HTTP는 HyperText Transfer Protocol의 약자이다. Transfer Protocol 이란 통신규약이라는 뜻이다. 

그렇다면 하이터텍스트란 무엇인가? 

맨처음 하이퍼 펙스트는 

다른 문서로 향하는 링크가 있는 텍스트로 시작했다.

하이퍼 텍스트의 예로 우리에게 익숙하다. 왜냐하면 하이퍼텍스트는 지금도 많이 사용하고 있기 때문이다. 

이렇게 문서 내에서 하이퍼텍스트를 지정하려면 특별히 하이터텍스트 마크업언어를 사용해야 한다.

물론! 시작이 이랬다는 것이다. 오늘날의 HTTP는 HTML문서를 주고받던 간단한 프로토콜에서 벗어나 그림 파일

동영상, 3D 등 다양한 미디어 리소스를 주고 받는 형태로 발전했다. 마찬가지로 HTML도 단순히 하이퍼링크를 위한

마크업 언어에서 다양한 시작적 기능을 제공하는 마크업 언어로 발전했다.

HTTP가 웹 서비스에서 어떻게 사용되는지는 그림처럼 설명할수있다. 

사용자는 브라우저라는 클라이언트를 통해 서버에 HTTP 요청을 전송할 수 있다. 브라우저의 주소창에 URL을 입력하고

엔터를 누르면 브라우저는 HTTP GET요청을 해당 URL 서버로 전송하고 그 결과인 HTTP  응답을 브라우저에 랜더링

(화면에 디스플레이) 하는 것이다.

[HTTP 요청하는 예제]

GET / HTTP
Accept : text/html,application/xhtml+xml,application/xml;q=0,*/*;q=0.8
Upgrade-Insecure-Requests : 1
Host : localhost:8080
User-Agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko)
Version/14.0.3 Safari/605.1.15
Accept-Language : un-us
Accept-Encoding : gzip, deflate
Connection : keep-alive

해당 HTTP 요청을 봅시다. HTTP요청에서는 송신자의 다양한 정보가 담겨있다.

예를 들어 해당 코드의 송신자는 localhost:8080 으로 get요청을 전송하려 한다.

프로토콜은 HTTP 1.1 버전이다. 운영체제는 MAC OS X 이고, 요청 전송 시 사파리 브라우저를 사용했다.

우리가 주목해야 할 부분은 요청 매서드다. HTTP 요청에는 get, post, put, delete와 같은 메서드를 지정할 수 있다.

이런 메서드는 호스트에 지정한 리소스에 어떤 작업을 하고 싶은지 알려주는 역할을 한다.

우리가 사용하고 개발할 HTTP 메서드를 밑의 표에 간략히 요약했다.

메서드 기능
GET 리소스를 가져올 때 사용
POST 리소스에 대해 임의의 작업(예 : 생성, 수정)을 할 때 사용P
PUT 리소스를 대체할 때 사용
DELETE 리소스를 삭제할 때 사용

비록 HTTP 메서드가 이런 기능을 한다고 하지만, 이는 전적으로 API를 개발하는 개발자에게 달려있다.

예를 들어 POST 메서드기인 하지만 개발자는 리소스에 어떤 작업도 하지않고 반환하도록 API를 작성할 수도 있다.

요지는

HTTP 메서드 기능의 의미는 이런 기능을 위한 API에 사용하는 것이 좋다는 뜻이지 GET메서드로 지정했으니 마법처럼 리소스가 반환되는 것은 아니라는 것이다.

각 메서드가 연결되는 API는 개발자가 작성해야하는 것이고, 앞으로 스프링부트 카테고리의 프로젝트를 진행 할때 

API를 작성할 것이다. 

HTTP/1.1 200
Content-Type : text/html;charset=UTF-8
Keep_Alive : timeout=60
Pragma : no-cashe
X-XSS-Protection : 1; mode=block
Expires : 0
Cache-Control : no-cache, no-store, max-age=0, must-revalidate
Date : Sat, 17 Apr 2021 05:28:42 GMT
Content-Length : 32
Connection : keep-alive
X-Content-Type-Options : nosniff
X-Frame-Options : DENY
Vary : Origin, Access-Control-Request, Access-Control-Request-Headers

<html></html>

HTTP 응답의 예를 알아보자 , HTTP 요청과 비슷하게 HTTP 응답도 여러가지 정보를 담고있다.

우선 HTTP 응답코드를 보면 HTTP/1.1  옆에 200이라는 숫자가 있다. 이숫자가 바로 응답 코드이다.

예를들어

200은 성공적으로 요청을 처리 했다는 뜻이고,

404는 해당 리소스가 존재하지않고

403은 송신자에게 해당 리소스에 접근할 권한이 없다

500은 서버의 에러로 요청을 처리할 수 없나느 뜻이다.

이렇게 HTTP 응답에 코드를 함께 보내 사용자가 요청이 어떻게 처리되었는지 알 수 가 있다.

COntetnt-Type은 응답의 미디어 타입을 의미한다. 미디어 타입에는 text/html, text/css, application/json

video/mpeg 등이 있다. 또 Keep-Alive, Cache-Control, Connection 등 통신에 관련된 정보를 확인할 수 있다.

마지막으로 응답 바디가 있다. 

서버 어플리케이션은 보통 HTTP 응답 바디에 요청 처리 결과를 보낸다. 

www.google.com 에 get요청을 보내면 Google은 응답 바디에 Google랜딩 페이지 HTML을 넣어 반환다.

 

 

728x90
반응형
LIST