본문 바로가기
개발자 일지/Spring

[스프링]@ResponseBody 역할, 쓰는이유, 대체 어노테이션(@RestController) 알아보기

by 네빌링 2024. 9. 10.
반응형

안녕하세요!

 

스프링 프레임워크, 스프링부트에서 자주 쓰이는 어노테이션인 @ResponseBody의 역할, 쓰는 이유와 이를 대체할 수 있는 어노테이션인 @RestController를 같이 알아보겠습니다.


 

1.@ResponseBody란?

 

@ResponseBody는 컨트롤러의 메소드에 붙는 어노테이션인데요. 메소드가 반환한 객체를 자동으로 json,xml 등의 형태로 변환해주는 역할을 합니다. 보통 AJAX요청이나 API 개발시에 많이 사용하죠. 일반적으로 컨트롤러는 뷰를 반환하지만 데이터를 직접 클라이언트에 전달해야할 때는 이 어노테이션을 사용합니다.

 

@GetMapping("/getData")
@ResponseBody
public String getData() {
    return "data";
}

 

이 코드는 /getData라는 URL 호출시 @ResponseBody에 의해 data라는 뷰를 반환하는 것이 아니라 "data"라는 문자 그 자체를 반환합니다.

 

2.@ResponseBody보다 @RestController를 써야하는 이유

 

@RestController는 간단히 말해서 다음과 같습니다.

 

@RestController = @Controller + @ResponseBody

 

간혹 프로젝트에 @ResponseBody도 쓰고 @RestController도 같이 쓴 프로젝트가 있는데 하나만 써주시면 됩니다.

 

@RestController를 컨트롤러명 위에 써주면 매번 메서드 위에 @ResponseBody를 추가할 필요 없이 해당 컨트롤러의 모든 메서드가 JSON,XML 형태로 응답합니다. 이는 가독성을 높이고 해당 컨트롤러가 데이터 전달용 컨트롤러라는 걸 바로 인지할 수 있습니다.

 

@RestController
public class ApiController {

    @GetMapping("/testApi")
    public String test() {
        return "testData";
    }
}

 

위와 같이 작성하면 됩니다!

 

3. @RestController를 쓰면 안 될 때

 

@RestController는 뷰를 반환하는 기능이 없기 때문에, JSP, Thymeleaf 등 템플릿 엔진을 사용하는 경우에는 적합하지 않습니다. 만약 뷰를 랜더링해야할 경우와 data를 클라이언트로 보내는 경우 등이 섞여있다면 @Controller와 @ResponseBody를 따로 사용해주어야 합니다. @RestController를 쓰면 뷰를 반환할 수 없습니다!

 

4. 정리

@ResponseBody는 말그대로 응답바디(?)로 body를 단순히 응답해준다는 것입니다. @RestController는 @Controller와 @ResponseBody를 합친 어노테이션으로 컨트롤러에 쓰면 모든 메소드에 @ResponseBody를 붙여주는 역할을 합니다.

 

위에서 말씀드렸다시피 가끔 프로젝트를 보면 두개가 섞여있는 경우가 있는데 하나만 써주시면 좋은 리팩토링이 될 것 같습니다.

 

감사합니다!

 

반응형