Method(메서드)
HTTP 메서드는 클라이언트가 서버에게 요청의 목적과 종류를 알리기 위해 사용하는 규약이다.
메서드의 주요 속성
HTTP 메서드를 이해할 때 가장 중요한 두 가지 속성은 안전성(Safety)과 멱등성(Idempotency)이다.
안전성(Safety)
서버의 리소스 상태를 변경시키지 않는 성질이다.
해당 메서드를 계속 호출해도 서버의 데이터는 변하지 않음
읽기 전용 작업에 주로 해당
대상: GET, HEAD, OPTIONS, TRACE
멱등성(Idempotency)
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 서버에 미치는 영향이 동일한 성질이다.
네트워크 에러 등으로 응답을 못 받았을 때, 안전하게 재요청을 할 수 있는 근거가 됨
대상: GET, HEAD, OPTIONS, TRACE, PUT, DELETE
비대상: POST (호출할 때마다 새로운 리소스가 생성되거나 상태가 변함)
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)을 통해 전달
캐싱이 가능하여 성능 최적화에 유리
브라우저 히스토리에 남고 북마크 가능
HEAD
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?