코코무의 코딩캔버스

[Spring] @ResponseBody의 개념과 용도(feat. PrintWriter) 본문

Spring

[Spring] @ResponseBody의 개념과 용도(feat. PrintWriter)

코코무 2024. 7. 23. 16:09

 

@ResponseBody 어노테이션은 Spring MVC에서 사용되며, 메서드의 반환 값을 HTTP 응답 본문에 직접 쓰도록 지시합니다.

이 어노테이션을 사용하면, 메서드의 반환 값이 뷰 리졸버를 거치지 않고, JSON, XML 또는 문자열 등의 형식으로 HTTP 응답 본문에 직접 포함됩니다. 주로 RESTful 웹 서비스나 API를 구현할 때 유용합니다.

메서드의 반환 값이 서버에서 클라이언트로 전달될 때 뷰 템플릿을 거치지 않고 그대로 HTTP 응답의 본문으로 사용된다는 것이다. 즉, 반환 값이 변환되지 않고 그대로 응답으로 전송된다는 뜻이다.

예를 들어, 아래와 같은 컨트롤러 메서드를 사용할 수 있습니다:

@RestController 
public class MyController { 

	@GetMapping("/hello") 
    @ResponseBody 
    public String sayHello() {
    	return "Hello, World!"; 
    } 
}
 

위 코드에서 sayHello 메서드는 "Hello, World!" 문자열을 반환하며, 이 문자열은 HTTP 응답 본문에 직접 쓰여집니다. @RestController 어노테이션을 사용하면 클래스 내 모든 메서드에 @ResponseBody가 자동으로 적용됩니다.

 

그렇다면 view를 사용하는 경우의 코드 예시를 살펴보겠습니다.

@GetMapping("/hello")
public String showHelloPage() {
    return "helloPage";  // "helloPage.jsp" 뷰가 렌더링됨
}

 

"helloPage"가 "Hello, World"와 같은 문자열로 보이지만 사실은 "helloPage"라는 이름을 가진 jsp 파일을 렌더링하게 됩니다.

 

참고로 JSP에서는 PrintWriter 객체가 이와 동일한 역할을  합니다. 이 개념을 먼저 알면 @ResponseBody에 대해 더 이해하기 쉽습니다. 이름부터 직관적이기 때문이죠.

 

PrintWriter 객체는 Java에서 문자 데이터를 출력할 때 사용하는 편리한 클래스입니다. 파일, 소켓, 콘솔 등 다양한 출력 대상에 쉽게 텍스트를 출력할 수 있습니다. PrintWriter는 자동 플러시 기능과 포맷팅된 출력 기능을 제공하여 다양한 상황에서 유용하게 사용됩니다.

주요 메서드에는 print(), println(), printf()가 있습니다.