Spring Boot/[Spring boot] 개발

[Spring boot] @ResponseEntity @ResponseBody 차이

재윤 2025. 1. 5. 17:11
반응형
ResponseEntity는 응답 헤더, 본문 양식을 맞추어 반환하므로 @ResponseBody

자바 스프링 부트에서 @ResponseEntity와 @ResponseBody는 모두 컨트롤러에서 HTTP 응답을 작성할 때 사용되지만, 그 목적과 사용 방식에 차이가 있다

@ResponseBody

  • @ResponseBody는 메서드가 반환하는 객체를 HTTP 응답 본문으로 직렬화하여 클라이언트에 직접 전송하도록 하는 어노테이션
  • 용도: 주로 RESTful API를 구현할 때 사용하며, 메서드의 반환 값을 JSON이나 XML과 같은 형식으로 변환하여 클라이언트에 전송
  • 기본 동작: 메서드가 반환하는 객체는 HttpMessageConverter에 의해 변환되어 HTTP 응답 본문으로 사용
  • ex → "Hello, World!" 문자열이 HTTP 응답 본문으로 전송
@GetMapping("/example")
@ResponseBody
public String getExample() {
    return "Hello, World!";
}

ResponseEntity

  • ResponseEntity<T>는 HTTP 응답의 전체를 나타내는 클래스
  • 이 클래스는 HTTP 상태 코드, 헤더, 본문 등을 포함 가능
  • 더 세밀하게 HTTP 응답을 제어할 필요가 있을 때 사용하거나, HTTP 상태 코드를 동적으로 설정하거나 특정 헤더를 추가하고 싶을 때 유용
  • ResponseEntity를 사용하면 응답 본문뿐만 아니라 상태 코드와 헤더도 함께 설정 가능
  • ex → "Hello, World!" 문자열은 HTTP 응답 본문으로 전송되며, HTTP 상태 코드는 200(OK)로 설정됨
@GetMapping("/example")
public ResponseEntity<String> getExample() {
    return new ResponseEntity<>("Hello, World!", HttpStatus.OK);
}

주요 차이점

  1. 응답의 제어 수준:
    • @ResponseBody는 응답 본문만을 제어 가능
    • ResponseEntity는 상태 코드, 헤더, 본문 등 전체 HTTP 응답을 제어 가능
  2. 구현 방식:
    • @ResponseBody는 메서드 수준에서 어노테이션으로 적용되며, 반환 타입은 응답 본문에 직접 매핑
    • ResponseEntity는 반환 타입으로 사용되며, 객체 생성 시점에 상태 코드, 본문, 헤더 등을 설정 가능

단순히 응답 본문을 반환하는 경우에는 @ResponseBody를 사용하고, 상태 코드나 헤더를 포함하여 더 많은 HTTP 응답 세부 사항을 제어해야 할 때는 ResponseEntity를 사용하는 것이 좋다.

반응형