@Controller와 @RestController는 무엇이 다를까

안상철·2022년 8월 16일
0

이모저모개발

목록 보기
4/8
post-thumbnail

스프링에서 '이게 컨트롤러 입니다'라고 알려주는 어노테이션은 두 가지가 있다.
ControllerRestController 어노테이션이다. 하나만 있으면 될텐데 왜 두 가지나 만들었을까?

1. Controller

먼저 컨트롤러의 주 목적은 요청처리 중에서도 View를 반환하기 위해 사용합니다.

클라이언트가 웹 서비스에 요청을 보내면 DispatcherServlet이 HandlerMapping에게 작업을 넘겨줍니다 -> 핸들러 매핑은 넘겨받은 업무를 적절한 POJO(Controller)에게 다시 넘겨주고 -> 포조가 반환 해 줄 때 ViewName을 함께 반환 해 줍니다 -> 디스패처 서블릿은 ViewResolver를 통해 클라이언트에게 결과 화면을 보여주게 됩니다.

정석적인 MVC 패턴에서 사용 될 것 같은 흐름 처럼 보입니다.
그렇다고 일반 Controller 어노테이션도 객체를 반환할 수 없는 것은 아닌데요, ResponseEntity로 감싸서 반환하면 됩니다.

대신 일반 Controller 어노테이션을 붙인 컨트롤러 클래스는 @ResponseBody 어노테이션을 API 메서드에 추가해 줘야 합니다.

2. RestController

그래서 등장 한 것이 RestController 어노테이션 입니다. 이는 Controller 어노테이션과 ResponseBody 어노테이션을 합친 것으로 스프링 4.0 버전부터 적용되었다고 하네요. RestController 어노테이션을 사용하면 ResponseBody 어노테이션을 사용하지 않아도 객체를 ResponseEntity로 감싸 클라이언트에게 보내줄 수 있습니다.

과정은 POJO에게 업무를 위임하는 것 까지는 동일하나, 반환하는 것이 View가 아닌 JSON으로 Serialize 된 객체를 보내 준 다는 것입니다.

참고: 망나니 개발자

profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글