본문 바로가기
Java Spring/MVC

@Controller와 @RestController의 차이점

by GGShin 2022. 8. 6.

@Controller와 @RestContoller의 차이점이 궁금함에도 유사한 기능을 하나보다 하며 넘어갔었습니다.

그런데 역시나.. 기능이 다르다는 걸 알게되었고, 이 참에 그 둘의 차이에 대해서 좀 더 알아보려고 합니다. 

 

먼저 문제가 있던 코드는 아래 코드였습니다.

@RestController 사용

제 의도는 /login 으로 접속했을 때, template directory에 저장되어 있는 loginForm.html을 view로 보여주는 것이었습니다.그런데 의도와는 다르게 

return 해주는 String 값이 화면에 나왔습니다. 보통 이런 경우는 @ResponseBody가 붙어있을 때 나타나는데, 그것도 없고 어떤게 문제일까 생각해보았습니다. 

그러다가 @RestController를 @Controller로 바꾸어보았고, 원래 의도대로 loginForm.html이 view로 화면에 나왔습니다.

 

이 일로 인해 두 annotation에는 큰 차이가 있구나를 깨닫게 되고 덕분에 둘의 차이점에 대해서 알아보는 시간을 가졌습니다.

 

결론적으로 이 둘의 가장 큰 차이는 

 

@Controller는 주로 view를 반환하기 위해서 사용하고
@RestController는 JSON format으로 객체 data를 반환하기 위해서 사용한다.

 

입니다. 

위에서 제가 겪은 상황에서도 마찬가지였죠? 

 

몇 가지 차이점을 나열해보면 다음과 같습니다.

 

@Controller @RestController
Class를 Spirng MVC Controller로 표시하기 위해 사용한다. RESTful Web 서비스를 위한 annotation으로 @Controller와 @ResponseBody annotation 두 개를 같이 사용한 것과 동일한 동작을 한다.
Spring Web MVC view를 리턴한다 View를 리턴하지는 못한다.

 

이번 기회를 통해 둘의 차이를 잘 알게되었고, 앞으로 사용하면서 구체적으로 보여드릴 수 있는 사용예시가 생긴다면 이 포스팅에 업데이트 하도록 하겠습니다. 감사합니다 :)

 


 

참고자료

 

https://mangkyu.tistory.com/49

 

[Spring] @Controller와 @RestController 차이

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다. 전통적인 Spring MVC의 컨트롤러인 @Controller와 Restuful 웹서비스의 컨트롤러인 @RestController의 주요한 차..

mangkyu.tistory.com

https://www.geeksforgeeks.org/difference-between-controller-and-restcontroller-annotation-in-spring/#:~:text=%40RestController-,%40Controller%20is%20used%20to%20mark%20classes%20as%20Spring%20MVC%20Controller,specialized%20version%20of%20%40Component%20annotation.

 

Difference Between @Controller and @RestController Annotation in Spring - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

반응형

'Java Spring > MVC' 카테고리의 다른 글

@Nullable 사용 시 warning 발생 없애기  (0) 2022.09.09
Model interface  (6) 2022.08.20
em.flush() vs tx.commit()  (1) 2022.07.23
Spring Rest Docs 만들기  (1) 2022.07.19
Mockito 적용하여 Controller test 해보기  (0) 2022.07.18