🍃 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁

@Controller와 @RestController 차이

비타민찌 2022. 3. 10. 12:43
728x90

Spring @Controller와 @RestController 차이

 

@controller

 

@controller는 주로 view를 반환하기 위해 사용한다. 아래와 같은 흐름으로 Client의 요청에 맞는 View를 반환한다.

@controller

1. 클라이언트가 요청을 보내면 dispatche Servlet으로 요청을 받는다.

2.dispatcher servlet은 요청에 해당하는 Controller로 위임 처리를 하도록 Handler Mapping 에게 위임을 처리한다.

3. view Resolver는 Controller 가 반환한 논리 뷰 이름을 실제 물리뷰 경로로 변경하고 View 객체를 반환환한다.

 

@RestController

그렇다면 View가 아닌 Data를 반환해야하면 어떻게 해야할까? 그럴때 사용하는 것이 @RestController다.

@RestController는 데이터 반환을 할 수 있다. 아래와 같은 흐름으로 Client의 요청에 맞는 Data를 반환한다.

@RestController

1. 클라이언트가 요청을 보내면 dispatche Servlet으로 요청을 받는다.

2. dispatcher servlet은 요청에 해당하는 Controller로 위임 처리를 하도록 Handler Mapping 에게 위임을 처리한다.

3. HttpMessageConverter가 동작하여 요청에 맞는 데이터를 반환.

 

 

정리 해보자면,

@Controller는 view Resolver가 동작하여 view를 반환한다.

첫번째 코드블럭에서는 @Controller를 사용하여 view를 반환했기때문에 정상적으로 view가 보여졌다.

그런데 @RestController는 HttpMessageConverter가 동작하여 데이터를 반환한다. 그래서 "views/customers"에 해당되는 view 경로로 반환이 되지않고 "views/customers" 로 반환이 되어 렌더링 결과에 차이가 생기게 된것이다.

 

만약 @Controller를 사용하여 Data를 반환하고 싶으면, @ResponseBody 어노테이션을 같이 사용하면 된다.

실제로 어노테이션 코드를 확인해보면 아래와 같이 @RestController = @Controller + @ResponseBody 로 구성된것을 확인할 수 있다.

 

 

 

728x90