이전에 각각 REST API와 MVC패턴에 관해 포스트를 올렸었고, 이번에 캡스톤디자인 하면서 마침 두 개념을 모두 사용하기에 이번 포스트를 작성하게 되었다.
PS. 필자가 스프링진영이기에 MVC패턴 을 이용하는 SpringMVC를 기반으로 설명할 예정이다
MVC 패턴 (Model-View-Controller)


REST
REST API는 그 원칙에 따라 구현된 구체적인 인터페이스를 의미
사실 처음에는 이 두 개념이 하나의 서버에 공존할 수 없다고 생각했었다.
왜 그랬는지는 잘 모르겠으나, 아무튼 그렇게 생각했었다.
그러다 각 개념들에 대해 자세히 알아 본뒤 내가 잘못 생각했었단 걸 깨달았다.
REST API와 Spring MVC는 모두 웹 애플리케이션 개발에 사용되는 중요한 개념이지만 그 둘에게 차이점이 존재하기에 차이점에 대해 알아보자
REST API

REST API는 뷰를 반환하는 것이 아닌 클라이언트의 요청이 들어오면 MessageConverter를 통해 application/json이나 text/plain등 알맞은 형태로 반환해준다. 즉 데이터를 보내주지 화면을 보내주지 않는다.
SpringMVC

SpringMVC는 클라이언트의 요청이 들어오면 ViewResolver를 통해 클라이언트에게 text/html , jsp 타입 혹은 파일의 경로 타입의 view 응답을 보낸다.
정말정말 간단하게 말하자면 이 둘은 목적과 사용 분야에 차이가 있고, 반환하는 값이 다르다.
그렇다면 처음에 갖고 있던 의문 이 둘은 같이 사용할 수 있을까?
결론부터 말하자면 그렇다 라고 할 수 있다.
Spring MVC는 RESTful 웹 서비스를 개발하기 위한 도구로도 활용될 수 있다.
MVC패턴 중 뷰의 기능을 제외한 나머지 서비스와 컨트롤러의 기능은 그대로 사용하고 마지막 반환값을 HTTP응답에 바로 넘겨주면 되는 것이다.
그리고 그것을 쉽게 만들어주는 것이 바로 @RestController이다.
@RestController에는 @ResponseBody가 들어있는데 이 @ResponseBody가 컨트롤러의 반환 값을 HTTP응답 바디에 넣어주는 역할을 한다.
만약 내가 만들려는 것이 화면까지 백엔드 서버에서 보여주는 웹어플리케이션이라면 @Controller를 쓰는 SpringMVC를 적용하여 직접 뷰를 반환하게 하면 되고,
내가 만드려는 것이 데이터를 주고받고 가공하는 REST API서버라면 @RestController를 사용하여 데이터를 주고받게 만들자.