관심쟁이 영호

[#4 Spring Boot 정주행] Http에 대해서 알아보자! 본문

Bank-End/Spring Boot

[#4 Spring Boot 정주행] Http에 대해서 알아보자!

관심쟁이 영호 2021. 9. 10. 15:38
반응형

살아오면서 한 번쯤은 HTTP라는 단어를 들어본 적이 있을 것이다.

 

오늘은 그렇게 들어보았던 HTTP에 대해서 공부를 해볼 것이다!

 


목차

  • URI? URL?
  • HTTP?
  • HTTP 시작 라인
  • HTTP Method? 
  • HTTP Status?
  • HTTP Header?

URI? URL? URN?

URI, URL, URN과 같은 단어도 분명 한번은 들어보았을 것이다.

 

먼저 위키백과에서 나온 설명을 보자!

 

URL

URL은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다. 쉽게 말해서, 웹 페이지를 찾기위한 주소를 말한다.

 

URN

URN은 urn:scheme 을 사용하는 URI를 위한 역사적인 이름이다. URN은 영속적이고, 위치에 독립적인 자원을 위한 지시자로 사용하기 위해 1997년도 RFC 2141 문서에서 정의되었다.

 

URI

통합 자원 식별자(Uniform Resource IdentifierURI)는 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI의 존재는 인터넷에서 요구되는 기본 조건으로서 인터넷 프로토콜에 항상 붙어 다닌다.

 

흠.. 뭔가 어렵다..

 

쉽게 풀어서 이야기하자면,

URI는 URL과 URN을 포함하고 있는 넓은 개념이다.

URL은 www.naver.com/news와 같이 naver에 있는 news라는 리소스를 지칭하는 것이다.

인터넷 환경에서 효율적인 주소가 될 수 있다.

 

 

 


HTTP?

HTTP는 무엇일까?? 먼저 서버와 클라이언트간의 통신에 대해서 생각해보자!

 

1. 사용자가 ID와 PASSWORD값을 입력하고 "로그인"버튼을 누른다.

2. 서버로 로그인을 한다는 "요청"이 인터넷망을 통해서 넘어간다.

 

여기서 말하는 "요청"은 어떤 식으로 날아가게 되는걸까?

방법은 수십 가지가 될 것이다.

LOGIN
ID: COCA
PASSWORD: 123

이렇게 날아갈 수도 있고,

 

COCA&PASSWORD

이렇게도 가능하고,

 

방법은 수백만 가지가 될 수 있다! 해당 서버의 개발자 마음대로 짤 수가 있다.

 

근데 여기서 개발자마다 자기의 방식대로 하게 된다면..?

난장판이 된다..

 

그래서! 개발자들 간에 규약을 만들었다.

 

기본적인 HTTP 구조를 먼저 보자!

 

HTTP 요청 메시지의 예이다.

GET /apple?id=coca&password=123 HTTP/1.1
Host: www.naver.com

기타 내용(없어도 댐)

 

 

HTTP 응답 메세지의 예이다.

 

HTTP/1.1 200 OK
Content-Type:text/plain;charset=UTF-8
Content-Length: 500

hi!

 

우리가 실생활에서 작성하는 보고서의 양식처럼

요청과 응답에 양식을 넣어

거기에 맞추어서 요청과 응답을 하도록 Protocol이라는 규약을 만들었다.

 

그중에서 가장 많이 쓰이고 효율적이라고 평가되는 것이 HTTP 프로토콜이다!

 

좀 더 쉽게 이야기를 다시 하면!

 

편지를 쓸 때,

To. & From. 을 넣는 형식이 있다.

이것 또한 프로토콜인 것이다!

 


HTTP Header

위에서 보았던 예시로 살펴보자.

GET /apple?id=coca&password=123 HTTP/1.1
Host: www.naver.com

 

  • GET : HTTP 메서드를 표현한다.

 

  • /apple : 해당 사이트에 요청하는 리소스

 

  • ? : 리소스를 요청하며 함께 보내는 데이터의 시작

 

  • id=coca&password=123 : id와 password를 보냄

 

  • HTTP/1.1 : HTTP 버전

 

위와 같이 HTTP 메시지에는

프로토콜에 따라서 의미가 부여되어있다.

 

헤더에는 HTTP 전송에 필요한 부가정보가 포함되어있다.

바디 데이터에 대한 정보나, 바디 크기, 애플리케이션 정보, 캐시 정보 등등이 엄청나게 많다.

 


 

HTTP Method?

 

URI를 통해서 "www.naver.com/user" 라고 하면,

서버에서는 어떤 행동을 해야 할지 모른다.

 

user를 보여달라는 것인가?

user를 수정하라는 뜻인가?

 

그래서 행위를 표현하는 메서드를 같이 포함한다.

 

HTTP 메서드는 GET, POST, PUT, DELETE, PATCH, CONNECT  등등 많은 종류가 있다.

 

대표적으로 사용되는

GET, POST, DELETE를 보자!

 

GET : 단순 조회를 요청하는 메서드이다. 시작 라인에 명시되어있다.

 

POST : 수정을 요청하는 메서드이다.

 

DELETE : 삭제를 요청하는 메서드다.

 

명시적으로 나타내는 것이므로, GET을 통해 수정 요청도 가능하다.

하지만 최근에 HTTP 메서드를 기반으로 서버를 만드는 RestFulAPI가 유행하는 추세이다.

그래서 각각의 의미에 맞는 메서드를 사용하는 습관을 들이자!

 


HTTP Status

 

HTTP 상태 코드란?

클라이언트가 요청을 보내었을 때, 서버 측에서 HTTP 응답이 온다.

여기서 성공, 실패, 처리 중, 클라이언트 에러, 서버 에러 등등 갖가지의 경우가 있다.

 

그것을 상태 코드로 명시를 해준다.

 

상태 코드는 다음과 같다.

 

  • 100~199 : 요청 수신 성공 및 처리 중

 

  • 200~299 : 성공

- 200 : 요청 성공 및 정상적 응답

- 201 : 요청 성공 및 새로운 리소스 생성

- 202 : 요청 접수 및 처리 완료 x

- 204 : 요청 성공 및 응답 데이터 없음

 

  • 300~399 : Redirection

- 300 : Multiple Choices

 


HTTP Header

그럼 헤더를 상세히 살펴보자!

 

GET /apple?id=coca&password=123 HTTP/1.1
Content-Type: application/json
Content-Length:18
Content-Language: ko

{"name":"youngho"}
  • Content-Type : 보내는 데이터의 미디어 타입과 문자 인코딩에 대한 정보이다.
    • text/html; charset-utf-8 : html 형식이라는 타입을 데이터로 이룰 때, 지정해주는 타입이다.
    • application/json : json 형태의 타입을 데이터로 이룰 때, 지정해주는 타입이다.
    • image/png : image 파일의 타입을 데이터로 이룰 때, 지정해주는 타입이다.
  • Content-Encoding : 데이터를 압축하기 위해서 사용한다.
    • gzip
    • deflate
    • identity
  • Content-Language : 데이터의 언어를 표현한다.
  • Content-Length : 바이트 단위로 데이터의 길이를 표현한다.
  • From: 이메일 정보
  • Referer: 이전의 웹 페이지 주소
  • User-Agent : 요청 유저의 애플리케이션 정보
  • Server : 요청을 처리하는 서버의 소프트웨어 정보
  • Date : 메시지 생성 날짜
  • Host : 요청한 호스트의 정보
  • Location : 페이지 리다이렉션
  • Authorization : 클라이언트의 인증 정보
  • Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, 다시 요청 시 전달
  • Set-Cookie : 서버에서 클라이언트로 쿠키를 전달하고, 웹 브라우저가 해당 쿠키를 저장

 

 

 

 

 

300x250
Comments