[HTTP] 5 METHOD(GET, POST, PUT/PATCH/DELETE)

SANG JONG CHOI·2022년 12월 1일
0

먼저, REST란?

Representational State Transfer의 약자이며, 다음과 같이 구성되어 있다.

  • 자원(Resource): URI
  • 행위(Verb): HTTP Method
  • 표현(Representations)

즉 REST는 URI를 통해 자원을 표시하고, HTTP Method를 이용하여 해당 자원의 행위를 규정하여 그 결과를 받는 것을 말한다.

HTTP Method는 크게 GET, POST, PUT, DELETE가 대표적이며,

보통 CRUD에서 조회는 GET, 등록은 POST, 수정은 PUT, 삭제는 DELETE를 이용한다.

GET과 DELETE는 비교적 그 행위가 명확하지만, POST와 PUT을 구분하기 위해서는 멱등성의 개념을 알아야 한다.

💡 멱등성(Idempotence)이란?

멱등성이란 여러번 수행해도 결과가 같음을 의미한다.

HTTP 메소드를 예를 들자면, GET, PUT, DELETE는 같은 경로로 여러 번 호출해도 결과가 같다.

그러나 POST는 매 호출마다 새로운 데이터가 추가된다.

따라서, POST 연산은 결과가 Idempotent하지 않지만, PUT은 반복 수행해도 그 결과가

Idempotent 하다.

주요 HTTP 메서드 5가지

HTTP는 다양한 메서드를 정의하고 있다.

자주 사용되는 주요 HTTP 메서드 5개를 살펴보자.

GET: 리소스 조회
(최근에는 Representation이라는 이름을 많이 사용한다.)
POST: 요청 데이터 처리, 주로 등록에 사용
PUT: 리소스를 대체, 해당 리소스가 없으면 생성
PATCH: 리소스 부분 변경
DELETE: 리소스 삭제

기타 메서드

HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
OPTIONS: 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)
CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

1. GET

정의

GET 메소드는 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드이다. 만약에 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다. 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생한다.

HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다.
GET 요청은 idempotent 하다.
같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다.
데이터를 변경하는 연산에 사용하면 안된다.

데이터를 조회하는 것이기 때문에 요청시에 Body 값과 Content-Type 가 비워져있다.
조회할 데이터에 대한 정보는 URL을 통해서 파라미터를 받고 있는 모습을 볼 수 있다.

데이터 조회에 성공한다면 Body 값에 데이터 값을 저장하여 성공 응답을 보낸다.

GET은 캐싱이 가능하여 같은 데이터를 한번 더 조회할 경우에 저장한 값을 사용하여 조회 속도가 빨라진다.

GET에 자주 쓰이는 어노테이션

2. POST

정의

POST 메소드는 주로 새로운 리소스를 생성(create)할 때 사용된다. 조금 더 구체적으로 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다. 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환한다.

POST 요청은 idempotent 하지 않다.
같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다
두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높다.

데이터를 생성하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다.
해당 예시는 JSON을 통해서 작성된 예시이다.

URL을 통해서 데이터를 받지 않고, Body 값을 통해서 받는다.

데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.

POST에 자주 쓰이는 어노테이션

3. PUT

정의

PUT 메서드는 리소스 전체를 대체한다.

기존 리소스가 없을 경우 새로 생성한다. 즉, 덮어쓰기를 수행한다고 볼 수 있다.

동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성된다.

PUT 요청은 idempotent 하다.

POST와 차이점은 클라이언트가 리소스의 위치를 알고 URI를 명시해야 한다는 점이다.

PUT는 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용한다.

리소스가 이미 존재하는 경우, 기존 데이터를 대체한다.

리소스가 없는 경우, 새로운 데이터를 생성한다.

주의할 점은 리소스를 완전히 대체한다는 것이다. 부분적인 수정이 불가능하다.

데이터를 수정하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다.

URL을 통해서 어떠한 데이터를 수정할지 파라미터를 받는으며 수정할 데이터 값을 Body 값을 통해서 받는다.

데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.

PUT에 자주 쓰이는 어노테이션

4.PATCH

PATCH 메서드는 리소스를 부분 변경한다.
부분 변경이 필요한 상황에서 PATCH를 사용할 수 없다면 POST를 사용한다.

5. DELETE

정의

DELETE 메서드는 지정된 리소스를 삭제합니다.


데이터를 삭제하는 것이기 때문에 요청시에 Body 값과 Content-Type 값이 비워져있다.
URL을 통해서 어떠한 데이터를 삭제할지 파라미터를 받는다.
데이터 삭제에 성공한다면 Body 값 없이 성공 응답만 보내게 된다.

DELETE에 자주 쓰이는 어노테이션

[출처] :
https://velog.io/@woply/HTTP-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C-5%EA%B0%80%EC%A7%80-%EC%A0%95%EB%A6%ACGET-POST-PUT-PATCH-DELETE,
https://velog.io/@yh20studio/CS-Http-Method-%EB%9E%80-GET-POST-PUT-DELETE

profile
No error, No gain

0개의 댓글