@ResponseBody

Yuno·2024년 8월 18일
0

Spring Framework 에서 사용되는 어노테이션으로, HTTP 요청 핸들러 메서드의 반환값을 HTTP 응답 본문으로 직접 전송하도록 지정하는 역할을 함. 이 어노테이션은 주로 JSON, XML 등의 데이터를 반환할 때 사용됨


👉 주요 기능

  1. 응답 본문에 직접 데이터 출력 : @ResponseBody 를 사용하면, 메서드에서 반환된 데이터가 자동으로 HTTP 응답 본문에 직접 작성됨. 이 과정에서 반환된 객체는 JSON 또는 XML 등의 형식으로 직렬화(serialize) 되어 클라이언트에 전송됨
  2. MVC 와의 통합 : 일반적으로 Spring MVC 에서는 @Controller 가 사용되고, 뷰 리졸버(Veiw Resolver)가 반환값을 JSP, HTML 등의 뷰로 렌더링함. 그러나 @ResponseBody 를 사용하면, 이러한 뷰 리졸버를 우회하고, 직접 데이터를 반환하게 됨.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframewrok.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class MyController {
	
    @GetMapping("/hello")
    @ResponseBody
    public String sayHello() {
    	return "Hello, World!";
    }
    
    @GetMapping("/data")
    @ResponseBody
    public MyData getDate() {
    	return new MyData("example", 123);
    }
}

class MyData {
	private String name;
    private int value;
    
    public MyData(String name, int value) {
    	this.name = name;
        this.value = value;
    }
    // getters and setters
}
  • @ResponseBody
    • sayHello() 메서드는 "Hello, World!" 문자열을 반환하며, 이 문자열은 응답 본문에 직접 포함됨.
    • getData() 메서드는 MyData 객체를 반환하며, 이 객체는 JSON 형식으로 직렬화되어 응답 본문에 포함됨

📌 특징

  • 자동 직렬화 : 반환된 객체가 JSON이나 XML로 자동 변환됨. 이 변환 과정에서 Spring은 Jackson이나 JAXB와 같은 라이브러리를 사용함.
  • 간단한 데이터 응답 : 문자열, 객체 등의 데이터를 쉽게 응답으로 전송할 수 있음.

📌 @RestController 와의 관계

  • @RestController@Controller@ResponseBody 를 결합한 형태로, @RestController 를 사용하면 클래스 내 모든 메서드에 자동으로 @RestponseBody 가 적용됨
  • @RestController 가 아닌 일반 @Controller 에서 @ResponseBody 를 적용해 특정 메서드만 JSON 등을 반환하도록 설정할 수 있음.

👉 사용 시나리오

  • AJAX 요청 : 웹 어플리케이션에서 클라이언트가 서버로부터 JSON 데이터를 비동기적으로 받아와야 할 때 자주 사용됨
  • API 응답 : RESTful API 에서 데이터를 응답으로 보내야 할 때 사용됨.
  • 텍스트 응답 : 간단한 문자열이나 데이터를 클라이언트에 반환할 때도 유용함
profile
Hello World

0개의 댓글