HTTP 상태 코드란?
HTTP 상태 코드는 특정 HTTP 요청이 어떻게 처리되었는지 알려준다.
기본적으로 응답은 5개의 그룹으로 나누어진다.
- 1XX: 정보 제공
- 2XX: 성공
- 3XX: 리다이렉트
- 4XX: 클라이언트 에러
- 5XX: 서버 에러
상태 코드에 대해 더 자세한 내용은 여기로
그런데 이런 기본적인 상황말고 개발자가 더 많은 상황에 대한 응답을 하고 싶을 수도 있지않을까?
그리고 성공이나 에러와 함께 값도 전달하고 싶다면?
그럴때 사용하는 것이 ResponseEntity이다.
ResponseEntity란?
ResponseEntity는 HTTP 응답을 나타내는 Spring Framework의 클래스.
이 클래스는 요청에 대한 응답의 HttpHeader, HttpBody 및 Status Code를 포함하여 클라이언트에게 전달할 수 있는 다양한 기능을 제공한다.
ResponseEntity를 사용하여 동적으로 응답하기
ResponseEntity를 사용하면 동적으로 HTTP 상태 코드에 body를 설정할 수 있다.
@GetMapping("/custom-response")
public ResponseEntity<String> customResponse() {
return ResponseEntity.status(HttpStatus.ACCEPTED) // 202 Accepted 반환
.body("요청이 접수되었습니다!");
}
위 코드에서는 202 Accepted 응답과 함께 메시지가 반환된다.
JSON 응답을 반환하는 경우
@GetMapping("/user/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findUserById(id);
if (user == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); // 404 반환
}
return ResponseEntity.ok(user); // 200 OK 반환
}
ResponseEntity.ok(user)는 200 OK 응답과 함께 user 데이터를 JSON으로 반환한다.
로그인 실패 시 커스텀 응답 코드 반환
@PostMapping("/login")
public ResponseEntity<Map<String, Object>> login(@RequestBody LoginRequest request) {
if (!authService.isValidUser(request)) {
Map<String, Object> response = new HashMap<>();
response.put("status", 3001);
response.put("message", "로그인 실패: 아이디 또는 비밀번호가 잘못되었습니다.");
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(response);
}
// 로그인 성공
Map<String, Object> successResponse = new HashMap<>();
successResponse.put("status", 200);
successResponse.put("message", "로그인 성공");
successResponse.put("token", "eyJhbGciOiJIUzI1..."); // JWT 토큰 예시
return ResponseEntity.ok(successResponse);
}
로그인 실패 시 HTTP 200 OK 대신, 401 Unauthorized를 사용하고 응답 바디에 3001이라는 커스텀 코드를 포함한다.
사용하는 이유
1. HTTP 상태 코드 제어: ResponseEntity를 사용하면 응답에 대한 HTTP 상태 코드를 명시적으로 지정 가능
- 클라이언트에게 정확한 상태 정보를 제공하는데 도움이 됨
2. 응답 본문 및 헤더 제어: ResponseEntity를 통해 응답 본문과 헤더를 세밀하게 제어할 수 있다.
3. 유연성: 일반적인 객체 또는 커스텀 클래스를 응답으로 반환할 수 있으며, Spring은 자동으로 해당 객체를 적절한 형식으로 변환하한다.
유연한 응답 처리를 위해서 사용되는 ResponseEntity!
'Spring' 카테고리의 다른 글
[Spring] 관계 매핑 어노테이션 (2) | 2025.02.06 |
---|---|
[Spring] 스프링 부트 구조 정리 (0) | 2025.02.04 |
[Spring] Bean (0) | 2025.02.04 |
[Spring] JPA(Java Persistence API) (0) | 2025.02.04 |
[Spring] IoC, DI, AOP (0) | 2025.02.04 |