이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!
✅ HTTP 응답코드 2xx
HTTP 응답코드를 통해 HTTP Request(요청)에 대한 처리의 결과를 확인할 수 있습니다.
HTTP 응답코드는 100~500번대까지 상태 코드가 정의되어 있는데, 그 중 200번대(2XX)는 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 뜻입니다.
200번대 응답코드에서 자주 사용되는 응답코드는 대표적으로 `200(ok)`, `201(created)`가 있습니다.
이들의 차이점이 무엇인지 자세히 알아보는 시간을 가져보도록 합시다.
✅ 200 OK와 201 Created의 차이점
🔥 주로 사용되는 경우
`200 OK`는 일반적으로 요청(Request)을 서버가 처리를 성공적으로 완료했을 때 사용되며, 클라이언트가 요청한 데이터(자원)을 응답이 담아 보내는 경우가 있습니다. 요청에 대해 성공적으로 처리를 했을 때 제일 보편적으로 사용되는 응답 코드입니다.
`201 Created`는 요청(Request)을 서버에서 처리를 성공적으로 완료했으며, 새로운 resource가 성공적으로 생성이 되었을 때 사용됩니다. 응답은 일반적으로 resource가 새롭게 생성된 위치를 포함하고 있습니다.
이 둘의 차이점은 `200`은 이미 존재하는 resource에 대한 요청을 성공적으로 처리했을 때 주로 사용되며, `201`은 새로운 resource를 생성하는데에 성공했을 때 사용됩니다.
`200`은 제일 보편적으로 사용되는 성공 응답 코드이기 때문에, 요청받은 HTTP method의 종류에 구애받지 않고 사용되는 경우가 많습니다.
반면 `201`은 RESTful API의 관점에서 주로 새로운 entity가 생성되는`POST 요청`에 대한 응답 코드로 많이 사용됩니다.
🔥 HTTP Response Headers: `Location`
201 Created 응답 코드는 주로 "새로운 resource를 성공적으로 생성했을 때" 주로 사용된다고 이야기 했습니다.
이에 따라 201 Created 응답 코드를 갖는 HTTP Response에 `Location`이라는 헤더를 추가적으로 설정할 수 있습니다.
`Location` 헤더에 어떤 값이 들어가는 것일가요?
`Location` 헤더는 이름에서 알 수 있듯이, "새롭게 생성한 resource에 접근할 수 있는 URI"를 담습니다.
예를 들어 설명해보겠습니다.
사용자(users)를 관리하는 REST API endpoint가 `http://example.com/users`라고 가정해보겠습니다.
이 때, HTTP body에 사용자 가입에 필요한 정보를 담아, 사용자 가입을 요청하는 API (POST /users/) 요청을 보냈습니다.
POST /users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"firstName": "Brian",
"lastName": "Smith",
"email": "brian.smith@example.com"
}
서버측에서 사용자 가입(생성)이 완료되었다면, `201 Created` 응답의 헤더에 `Location` 값을 통해 새롭게 생성된 Resource에 접근할 수 있는 URI를 반환할 수 있습니다.
`Location` 헤더에 들어가는 값은 서버 개발자가 Resource에 접근하기 위한 URI 값을 직접 지정합니다.
✅ 참고 자료 & 링크
- [웹 프로그래밍] HTTP 상태 코드 표 전체 요약
- What is the difference between the 200 and 201 HTTP status code in Spring boot
- Handling HTTP Status codes in a REST API (200 OK vs. 201 Created)
- ResponseEntity의 created(URI)는 뭘까?