ResponseEntity, HTTP μν μ½λ
π ResponseEntityλ?
ResponseEntity λ HTTP μλ΅μ μ μ΄ν  μ μλλ‘ λμμ£Όλ ν΄λμ€μ΄λ€. μλ΅ body, μν μ½λ, ν€λλ₯Ό μ μ΄ν  μ μλ€. HttpEntity λ₯Ό μμλ°μ ꡬνλμλ€.
@ResponseBody λ μλ΅μ bodyλ§ μ μ΄ν  μ μλ€λ μ μμ μ°¨μ΄κ° μλ€.
π κ΅¬μ± μμ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public ResponseEntity(HttpStatusCode status) {
	this(null, null, status);
}
public ResponseEntity(@Nullable T body, HttpStatusCode status) {
	this(body, null, status);
}
public ResponseEntity(MultiValueMap<String, String> headers, HttpStatusCode status) {
	this(null, headers, status);
}
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatusCode status) {
	this(body, headers, (Object) status);
}
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, int rawStatus) {
	this(body, headers, (Object) rawStatus);
}
private ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, Object status) {
	super(body, headers);
	Assert.notNull(status, "HttpStatusCode must not be null");
	this.status = status;
}
ResponseEntity λ μΈ κ°μ§ μμλ₯Ό ν¬ν¨νκ³  μλ€.
HttpStatusλ β200 OKβ, β404 Not Foundβμ κ°μ HTTP μν μ½λ μ 보λ₯Ό λ΄κ³ μλ€.HttpHeadersλ `Content-typeβκ³Ό κ°μ HTTP ν€λ μ 보λ₯Ό λ΄κ³ μλ€.HttpBodyλ μ€μ  μλ΅ body λ°μ΄ν°λ₯Ό λ΄κ³ μλ€.
π HTTP μν μ½λ
μΌλ¨ μ΄λ€ μ’ λ₯μ HTTP μν μ½λκ° μ‘΄μ¬νλμ§ νμΈν΄λ³΄μ.
ν¬κ² 5κ°μ§ κ·Έλ£Ήμ΄ μ‘΄μ¬νλ€.
- 1xx: νΉμ  μ λ³΄λ₯Ό μ κ³΅ν  λ μ¬μ©νλ€. μμ²μ λ°μμΌλ©° νλ‘μΈμ€λ₯Ό κ³μ μ§νν¨μ μλ―Ένλ€.
- 100 Continue: μλ²κ° μμ²μ 첫 λΆλΆμ λ°κ³ μμ§ μμ μ΄ λλμ§ μμμμ μλ―Ένλ©° λλ¨Έμ§ λΆλΆμ κ³μ 보λ΄λ μ’λ€λ κ²μ μλ―Ένλ€.
 - 101 Switching Protocols: μμ²μ 
Upgradeν€λμ λ°λΌ μλ²κ° νλ‘ν μ½μ λ³κ²½νκ³ μλ μνμ΄λ€. - 102 Processing: μλ²κ° μμ²μ μμ νκ³ , μ²λ¦¬ μ€μ΄μ§λ§ μλ΅μ λ³΄λΌ μ μλ μνμ΄λ€.
 
 - 2xx: μμ²μ΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬λμμμ μλ―Ένλ€.
- 200 OK: μμ²μ΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬λ μνμ΄λ€.
 - 201 Created: μμ²μ΄ μ±κ³΅νμ¬ μλ‘μ΄ λ¦¬μμ€κ° μμ±λ μνμ΄λ€.
 - 202 Accepted: μμ²μ΄ μ μλμμΌλ μμ§ μ²λ¦¬λμ§ μμ μνμ΄λ€.
 - 204 No Content: μμ²μ μ±κ³΅νμΌλ ν΄λΌμ΄μΈνΈμκ² λ³΄λΌ μλ΅ bodyκ° μμμ μλ―Ένλ€.
 - 206 Partial Content: ν΄λΌμ΄μΈνΈκ° 
Rangeν€λλ₯Ό ν΅ν΄ 리μμ€μ μΌλΆλ§ μμ²νμ λ ν΄λΉ μ½ν μΈ κ° μ±κ³΅μ μΌλ‘ μ μ‘λμμμ μλ―Ένλ€. 
 - 3xx: μμ²μ μλ£νκΈ° μν΄ λ¦¬λ€μ΄λ μ
ν΄μΌ ν¨μ μλ―Ένλ€.
- 301 Moved Permanently: μμ²ν 리μμ€μ URIκ° μꡬμ μΌλ‘ λ³κ²½λμμμ μλ―Ένλ€. μλ΅μ 
Locationν€λμ μλ‘μ΄ URIμ ν¬ν¨μν¨λ€. - 302 Found: μμ²ν 리μμ€κ° μΌμμ μΌλ‘ λ€λ₯Έ URIμ μλ μνμ΄λ€.
 - 304 Not Modified: ν΄λΌμ΄μΈνΈλ μΊμλ νμΌμ λ²μ μ΄ λ³κ²½λμλμ§ νμΈνκΈ° μν΄ μλ²μ μ‘°κ±΄λΆ μμ²μ 보λ΄λλ°, ν΄λΉ λ²μ μ΄ λ³κ²½λμ§ μμμμ μλ―Ένλ€.
 - 307 Temporary Redirect: 302μ μ μ¬νλ 리λ€μ΄λ νΈ μ κΈ°μ‘΄ μμ²μ HTTP λ©μλλ₯Ό λ³κ²½νμ§ μκ³ κ·Έλλ‘ μ¬μ©ν΄μΌ ν¨μ μλ―Ένλ€.
 - 308 Permanent Redirect: 301κ³Ό μ μ¬νλ 리λ€μ΄λ νΈ μ κΈ°μ‘΄ μμ²μ HTTP λ©μλλ₯Ό λ³κ²½νμ§ μκ³ κ·Έλλ‘ μ¬μ©ν΄μΌ ν¨μ μλ―Ένλ€.
 
 - 301 Moved Permanently: μμ²ν 리μμ€μ URIκ° μꡬμ μΌλ‘ λ³κ²½λμμμ μλ―Ένλ€. μλ΅μ 
 - 4xx: ν΄λΌμ΄μΈνΈμ μ€λ₯λ‘ μλ²κ° μμ²μ μ²λ¦¬ν  μ μμμ μλ―Ένλ€.
- 400 Bad Request: μλͺ»λ λ¬Έλ²μΌλ‘ μΈν΄ μλ²κ° μμ²μ μ΄ν΄ν μ μμμ μλ―Ένλ€.
 - 401 Unauthorized: μΈμ¦λμ§ μμ μ¬μ©μμ μμ²μμ μλ―Ένλ€.
 - 403 Forbidden: μλ²κ° μμ²μ μμ νμΌλ ν΄λΉ 리μμ€μ μ κ·Όν κΆνμ΄ μμμ λνλΈλ€.
 - 404 Not Found: μμ²ν 리μμ€λ₯Ό μ°Ύμ μ μμμ μλ―Ένλ€.
 - 405 Method Not Allowed: μμ²ν URIλ μ‘΄μ¬νλ ν΄λΉ URIμμ νμ©λμ§ μλ HTTP λ©μλλ₯Ό μ¬μ©ν κ²½μ°μ΄λ€.
 - 409 Conflict: μμ²μ΄ μλ²μ νμ¬ μνμ μΆ©λνμ¬ μλ£λ μ μμμ μλ―Ένλ€.
 - 415 Unsupported Media Type: μμ²μ 
Content-Typeμ μ§μνμ§ μμμ μλ―Ένλ€. - 429 Too Many Requests: νΉμ  μκ° λμ λ무 λ§μ μμ²μ΄ λ³΄λΈ μνμ΄λ€.
 
 - 5xx: μλ² μΈ‘ μ€λ₯λ‘ μμ²μ μ²λ¦¬ν  μ μμμ μλ―Ένλ€.
- 500 Internal Server Error: μλ²μ μ¬μμΉ λͺ»ν λ¬Έμ κ° λ°μν μνμ΄λ€.
 - 502 Bad Gateway: κ°μ΄νΈμ¨μ΄ λλ νλ‘μ μλ²κ° μ€μ  μμ²μ μ²λ¦¬νλ μλ²λ‘λΆν° μλͺ»λ μλ΅μ λ°μμμ μλ―Ένλ€.
 - 503 Service Unavailable: μλ²κ° κ³ΌλΆν λλ μ μ§λ³΄μ λ±μΌλ‘ μΈν΄ μμ²μ μ²λ¦¬ν μ μμμ μλ―Ένλ€.
 - 504 Gatewat Timeout: κ²μ΄νΈμ¨μ΄ λλ νλ‘μ μλ²κ° μ€μ  μμ²μ μ²λ¦¬νλ μλ²λ‘λΆν° μκ° λ΄ μλ΅μ λ°μ§ λͺ»νμμ μλ―Ένλ€.
 
 
π μμ± λ°©λ²
1
2
3
4
5
6
7
8
9
10
11
// μμ±μλ₯Ό μ¬μ©νλ λ°©λ²
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "value");
return new ResponseEntity<>(user, headers, HttpStatus.OK);
// λΉλ ν¨ν΄μ μ¬μ©νλ λ°©λ²
return ResponseEntity
    .status(HttpStatus.CREATED)
    .header("Location", "/users/123")
    .body(createdUser);
μμ±μμ λΉλ ν¨ν΄ λ κ°μ§ λ°©λ²μ΄ μ‘΄μ¬νλλ°, λ³΄ν΅ λΉλ ν¨ν΄μ λ§μ΄ μ¬μ©νλ€.
π μ₯μ 
ResponseEntity λ₯Ό μ¬μ©νλ©΄ μμ² μ²λ¦¬ κ²°κ³Όμ λ°λΌ μ μ ν μν μ½λλ₯Ό μ€μ ν  μ μλ€. λν μλΉμ€ κ³μΈ΅μμ λ°μν μμΈμ λ°λΌ 컨νΈλ‘€λ¬ κ³μΈ΅μμ ꡬ체μ μΈ μλ¬ μλ΅μ μμ±ν  μ μλ€.