[네트워크] HTTP 메소드

유선·2024년 4월 23일
0

CS

목록 보기
17/25
post-thumbnail

🔍 HTTP 메소드란?

클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식
즉, 서버가 수행해야 할 동작을 지정하는 요청을 보내는 방법이다.

HTTP 메소드의 종류는 총 9가지가 있다.

주요 메서드

주요 메서드설명
GET리소스 조회
POST리소스 등록(생성)에 사용
PUT리소스를 대체, 수정 혹은 해당 리소스가 없다면 새롭게 생성(등록)
PATCH리소스 부분 변경(수정)(cf. PUT 전체 변경)
DELETE리소스 삭제

기타 메서드

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

🔍 메서드 자세히 알아보기

💡 HTTP 메서드 - GET

  • 리소스 조회 메서드 (Read)
  • 서버에 전달하고 싶은 데이터는 쿼리 스트링을 통해서 전달한다.
    • GET /adder?num1=1&num2=2
  • 메시지 바디를 사용해서 데이터를 전달할 수는 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
  • 멱등성을 가지고 있어, 여러번 조회 요청하여도 리소스는 변하지 않는다.
  • 조회할 때 POST도 사용할 수 있지만, GET 메서드는 캐싱이 가능하기에 GET을 사용하는 것이 유리하다.

💡 HTTP 메서드 - POST

  • 요청 데이터를 처리하는 메서드(Create)
  • 메시지 바디(body)를 통해 서버로 요청 데이터 전달하면 서버는 요청 데이터를 처리하여 응답
  • 메세지 바디에 쿼리 파라미터 형식으로 전달
  • 쿼리 파라미터는 key - value 형식
  • 주로 신규 리소스 등록, 프로세스 처리에 사용
  • GET 메서드를 사용하는데, JSON으로 조회 데이터를 넘겨야하는 경우에는 POST를 사용
  • 성공시, 201 (Created) HTTP 응답을 반환

💡 HTTP 메서드 - PUT

  • 리소스를 대체(수정)하는 메서드 (Update)
  • 만약, 요청 메세지에 리소스가 있으면 덮어쓰고, 없으면 새로 생성한다.
  • POST와의 차이점으로, 클라이언트가 리소스의 구체적인 전체 경로를 지정해 보내주어야 한다.
    • POST /members: 멤버 추가
    • PUT /members/100: 100번째 멤버 수정
  • 멱등성을 가지고 있다.

💡 HTTP 메서드 - PATCH

  • 리소스 일부 부분을 변경하는 메소드 (Update)
  • 만약, PATCH를 지원하지 않는 서버에서는 대신에 POST를 사용할 수 있다.
  • 멱등성을 가지고 있지 않다.

💡 HTTP 메서드 - DELETE

  • 리소스 제거하는 메소드 (Delete)
  • 멱등성을 가진다.

💡 HTTP 메서드 - HEAD

  • GET과 동일하지만 서버에서 Body를 Return 하지 않음
  • 응답의 상태 코드만 확인할때와 같이 Resource를 받지 않고 오직 찾기만 원할때 사용 (일종의 검사 용도)
  • 서버의 응답 헤더를 봄으로써 Resource가 수정 되었는지 확인 가능

💡 HTTP 메서드 - TRACE

  • 일종의 검사용 메소드
  • 서버에 도달 했을 때의 최종 패킷의 요청 패킷 내용을 응답 받을 수 있다.
  • 요청의 최종 수신자는 반드시 송신자에게 200(OK) 응답의 내용(Body)로 수신한 메세지를 반송해야 한다.
  • 최초 Client의 요청에는 Body가 포함될수 없다.

💡 HTTP 메서드 - OPTION

  • 예비 요청(Preflight)에 사용되는 HTTP 메소드
  • 예비 요청이란 본 요청을 하기 전에 안전한지 미리 검사하는 것
  • 서버의 지원 가능한 HTTP 메서드와 출처를 응답 받아 CORS 정책을 검사하기 위한 요청이다.

🔍 HTTP 메서드 속성

메소드요청 body 존재응답 body 존재안전멱등성캐시가능
GETNOYESYESYESYES
POSTYESYESNONOYES
PUTYESYESNOYESNO
PATCHYESYESNONOYES
DELETENOYESNOYESNO
HEADNONOYESYESYES
OPTIONS선택사항YESYESYESNO
CONNECTYESYESNONONO
TRACENOYESYESYESNO

1️⃣ Safe(안전)

  • Safe한 메서드는 "호출해도 리소스를 변경하지 않는다"는 특징을 가진다.
  • GET, HEAD, OPTIONS, TRACE 메서드는 호출하더라도 리소스를 변경하지 않기 때문에 안전한 리소스이다.

2️⃣ Idempotent(멱등)

  • 한 번 호출하든 여러번을 호출하든 결과가 똑같은 메서드가 멱등성을 가진다.
  • GET: 한 번 조회하든, 여러번 조회하든 같은 결과가 조회.
  • PUT: 결과를 대체하므로 같은 요청을 여러번 해도 최종 결과는 똑같다.
  • DELETE: 결과를 삭제. 같은 요청을 여러번 해도 삭제된 결과는 똑같다.
  • POST: 두 번 호출하면 같은 결제가 중복해서 발생할 수 있다. (멱등 X)
  • PATCH: 구현 방법에 따라서 PUT 메소드처럼 멱등성이 보장될 수도 있고, 혹은 보장되지 않을 수도 있다.

3️⃣ Cacheable(캐시가능)

  • 응답 결과를 서버에 캐싱해서 사용해도 되는 메소드를 의미
  • GET, HEAD, POST, PATCH가 캐시 가능하지만 POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하기 때문에 구현이 쉽지 않다.
  • 그러므로, 실제로는 GET, HEAD 정도만 캐시하여 사용
profile
Sunny Day!

0개의 댓글