HTTP 메서드는 클라이언트가 서버에게 요청의 목적이나 종류를 알리는 방법으로 GET, POST, PUT, PATCH, DELETE, HEAD 등 여러가지가 존재한다.
주로 사용되는 메서드는 GET, POST, PUT, PATCH, DELETE 이다.
주로 데이터를 가져오는 용도로 사용한다. (HTML 파일을 서버로부터 받아오기)
새로운 데이터를 생성힐 때 사용한다. (사용자가 양식을 제출할때)
리소스 수정을 요청할 때 사용한다.
전체 수정(없는 경우 새로 생성)은 PUT, 일부 수정하는 경우 PATCH를 사용한다.
리소스 삭제 요청에 사용한다.
HEAD: GET과 유사하지만, 응답에 Body를 포함하지 않는다. 응답 헤더만 반환 (리소스 존재 여부, 메타데이터 확인 용도)
OPTIONS: 서버에서 지원하는 메서드를 확인하기 위해 사용한다.
TRACE: 보낸 요청을 다시 서버로 받아온다. (디버깅 목적)
CONNECT: 웹 서버에 proxy 기능을 요청할 때 사용한다. (목적지 서버로의 연결을 설정하기 위해 사용)
HTTP 상태 코드는 서버가 클라이언트에게 주는 요청에 대한 응답 정보이다.(Http status code + Response Body)
요청을 받았고 처리 중을 나타낸다.
요청이 성공적으로 처리되었음을 나타낸다.
ex)
200 OK: 요청이 성공했고, 응답 본문에 요청한 정보다 포함되어 있다.
201 Created: 요청이 성공했고, 새 리소스가 생성되었다.
204 No Content: DELETE Request와 같이 로직을 성공적으로 처리했음을 알림과 동시에 반환할 데이터가 없을 경우
요청을 완료하기 위해 추가 작업이 필요하다는 것을 나타낸다. 보통 이전 주소로 요청을 하여 새로운 주소로 리다이렉션 해주기 위해 사용되는 코드이다.
ex)
301 Moved Permanently: 요청한 리소스가 새로운 위치로 영구적으로 이동되었다.
302 Found (Moved Temporarily): 요청한 리소스가 임시적으로 새 위치로 이동되었다.
304 Not Modified: 요청한 리소스가 변경되지 않았기 떄문에 브라우저에 캐싱된 데이터를 사용하라는 것을 의미
클라이언트의 요청에 오류가 있음을 나타낸다.
ex)
400 Bad Request: 요청이 잘못되었다.
401 Unauthorized : 해당 정보를 인증할 키가 필요하지만 전달하지 않거나 잘못된 키를 전달한 경우를 의미한다.
403 Forbidden : 인증은 되었지만, 해당 리소스에 접근할 권한이 없는 경우를 의미한다.
404 Not Found: 요청한 리소스를 찾을 수 없다
서버가 유효한 요청을 처리하지 못함을 나타낸다.
ex)
500 Internal Server Error: 서버가 요청을 처리하는 동안 예기치 않은 상황이 발생했다. (DB Connection, 예외 처리 문제 등)
이러한 상태 코드는 클라이언트에게 요청의 성공 또는 실패에 대한 상세한 정보를 제공하여 적절한 조치를 취할 수 있도록 돕는다.
🌟 추가 질문
📍 같은 요청을 계속 보냈을 때, 원래 실패 응답을 받다가 다시 성공할 가능성이 있는 상태코드는? (4xx, 5xx 중 선택)
5xx 코드일 것이다. 서버 장애가 복구되면 같은 요청을 다시 보내도 성공할 수 있다. 재시도의 가능성이 있다고 볼 수 있다.
📍 만약 서블릿에서 doGet 메서드에 POST 로직을 적고, doGet 메서드에 POST 로직을 적는다면 시스템상 문제가 생길까?
HTTP 메서드는 규약이라기보다 권장 사항이라고 볼 수 있다.
HTTP 상태 코드도 마찬가지로 지키지 않는다고 해서 오류가 발생하거나 하진 않는다. 물론 브라우저에서는 응답에 대해 제대로 인식하지 못할 수 있다. 하지만 API 클라이언트라고 했을 때, 서로 기존과 다른 규칙으로 약속을 했다면 전혀 문제가 되지 않을 것이다. (예시로 우린 400번은 성공으로 하자 등등..)
📍 API를 개발하고 관련 정보를 클라이언트나 프론트엔드 개발자에게 전달하는 방식
HTTP method나 요청시 필요한 정보 (GET, POST 전송에 필요한 정보) 등을 정리한 API 명세서를 만들어서 전달할 수 있다.
물론 엑셀이나 파일에 정리해서 보낼 수 있지만, 이런 문서를 만들어주는 라이브러리나 툴들도 존재한다.