Method(메서드)

HTTP 메서드는 클라이언트가 서버에게 요청의 목적과 종류를 알리기 위해 사용하는 규약이다.

메서드의 주요 속성

HTTP 메서드를 이해할 때 가장 중요한 두 가지 속성은 안전성(Safety)과 멱등성(Idempotency)이다.

안전성(Safety)

서버의 리소스 상태를 변경시키지 않는 성질이다.

  • 해당 메서드를 계속 호출해도 서버의 데이터는 변하지 않음

  • 읽기 전용 작업에 주로 해당

  • 대상: GET, HEAD, OPTIONS, TRACE

멱등성(Idempotency)

동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 서버에 미치는 영향이 동일한 성질이다.

  • 네트워크 에러 등으로 응답을 못 받았을 때, 안전하게 재요청을 할 수 있는 근거가 됨

  • 대상: GET, HEAD, OPTIONS, TRACE, PUT, DELETE

  • 비대상: POST (호출할 때마다 새로운 리소스가 생성되거나 상태가 변함)

메서드
안전성(Safe)
멱등성(Idempotent)
바디(Body) 유무

GET

O

O

X (권장 안 함)

HEAD

O

O

X

POST

X

X

O

PUT

X

O

O

PATCH

X

X (일반적으로)

O

DELETE

X

O

X (권장 안 함)

주요 메서드 종류

GET

리소스를 조회하기 위해 사용한다.

  • 서버에 전달할 데이터는 쿼리 스트링(Query String)을 통해 전달

  • 캐싱이 가능하여 성능 최적화에 유리

  • 브라우저 히스토리에 남고 북마크 가능

GET과 동일하지만 응답 본문(Body)을 제외하고 헤더(Header)만 반환한다.

  • 무거운 리소스를 다운로드하기 전에 용량(Content-Length) 확인

  • 리소스의 존재 여부 확인(200 OK vs 404 Not Found)

  • 리소스의 변경 여부 확인(Last-Modified, ETag)

PUT

리소스를 대체(Replace)하거나, 없으면 생성(Create)할 때 사용한다.

  • 클라이언트가 리소스의 전체 위치를 알고 있을 때 사용(예: /users/1)

  • 덮어쓰기: 기존 리소스가 있다면 완전히 대체(일부분만 수정하는 것이 아님)

  • 멱등성 보장: 같은 데이터로 100번 덮어써도 최종 상태는 같음

PATCH

리소스를 부분적으로 수정(Partial Update)할 때 사용한다.

  • PUT과의 차이점: PUT은 전체 교체, PATCH는 일부 필드만 변경

  • 멱등성을 보장하도록 설계할 수도 있으나, 기본적으로는 멱등하지 않음(예: age + 1 같은 연산은 호출 횟수만큼 값이 변함)

  • HTTP 표준 메서드는 아니었으나 현재는 사실상 표준으로 사용

POST

서버로 데이터를 전송하여 새로운 리소스를 생성하거나 처리를 요청할 때 사용한다.

  • 주로 신규 리소스 등록(Create)에 사용

  • 데이터는 메시지 바디에 담겨 전송되므로 길이 제한이 없음

  • 멱등하지 않으므로, 요청 시마다 새로운 리소스가 생기거나 상태가 변함(예: 결제 요청을 두 번 보내면 중복 결제 발생 가능)

TRACE

요청이 서버에 도달하기까지의 경로를 진단(Loopback Test)하기 위해 사용한다.

  • TRACE 요청을 받은 목적지 서버에서 루프백(loopback) 진단을 시작하여 자신이 받은 요청 메시지를 본문에 넣어 TRACE 응답으로 되돌려줌

  • 서버는 요청받은 메시지 전체를 응답 바디에 그대로 담아 반환(message/http 타입)

  • 보안 취약점 (XST - Cross-Site Tracing): 클라이언트의 쿠키나 인증 헤더가 응답 바디에 그대로 노출되므로, XSS 공격과 결합하여 세션 탈취에 악용될 수 있음

  • 최신 브라우저와 서버는 보안상의 이유로 대부분 비활성화되어 있음

    • 요청 메시지에 쿠키나 인증 정보가 포함될 수 있어 민감한 정보가 노출될 위험 존재

OPTIONS

대상 리소스에 대해 통신 가능한 옵션(메서드)을 확인하기 위해 사용한다.

  • CORS(Cross-Origin Resource Sharing) Preflight: 브라우저가 실제 요청(POST, PUT 등)을 보내기 전에 안전한 요청인지 확인하기 위해 예비 요청으로 사용

  • 서버는 Allow 헤더에 지원하는 메서드를 담아 응답

DELETE

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

  • 멱등성 보장: 이미 삭제된 리소스를 다시 삭제 요청해도 서버 상태는 '삭제된 상태'로 동일(응답 코드는 200에서 404로 바뀔 수 있지만 서버 상태는 변하지 않음)

그 외 확장 메서드

HTTP는 확장 가능한 프로토콜로 설계되어 있어 필요에 따라 새로운 메서드를 만들어 사용할 수는 있다.

참고자료

Last updated

Was this helpful?