Web

HTTP 웹 기본 지식 정리 - HTTP 메서드

모모토 2021. 9. 9. 12:00
반응형

※ 본 포스팅은 Inflearn - 김영한 강사님의 'HTTP 웹 기본 지식 정리' 을 참고,공부하여 만들었습니다.

 

 

 

HTTP 메시지

HTTP 메시지로 모든 것을 전송한다.

  • HTML , TEXT
  • IMAGE , 음성 , 영상 , 파일
  • JSON , XML
  • 거의 모든 형태의 데이터 전송 가능
  • 서버간의 데이터를 주고 받을 때도 대부분 HTTP 사용

 

HTTP 메시지 형식

 

A) 시작라인

a. 요청메시지 구성

 

  1. request - line = method(공백)request-target(공백)HTTP-version(엔터)
  2. 리퀘스트 라인은 위의 형식을 맞춰줘야함 , 공백 엔터 등등
  3. method : http 메서드 (GET : 요청 , 조회) / GET , POST , PUT , DELETE 등등
  4. request-tartget : 요청대상
  5. HTTP version : ex) HTTP/1.1

b. 응답메시지 구성

 

  1. status-line = HTTP-version(공백)status-code(공백)reason-phrase(엔터)
  2. HTTP version : ex) HTTP/1.1
  3. status-code : 요청 성공 , 실패 여부 / 200 - 성공 , 400 - 클라이언트 요청 오류 , 500 - 서버 내부 오류
  4. reason-phrase : 사람이 이해할 수 있는 짧은 상태 코드 설명글

 

B) HTTP 헤더

a. HTTP 전송에 필요한 모든 부가정보를 담고 있음

 

 ex) 메시지 바디의 내용 , 크기 , 압축 , 인증 , 요청 클라이언트(브라우저)의 정보 , 서버 애플리케이션 정보 , 캐시 관리 정보 등등

 

b. 표준헤더가 너무 많다. 또한 필요시 임의의 헤더 추가가 가능

 

 

C) HTTP 메시지 바디

a. 실제 전송할 데이터

 

ex) HTML 문서 , IMAGE , 영상 JSON 등등 bute로 표현가능한 모든 데이터를 전송한다.

 

D) empty line(엔터)

 공백 라인으로 반드시 존재하여야 한다고 한다.

 

HTTP method

HTTP method 에 대해 알아보기전에 먼저 HTTP API를 만들어보자

앗 HTTP API 는 근데 뭐람..? (요즘은 REST API와 같은 용어로 쓰이지만 엄밀하게 말하면 다른것이다. 그냥 REST API 하면 HTTP API 말하는거구나 생각해도 무방하다.)

 

HTTP API

API란 무엇인가? 컴퓨터의 기능을 실행시키는 방법을 의미한다. HTTP는 무엇인가? 웹서버와 브라우저 사이에 데이터를 전송하기 위해서 사용되는 규약이다.

우리는 클라이언트와 서버의 데이터교환에 관하여 공부하였다. 서버는 컴퓨터이고 이 컴퓨터에 우리가 원하는 정보를 요청하거나 업데이트 하거나 삭제하여야한다.

그럴때 필요한것이 HTTP API이다. HTTP API는 HTTP를 사용해서 서로 정해둔 스펙으로 데이터를 주고 받으며 통신하는 것으로 이해하면 된다.

어떤 언어를 사용하여 프로그래밍하던지간에 이 통신규약은 똑같이 적용하여 데이터를 전송한다.

 

회원 정보 관리 API를 만들어보자

다음의 API 들을 이용하여 서버에 회원 목록을 조회 , 개인회원 조회 , 등록 , 삭제 등의 작업을 수행하도록 할 것이다.

  • 요구사항
    1. 회원 목록 조회
    2. 회원 조회
    3. 회원 등록
    4. 회원 수정
    5. 회원 삭제
  • API URI 설계 - 1

URI(Uniform Resource Identifier) 는 '리소스'를 식별하는 역할을 한다. 다음의 URI를 살펴보자 (사실상 URL을 만든것)

 

  1. 회원 목록 조회 /read-member-list
  2. 회원 조회 /read-member-by-id
  3. 회원 등록 /create-member
  4. 회원 수정 /update-member
  5. 회원 삭제 / delete-member

 

이것은 과연 좋은 URI 설계일까?

URI 는 리소스를 식별해야한다. 역할은 거기서 끝나는것이다. 리소스는 자원이란 뜻이다. '회원 목록 조회' 가 리소스일까?

아니다 , 바로 '회원' 이 리소스이다. 우리는 회원을 식별하는데 집중해야한다.

'회원 조회' 가 리소스가 아닌 회원이 리소스이고 이것을 식별해야한다.

 

  • API URI 설계 - 2

+ 리소스 식별 , URI 계층 구조 활용

 

잠깐 , URI 계층 구조가 뭔데?

 

URI는 이해력을 높이기 위해서 예측 가능해야하고, 계층 구조적이어야 합니다. 즉, 일관성이 있다는 관점에서 예측가능하고, 데이터가 구조를 갖추고 있다는 점에서 계층적이다는 것입니다.

-

출처

https://sas-study.tistory.com/265


다시 돌아와서 리소스 식별 , URI 계층 구조를 활용 하여 API URL 을 설계해보자

  1. 회원 목록 조회 /members
  2. 회원 조회 /members/{id}
  3. 회원 등록 /members/{id}
  4. 회원 수정 /members/{id}
  5. 회원 삭제 /members/{id}

참고 : 계층구조상 members개인({id})을 포괄하는 상위개념으로 본다.

 

그런데 가만보면 문제가 발생한다. /members/{id} 리소스는 식별하지만 도대체 뭐가 조회인지 뭐가 등록인지 삭제인지 알길이 없다. 어떻게 구분할것인가?

 

리소스와 행위를 분리하라!

 

어찌되었든간에 리소스를 식별하는것이다. URI 는 리소스만 식별해!

리소스는 회원이고 , 행위는 조회 등록 삭제 변경

이제 이 행위를 어떻게 구분해줄것이냐? 가 문제로다.

 

HTTP method

HTTP메서드는 바로 행위의 역할을 해준다. URI가 '회원'이라는 리소스를 식별해놓으면 HTTP메서드가 조회,삭제,수정,등록을 해준다는것이다.

HTTP 주요 메서드

  • GET : 리소스 조회
  • POST : 요청 데이터 처리 , 주로 등록에 사용
  • PUT : 리소스를 완전 대체 , 해당 리소스가 없으면 생성 
  • PATCH: 리소스 부분 변경
  • DELETE: 리소스 삭제

GET , POST 는 실제로도 많이 쓰이므로 좀 더 자세히 정리해보면 다음과 같이 정리해볼수있다.

 


PUT의 주의점

 

PATCH 는 PUT과 다르게 부분변경한다.