🔍 HTTP 메소드란?
클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식
즉, 서버가 수행해야 할 동작을 지정하는 요청을 보내는 방법이다.
HTTP 메소드의 종류는 총 9가지가 있다.
주요 메서드
주요 메서드 | 설명 |
---|
GET | 리소스 조회 |
POST | 리소스 등록(생성)에 사용 |
PUT | 리소스를 대체, 수정 혹은 해당 리소스가 없다면 새롭게 생성(등록) |
PATCH | 리소스 부분 변경(수정)(cf. PUT 전체 변경) |
DELETE | 리소스 삭제 |
기타 메서드
기타 메서드 | 설명 |
---|
HEAD | GET 방식과 비슷, 메시지 부분(body 부분)을 제외하고, 상태 줄과 헤더만 반환 |
OPTIONS | 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에서 사용) |
CONNECT | 대상 자원으로 식별되는 서버에 대한 터널을 설정 |
TRACE | 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행 |
🔍 메서드 자세히 알아보기
💡 HTTP 메서드 - GET
- 리소스 조회 메서드 (Read)
- 서버에 전달하고 싶은 데이터는 쿼리 스트링을 통해서 전달한다.
- 메시지 바디를 사용해서 데이터를 전달할 수는 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
- 멱등성을 가지고 있어, 여러번 조회 요청하여도 리소스는 변하지 않는다.
- 조회할 때 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 존재 | 안전 | 멱등성 | 캐시가능 |
---|
GET | NO | YES | YES | YES | YES |
POST | YES | YES | NO | NO | YES |
PUT | YES | YES | NO | YES | NO |
PATCH | YES | YES | NO | NO | YES |
DELETE | NO | YES | NO | YES | NO |
HEAD | NO | NO | YES | YES | YES |
OPTIONS | 선택사항 | YES | YES | YES | NO |
CONNECT | YES | YES | NO | NO | NO |
TRACE | NO | YES | YES | YES | NO |
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 정도만 캐시하여 사용