김동형수 개발기

[Spring] @RestController, @Controller 차이점 알기 본문

이론정리

[Spring] @RestController, @Controller 차이점 알기

김동형수 2020. 4. 3. 17:03

Intro

 

스프링에서 컨트롤러 작성할 때 API용은 RestController Annotation을 사용하고 Dispatcher Servlet으로 보내야 하는 경우( 페이지 이동 ) 에는 Controller Annotation을 사용합니다.

 

 

하지만 왜 사용하는지, 어떤 차이가 있는지는 몰랐습니다.

 

케이스 바이 케이스로 공식 외우듯 기계처럼 작성을 해왔습니다.

 

하지만 오늘은 두 Annotation을 소화해보려고 합니다.


Content

 

@Controller가 있는 Request가 발생하면 어떠한 일이 일어날까?

 

아주 잘 설명되엉 있는 그림이 첨부된 포스팅을 발견했습니다.

개인적인 생각으로 가장 중요한 내용은 클라이언트에서 Controller로 요청(Request)을 하게되면 Spring의 Dispatcher Servlet을 통한 처리가 이루어집니다.

 

위에서 언급한 내용에서 흐름을 살펴보면 아래와 같습니다.

Client -> Dispatcher Servlet -> Handler Mapper -> Controller -> View Resolver -> View -> Client

 

아무생각없이 사용할때는 심플했는데 Spring Framework에서 상당히 많은 일들을 처리해주고 있었습니다.

 

보통은 뷰(페이지)를 반환하지만 View Resolver 단계에서 MessageConvertor를 통해서 Json 형태의 Response를 반환하는 것 또한 가능합니다. (참조 : 이곳)

 

기존에 Controller Annotation를 사용해서 RestAPI를 만드는 분들은 모든 메서드에 ResponseBody Annotation을 넣어줘야하는 번거로움이 있습니다. 

 

하나의 Controller에서 View를 이용한 Response와 Json 형태의 Response를 반환하는 형태가 아니라면 @RestController 를 사용해봅시다.


@RestController가 있는 Request가 발생하면 어떠한 일이 일어날까?

 

대부분의 과정이 @Controller와 비슷하게 처리되고 @Controller에서 ResponseBody Annotation을 사용하는것과 동일한 결과값을 얻을 수 있습니다.

 

따라서 RestAPI만을 사용하는 컨트롤러라면 @RestController, View와 API가 혼용되어 작성하거나 View만 사용하려면 @Controller를 사용하는 것이 좋을 것 같습니다.

 


Finish

 

@RestController와 @Controller 사이에서 고민하고 있다면 앞서 언급한 용도에 대해서 고민하신 뒤 선택하면 될 것 같습니다.

 


Reference

 

https://taetaetae.github.io/2017/01/07/spring4-json/
https://codenuclear.com/spring-mvc-flow-with-example/
https://ismydream.tistory.com/140

 

'이론정리' 카테고리의 다른 글

왜 Spring Framework를 선택할까?  (0) 2020.03.20
[Spring] Spring Legacy와 Spring Boot 비교  (0) 2020.02.20
[Java] Java 8의 새로운 기능  (0) 2020.02.19
Comments