Spring 기반 개발을 하다 보면 서비스 로직 작성 중에 ResponseEntity를 정말 자주 보게 된다.
HTTP 응답 전체를 직접 구성할 수 있는 Spring의 클래스
ResponseEntity가 제어할 수 있는 3요소
- HTTP Status Code
- HTTP Headers
- Response Body (JSON, String, Object)
리소스 생성 시 201 상태로 명확하게 응답예시
return ResponseEntity.status(HttpStatus.CREATED).body(data);
JWT, Cookie기반 인증시 필수적
return ResponseEntity.ok()
.header("Set-Cookie", cookie)
.body(userInfo);
담긴 객체는 자동으로 JSON문자열로 변환 됨
return ResponseEntity.ok(new UserResponse(...));
에러 상황에서 적절한 상태 코드와 함께 커스텀 에러 메시지 전달이 가능
// 404 에러 응답 예시
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ErrorResponse("USER_NOT_FOUND", "해당 사용자를 찾을 수 없습니다."));
// 400 에러 응답 예시
return ResponseEntity.badRequest()
.body(new ErrorResponse("INVALID_INPUT", "이메일 형식이 올바르지 않습니다."));
다음과 같은 상황에서는 ResponseEntity는 선택이 아닌 필수이다.
단순히 데이터만 반환하는 @ResponseBody와 달리, ResponseEntity는 HTTP 통신의 모든 측면을 제어할 수 있게 해주기 때문이다.