HTTP 메서드 종류, 속성 간단 정리

HTTP 메서드

API 만드는 과정

(1) 요구사항 확인

(2) API URI 설계

(3) 리소스와 행위를 분리

 

가장 중요한 건 리소스를 식별하는 것이다.

요구사항이 '회원 정보 관리 API를 만들기' 라면, '회원 등록하기'에서의 리소스는 '등록'이 아닌 '회원'이라는 것!

행위 조회, 등록, 삭제, 변경  (GET, POST, PUT, PATCH, DELETE)

 

HTTP 메서드 종류

GET : 리소스 조회

POST : 요청 데이터 처리, 주로 등록에 사용

PUT : 리소스를 대체, 해당 리소스가 없으면 생성

PATCH : 리소스 부분 변경

DELETE : 리소스 삭제

아래는 안쓰는 메서드

HEAD : GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환

OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)

CONNECT : 대상 리소스로 식별되는 서버에 대한 터널을 설정

TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

 

GET

- 리소스 조회
- 서버에 전달하고 싶은 데이터는 query를 통해서 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음!

 

POST

- 요청 데이터 처리

- 메시지 바디를 통해 서버로 요청 데이터 전달

- 서버는 요청 데이터를 처리 (메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행)
- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용

- POST 메서드는 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청

쉽게 말해서 POST 요청을 어떻게 처리할지는 따로 정해야한다.

 

(1) 주로 새 리소스 생성할 때 (등록)

(2) 요청 데이터 처리할 때

단순히 데이터를 생성 or 변경이 아니라 어떠한 프로세스를 추가적으로 처리해야할 때
예를 들면 .. 결제완료 → 배달시작 → 배달완료 처럼 값 변경 뿐만아니라 상태가 변경되는 경우
즉, POST의 결과로 새로운 리소스가 생성되지 않을 수 있음 (컨트롤URI)

(3) 다른 메서드(겟, 풋, 패치 등)로 처리하기 애매할 때

 

PUT

- 리소스를 완.전.히 대체해버림 (있으면 대체, 없으면 생성)
- 클라이언트가 리소스를 식별함 (PUT /members/100)
주의! 나이만 변경하려고 나이만 보냈더니 기존걸 지우고 나이만 남음.. 완전히 대체해버려서

 

PATCH

- 리소스 부분 변경

- 아주 일부 PATCH가 안되는 경우가 있을 땐 POST를 쓰면 된다.

 

DELETE

- 리소스 제거


HTTP 메서드의 속성

(1) 안전(Safe Methods)

- 호출해도 리소스를 변경하지 않는다.

- GET, HEAD

 

(2) 멱등(Idempotent Methods)

- 한 번 호출하든 백 번 호출하든 결과가 똑같다.

- GET, PUT, DELETE

- POST는 멱등이 아니다! (두 번 호출하면 두 번 결제될 수 있음)

- 서버가 정상 응답을 못했을 때, 클라이언트가 같은 요청을 다시해도 되는가가 판단 근거


(3) 캐시가능(Cacheable Methods)

- 응답 결과 리소스를 캐시해서 사용해도 되는가?

- GET, HEAD, POST, PATCH 캐시 가능

- 하지만 실제로는 GET, HEAD 정도만 캐시 사용

(POST, PATCH는 본문 내용까지 캐시 키로 고려해야하는데 어려움)


HTTP 메서드 활용

클라이언트에서 서버로 데이터 전달 방식

(1) 쿼리 파라미터

- GET

- 주로 정렬 필터(검색어)

 

(2) 메시지 바디

- POST, PUT, PATCH

- 회원 가입, 상품 주문, 리소스 등록, 리소스 변경 등

 

클라이언트에서 서버로 데이터 전송 4가지 상황

1. 정적 데이터 조회

- 이미지, 정적 텍스트 문서 조회할 때

- GET사용

- 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회

 

2. 동적 데이터 조회

- 주로 검색, 게시판 목록에서 정렬 필터(검색어)

