[기술면접] 백엔드 기술 면접 질문 - HTTP METHOD(GET, POST, PUT, DELETE, PATCH), 멱등성

송진영·2022년 10월 4일
1

기술면접

목록 보기
2/24

HTTP METHOD

HTTP METHOD에는 GET, POST, PUT, DELETE, PATCH등이 있다.

  • GET(조회): 서버로부터 데이터를 취득
  • POST(등록): 서버에 데이터를 추가, 작성
  • PUT(수정): 서버의 데이터를 갱신, 작성
  • PATCH(수정): 리소스의 일부분을 수정
  • DELETE(삭제): 서버의 데이터를 삭제

멱등성

멱등성(Idempotent): 수학이나 전산학에서 여러 번 사용해도 결과가 달라지지 않는 성질을 뜻하는 말.

HTTP METHOD에 이를 적용시키면 동일한 요청을 한 번 보내는 것과 여러 번 보내는 것이 같은 효과를 가지고, 해당 서버의 상태도 동일하게 남을 때 HTTP METHOD가 멱등성을 가진다고 표현한다.

중요한 것은 응답 상태코드가 아닌 서버의 상태만 변하지 않는다면 멱등성이 있다고 판단한다는 것이다.

  • 멱등성을 지니는 METHOD: GET, HEAD, PUT, DELETE
  • 멱등성을 지니지 않는 METHOD: POST, PATCH

1. GET

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

  • HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다.
  • GET 요청은 멱등성을 지닌다.
  • 데이터를 변경하는 연산에 사용하면 안된다.
  • GET 요청은 캐싱이 가능하여 같은 데이터를 한 번 더 조회할 경우 저장한 값을 이용하여 POST보다 더 빠르게 조회할 수 있다.

Ex)

Get /post/1 - > 1 번 게시물을 확인한다.
Get /post/1 - > 1 번 게시물을 확인한다.
Get /post/1 - > 1 번 게시물을 확인한다.

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

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

위와 같이 GET을 여러 번 사용해도 서버의 상태는 동일하기 때문에 멱등성을 지닌다.

2. POST

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

  • POST 요청을 멱등성을 지니지 않는다.
  • GET과의 차이점
    • GET과 비교하여 URL에 데이터의 정보가 들어 있지 않으므로, 조금 더 안전하다고 볼 수 있다.

Ex)

POST /post
body : {title : "example",
content : "hi"}
content-Type : "application/json"
-> example 게시물 생성.

POST /post
body : {title : "example"
, content : "hi"}
content-Type : "application/json"
-> example 게시물 생성.

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

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

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

위와 같이 POST를 여러 번 사용하면 게시글이 계속 추가 되며 서버의 상태가 동일하지 않게 되어 멱등성을 지닐 수 없다.

3. PUT

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

  • 리소스가 있으면 대체, 리소스가 없으면 생성. 즉, 덮어버린다는 말
  • 모든 리소스를 전달해야 한다.(일부만 전달할 경우, 전달한 필드 외 모두 null or 초기값 처리되니 주의하여야 한다.)
  • POST와의 차이점
    • 클라이언트가 리소스 위치를 알고 URI를 지정하기 때문에 POST와 다르게 계속 생성되지 않는다.
  • PUT 요청은 멱등성을 지녀야 한다.
  • 동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성된다.

Ex)

PUT /post/1
body: {title : "update example",
content : "hello"}
Content-Type : "applcation/json"
-> title이 update example이 되고, content가 hello가 됨.

PUT /post/1
body: {title : "update example"}
Content-Type : "applcation/json"
-> title이 update example이 되고, content가 hello가 됨.

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

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

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

위와 같이 PUT을 여러 번 사용해도 title이 update example로 동일하기 때문에 서버의 상태가 동일하여 멱등성을 지닌다.

4. DELETE

정의: DELETE 메소드는 지정된 리소스를 삭제한다.

Ex)

DELETE /post/1
-> 게시글 삭제
DELETE /post/1
-> 이미 삭제되어 있음.

데이터를 삭제하는 것이기 때문에 요청시에 Body 값과 Content-Type 값이 비워져 있다.

URL을 통해서 어떠한 데이터를 삭제할지 파라미터를 받는다.

데이터 삭제에 성공한다면 Body 값 없이 성공 응답만 보내게 된다.

위와 같이 DELETE를 여러 번 사용해도 게시글을 삭제된 상태로 동일하기 때문에 멱등성을 지닌다.

5. PATCH

정의: PATCH 메소드는 지정된 리소스를 부분 변경한다.

  • 수정하고자 하는 일부 리소스만 전달해도 된다.
  • PATCH는 HTTP 스펙상 구현 방법에 제한이 없다.
  • PUT과의 차이점
    • PUT은 데이터 전체를 수정하지만, PATCH는 일부 데이터만 수정한다.
  • PUT과 동일한 방식으로 사용할 경우 멱등성을 지닐 수 있다. 즉, 설계 방식에 따라 멱등성을 지닐 수도, 지니지 않을 수도 있다.

Ex)

PATCH /user/1
{
$increase : 'age',
value : 1
}
-> 나이가 1 증가한다.

PATCH /user/1
{
$increase : 'age',
value : 1
]
-> 나이가 1 증가한다.

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

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

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

PATCH는 HTTP 스펙상 구현 방법에 제한이 없다. 따라서, 위와 같이 구현하여도 상관이 없으므로, 위와 같이 PATCH를 여러 번 사용할 경우 age가 1씩 계속 증가하므로, 서버의 상태가 달라져 멱등성을 지닐 수 없다.

profile
못하는 건 없다. 단지 그만큼 노력을 안 할 뿐이다.

0개의 댓글