HTTP 요청 메서드에 대한 이해
Express.js를 사용할 때, Router()와 함께 사용하는 HTTP 요청 메서드(get, post, put, delete 등)에 대한 개념이 모호하다고 느꼈다.
이러한 메서드는 웹 애플리케이션이 서버와 통신할 때 중요한 역할을 하며, 각 메서드는 특정 작업을 수행하기 위해 사용된다.
이번 글에서는 HTTP 요청 메서드의 의미와 특성에 대해 알아보겠다.
HTTP 요청 메서드
HTTP 요청 메서드는 웹 애플리케이션에서 클라이언트가 서버에 리소스에 대해 수행할 작업을 지시하는 명령어다.
각 메서드는 고유의 특성(안전성, 멱등성, 캐시 가능성)을 가진다.
HTTP 요청 메서드의 특성
안전성(Safe)
안전한 메서드는 서버의 상태를 변경하지 않으며, ‘읽기 전용’ 작업만 수행한다.
하지만 이 메서드가 잠재적 위협이나 부수 효과를 완전히 막는 것은 아니다.
중요한 점은, 클라이언트는 추가적인 동작을 요청하지 않았으며 그에 따른 책임이 없다는 것이다.
멱등성(Idempotent)
멱등성은 서버에 같은 요청을 여러 번 보내더라도 결과가 동일함을 의미한다.
모든 안전한 메서드는 멱등성을 가지며, 이로 인해 클라이언트는 중복된 요청을 보내더라도 서버의 상태가 변하지 않음을 보장받을 수 있다.
캐시 가능성(Cacheable)
캐시 가능한 메서드는 서버의 응답을 저장하고 나중에 다시 사용할 수 있다.
이는 서버에 새로운 요청을 보내지 않고도 동일한 응답을 가져올 수 있도록 하여 성능을 향상시킨다.
GET
GET 메서드는 서버에서 특정 리소스를 요청할 때 사용된다.
주로 데이터를 조회하는 데 사용되며, 서버의 상태를 변경하지 않는다.
- 특징: 리소스를 조회하기 위한 메서드로, 데이터를 변경하지 않음.
- 사용 예: 블로그 게시물 조회, 사용자 프로필 보기, 상품 목록 검색 등.
POST
POST 메서드는 클라이언트가 서버에 데이터를 전송할 때 사용된다.
이는 서버의 상태를 변경하거나 새로운 리소스를 생성할 때 자주 사용된다.
- 특징: 데이터를 서버로 보내어 리소스를 생성하거나 서버의 상태를 변경함.
- 사용 예: 사용자 등록, 상품 주문, 파일 업로드 등.
PUT
PUT 메서드는 서버에 특정 리소스를 생성하거나 기존 리소스를 완전히 대체할 때 사용된다.
멱등성을 가지므로 동일한 요청을 여러 번 보내도 결과는 동일하다.
- 특징: 전체 리소스를 대체하거나 새로 생성하며, 멱등성을 가짐.
- 사용 예: 사용자 프로필 업데이트, 상품 정보 수정 등.
DELETE
DELETE 메서드는 특정 리소스를 삭제하는 데 사용된다.
이 메서드는 서버의 상태를 변경하며, 멱등성을 가진다.
- 특징: 리소스를 삭제하며, 멱등성을 가짐.
- 사용 예: 사용자 계정 삭제, 게시물 삭제 등.
CONNECT
CONNECT 메서드는 클라이언트와 서버 간의 터널을 설정할 때 사용된다.
주로 SSL을 이용한 보안 연결을 설정할 때 사용되며, 요청이 중간 프록시 서버를 통해 전달될 수 있다.
메서드는 중간 프록시 서버가 요청을 전달할 때, 각 서버 간 터널을 연결해준다.
연결이 설정되면 그 이후에는 데이터가 양방향으로 무조건 전달된다.
- 특징: 클라이언트와 서버 간 보안 연결을 위한 터널링을 설정함.
- 사용 예: HTTPS 연결을 설정하는 데 사용됨.
OPTIONS
OPTIONS 메서드는 서버에서 특정 리소스에 대해 허용된 메서드를 확인하는 데 사용된다.
주로 CORS 요청에서 서버가 어떤 메서드를 지원하는지 확인하는데 유용하다.
- 특징: 서버가 허용하는 메서드를 조회하며, 상태를 변경하지 않음.
- 사용 예: CORS 요청 사전 검증, 서버에서 제공하는 메서드 확인.
PATCH
PATCH 메서드는 리소스의 일부분만 수정할 때 사용된다.
PUT과 달리 전체 리소스를 대체하지 않고, 특정 부분만 수정한다.
PATCH는 멱등성을 보장하지 않기 때문에, 동일한 PATCH 요청을 여러 번 보낼 경우 결과가 달라질 수 있다.
- 특징: 리소스의 일부만 수정하며, 멱등성을 가지지 않음.
- 사용 예: 프로필의 특정 필드만 수정, 게시물의 특정 내용만 변경
HTTP 요청 메서드 비교표
메서드 | 안전성 | 멱등성 | 캐시 가능성 | 본문 요청 포함 | 본문 성공 응답 포함 | HTML 폼 사용 가능 |
GET | O | O | O | X | O | O |
HEAD | O | O | O | X | X | O |
POST | X | X | 조건부 | O | O | O |
PUT | X | O | X | O | X | X |
DELETE | X | O | X | 선택 사항 | 선택 사항 | X |
CONNECT | X | X | X | X | X | X |
OPTIONS | O | O | X | X | 선택 사항 | X |
TRACE | O | O | X | X | O | X |
PATCH | X | X | 조건부 | O | 선택 사항 | X |
* POST와 PATCH는 응답에 명시적으로 유효성(freshness) 정보와 일치하는 Content-Location 헤더가 포함된 경우 캐시 가능하다.
결론
각 HTTP 요청 메서드는 클라이언트와 서버 간의 다양한 통신 동작을 정의하는 데 중요한 역할을 한다.
메서드의 안전성, 멱등성, 캐시 가능성을 이해하면 웹 애플리케이션을 설계하고 개발할 때 보다 효율적으로 서버와 통신할 수 있다.
HTTP request methods - HTTP | MDN
HTTP defines a set of request methods to indicate the desired action to be performed for a given resource. Although they can also be nouns, these request methods are sometimes referred to as HTTP verbs. Each of them implements a different semantic, but som
developer.mozilla.org
RFC9110
HTTP Semantics
httpwg.org
RFC9110
HTTP Semantics
httpwg.org
RFC 9111: HTTP Caching
Applications using HTTP often specify additional forms of caching. For example, Web browsers often have history mechanisms such as "Back" buttons that can be used to redisplay a representation retrieved earlier in a session.¶ Likewise, some Web browsers i
www.rfc-editor.org