- 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용

- 조회는 GET 사용

- GET은 쿼리 파라미터를 사용해서 데이터 전달 (메세지 바디 방법은 권장안함)

 

3. HTML Form을 통한 데이터 전송

- HTML Form 전송은 GET, POST만 지원

- HTML Form submit시 POST 전송

회원 가입, 상품 주문, 데이터 변경

- HTML Form 은 GET 전송도 가능 (조회하는 용도로만!)

- Content-Type:application/x-www-form-urlencoded 사용

form의 내용을 메시지 바디를 통해서 전송 (키밸류, 쿼리파라미터 형식)
전송 데이터를 url encoding 처리 (abc김 → abc%EA$B9%80)

- Content-Type: multipart/form-data

파일 업로드 같은 바이너리 데이터 전송시 사용

다른 종류의 여러 파일과 폼의 내용 함께 전송 가능 (그래서 멀티파트)

 

(1) form 으로 POST 전송 (저장하기)

<form action='/save' method='post'>
    <input type='text' name='username' />
    <input type='text' name='age' />
    <button type='submit'>저장하기</button>
</form>

▼ 웹 브라우저가 생성한 요청 HTTP메시지

POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www.form-urlencoded&age=20

username=kim


(2) form 으로 GET 전송 (조회하기)

<form action='/save' method='get'>
    <input type='text' name='username' />
    <input type='text' name='age' />
    <button type='submit'>조회하기</button>
</form>

  웹 브라우저가 생성한 요청 HTTP메시지

GET /members?username=kim&age=20 HTTP/1.1
Host: localhost:8080


(3) multipart/form-data

<form action='/save' method='post' enctype='multipart/form-data'>
    <input type='text' name='username' />
    <input type='text' name='age' />
    <input type='file' name='file1' />
    <button type='submit'>조회하기</button>
</form>

  웹 브라우저가 생성한 요청 HTTP메시지

POST /save HTTP/1.1
Host: localhost:8080
Content-Type: multipart/form-data; boundary=-----XXX
Content-Length: 10457
------XXX
Content-Disposition: form-data; name='username'

kim
------XXX
Content-Disposition: form-data; name='age'

20
------XXX
Content-Disposition: form-data; name='file1'; filename='intro.png'
Content-Type: image/png

109238a9szfdzsfdsszfzfsd....
------XXX

 

4. HTTP API를 통한 데이터 전송

- 백엔드끼리 시스템 통신할 때 주로 사용 ( 서버 to 서버 )

- 앱 클라이언트에서 전송할때 주로 사용

- 웹 클라이언트

HTML에서 Form 전송 대신 자바스크립트를 통한 통신에 사용 (AJAX)

React, Vue 같은 웹 클라이언트와 API통신

- POST, PUT, PATCH : 메시지 바디를 통해 데이터 전송

- GET : 조회, 쿼리 파라미터로 데이터 전달

- Content-Type: application/json을 주로 사용 (거의 표준)

TEXT, XML, JSON 등 있음


참고 강의 : https://taylog.tistory.com/203

 

[강의리뷰] “모든 개발자를 위한 HTTP 웹 기본 지식” 후기 | 인프런

모든 개발자를 위한 HTTP 웹 기본 지식김영한님의 실무에 필요한 HTTP 핵심 기능에 대한 강의다. 강의의 총 길이는 5시간 40분, 강의 구성은 아래와 같다.인터넷 네트워크URI와 웹 브라우저 요청 흐

taylog.tistory.com

 

'🧠 저장 > Http' 카테고리의 다른 글

HTTP 상태코드 간단 정리  (0) 2024.02.20
HTTP API 설계 개념 간단 정리  (0) 2024.02.17
HTTP 특징, 구조 간단 정리  (0) 2024.02.11
웹 브라우저 요청 흐름 간단 정리  (0) 2024.02.08
IP, TCP, UDP, URI 간단 정리  (0) 2024.02.05