[네트워크] | HTTP 메서드

제롬·2022년 4월 26일
0

✅ HTTP 메서드란?

HTTP 메서드는 클라이언트가 웹 서버에게 사용자 요청의 목적이나 종류를 알리는 수단이다. 최초의 HTTP 메서드는 GET메서드밖에 없었지만 이후 다양한 메서드들이 추가되었다.

✅ HTTP 메서드의 종류와 특징

☑️ 주요 메서드 5가지

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

☑️ 기타 메서드 4가지

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

✅ HTTP 메서드 - GET

보통 리소스 조회시 사용하며 서버에 전달하고 싶은 데이터는 쿼리 파라미터를 통해 전달한다. 메시지 바디를 통해 데이터를 전달할 수 있지만, GET 메서드에 메시지 바디를 통한 데이터 전송을 지원하지 않는 서버가 많아 권장되지 않는다.

[GET 메시지]

[GET 리소스 조회1 - 메시지 전달]

  • 클라이언트가 100번 회원 데이터 조회 요청

[GET 리소스 조회2 - 응답 데이터]

  • 서버는 해당하는 데이터를 찾아 응답메시지와 함께 보낸다.

✅ HTTP 메서드 - POST

데이터 요청을 처리하고 메시지 바디를 통해 서버로 요청 데이터를 전달한다. 주로 신규 리소스를 등록하거나 프로세스 처리에 사용된다.

[POST 메시지]

[POST 리소스 등록1 - 메시지 전달]

  • POST 방식으로 데이터를 담아 보낸다.

[POST 리소스 등록2 - 신규 리소스 생성]

  • 서버는 해당 요청이 신규 리소스 생성이라는것을 알고 처리한다.

[POST 리소스 등록3 - 응답 데이터]

  • 신규 자원 생성은 200이나 201 응답코드를 사용한다. 자원이 생성된 경로와 데이터를 함께 보낼수 있다.

✅ POST 요청 데이터 처리 방법과 종류

리소스 URIPOST 요청이 오면 요청 데이터를 어떻게 처리할지 따로 정해진것이 없기 때문에 리소스마다 지정해야한다.

☑️ 새 리소스 생성

  • 서버가 아직 식별하지 않은 리소스 생성

☑️ 요청 데이터 처리

  • 단순히 데이터를 생성하거나 변경하는것을 넘어서 프로세스를 처리해야하는 경우
    예) 결제완료 ➡️ 배달시작 ➡️ 배달완료 처럼 값 변경을 넘어서 프로세스의 상태가 변경되는 경우
  • POST의 결과로 새로운 리소스가 생성되지 않을수도 있음(POST 요청이 프로세스를 처리해 상태를 변경하는 경우)
    예) POST /orders/{orderId}/start-delivery(컨트롤 URI)

☑️ 다른 메서드로 처리가 애매한경우

  • 애매하면 POST 메서드를 사용하자.
    예) JSON으로 조회 데이터를 넘겨야하는데 GET을 사용하기 어려운경우
  • 단, GET은 캐싱이 가능하므로 되도록 조회시 GET을 사용하자.

✅ HTTP 메서드 - PUT

요청한 리소스가 있을경우 대체하고 없을경우 새로 생성한다.

☑️ PUTPOST와 비슷한 역할을 하는데 PUT은 클라이언트가 리소스의 위치를 알고 URI를 지정한다는 차이점이 있다.

  • PUT : /members/100
  • POST : /members/

[PUT 메시지]

[PUT - 리소스가 있는 경우1]

  • 100번 회원에게 리소스를 보내겠다고 요청한다.

[PUT - 리소스가 있는 경우2]

  • 기존에 있던 데이터가 대체된다.

[PUT - 리소스가 없는 경우1]

  • 100번 회원에게 리소스를 보내지만 해당 회원이 존재하지 않는다.

[PUT - 리소스가 없는 경우2]

  • 리소스가 새로 생성된다.

[PUT - 주의! 리소스를 완전히 대체한다1]

  • 부분적으로 리소스를 보낸다.

[PUT - 주의! 리소스를 완전히 대체한다2]

  • 기존의 데이터가 완전히 대체된다.

✅ HTTP 메서드 - PATCH

PUT과 마찬가지로 리소스를 수정할때 사용하지만 PATCH는 리소스를 일부분만 변경할 수 있다.

[PATCH - 메시지]

[PATCH - 리소스 부분변경1]

[PATCH - 리소스 부분변경2]

✅ HTTP 메서드 - DELETE

리소스를 제거할 때 사용한다.

[DELETE - 메시지]

[PATCH - 리소스 제거1]

[PATCH - 리소스 제거1]

✅ HTTP 메서드의 속성

HTTP 메서드의 속성으로는 안전(Safe Methods), 멱등(Idempotent Methods), 캐시가능(Cacheable Methods)이 있다.

[HTTP 메서드 속성 표]

✅ HTTP 메서드의 속성 - 안전(Safe Methods)

메서드를 계속해서 호출해도 리소스가 변경되지 않는다는 의미이다.

☑️ 안전은 해당 리소스 그 자체만 고려한다. 그 외의 부분으로 인해 발생하는 문제는 고려하지 않는다.

✅ HTTP 메서드의 속성 - 멱등(Idempotent Methods)

메소드를 계속해서 호출해도 같은 결과가 나오는것을 의미한다. GET, PUT, DELETE는 멱등하다고 볼 수 있으나 POSTPATCH는 멱등하다고 할 수 없다.

☑️ GET : 몇번을 조회하더라도 같은 결과가 조회된다.

☑️ PUT : 결과를 대체한다. 따라서 같은 요청을 여러번해도 최종 결과는 같다.

☑️ DELETE : 결과를 삭제한다. 같은 요청을 여러번해도 삭제된 결과는 같다.

☑️ POST : 멱등이 아니다

  • 결제를 하는 도중 두번 호출하면 결제가 중복해서 발생할 수 있다.

✅ 멱등(Idempotent Methods)의 활용

☑️ 자동복구 매커니즘
☑️ 서버가 timeout등으로 정상응답을 못해주었을 때, 클라이언트가 같은 요청을 다시 해도 되는지 판단의 근거
☑️ 재요청 중간에 다른곳에서 리소스를 변경하면 재요청 결과가 달라질 수 있지만 멱등은 이렇게 외부요인으로 인해 리소스가 변경되는것까지 고려하지 않는다.

[재요청 사이에 다른곳에서의 요청으로 리소스 변경]

- 사용자1 : GET ➡️ username : A, age:20
- 사용자2 : PUT ➡️ username : A, age:30
- 사용자1 : GET ➡️ username : A, age:30

✅ HTTP 메서드의 속성 - 캐시가능(Cacheable Methods)

캐시가 가능하다는 것은 캐싱을 이용해 데이터를 효율적으로 빠르게 가져올 수 있다는 것을 의미한다.

☑️ GET, HEAD, POST, PATCH가 캐시가능하다.

☑️ 실제로는 GETHEAD 정도만 캐시로 사용된다.

  • POSTPATCH는 본문내용까지 캐시 키로 고려해야하는데 구현이 어렵다.

[Reference]
gparkkii.log
Catsbi's Dlog
김영한 - HTTP 웹 기본지식 강의
Mozilla
kyun2da.dev
개발왕 도던

0개의 댓글