안녕하세요!
스프링 프레임워크, 스프링부트에서 자주 쓰이는 어노테이션인 @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를 붙여주는 역할을 합니다.
위에서 말씀드렸다시피 가끔 프로젝트를 보면 두개가 섞여있는 경우가 있는데 하나만 써주시면 좋은 리팩토링이 될 것 같습니다.
감사합니다!
'개발자 일지 > Spring' 카테고리의 다른 글
[강의 후기] 인프런 김영한님 자바 ORM 표준 JPA 프로그래밍 (0) | 2024.10.22 |
---|---|
필터와 인터셉터 차이, 개념, 예제 (0) | 2024.09.20 |
[개인학습]스프링부트 + Swagger + JPA + MySQL 설정 및 테스트 (2) | 2022.10.10 |
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(7) (3) | 2022.07.03 |
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(6) (0) | 2022.06.18 |
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(5) (0) | 2022.06.14 |
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(4) (0) | 2022.06.04 |
[인프런 김영한 로드맵4]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(3) (2) | 2022.05.31 |