Hyemi Lee

Hyemi Lee

주니어 개발자의 삽질과 기록

Spring, @Controller @RestController 차이

@Controller @RestController 차이

  • 주요한 차이점 : HTTP Response Body가 생성되는 방식

@Controller

  • 전통적인 Spring MVC의 컨트롤러
  • View 기술사용
  • @ResponseBody를 사용하면 View를 리턴하지 않고 Controller에서 직접 데이터 리턴 가능

Spring4.0부터 @RestController를 통해 더 단순화 되었다.

@RestController

  • Restful 웹서비스의 컨트롤러
  • 반환 되는 객체 데이터 타입 : JSON/XML 타입의 HTTP 응답을 직접 리턴

실행 흐름

@Controller의 실행 흐름

Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller -> View -> Dispatcher Servlet -> Response -> Client

@ResponseBody의 실행 흐름

Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller (ResponseBody) -> Response -> Client

@RestController의 실행 흐름

Client -> HTTP Request -> Dispatcher Servlet -> Handler Mapping -> RestController (자동 ResponseBody 추가) -> HTTP Response -> Client

1. @Controller(Spring MVC Controller)

[Controller - View]

Spring MVC Restful 전통적인 Work Flow controller view

  • 전통적인 Spring MVC Controller인 @Controller는 주로 View를 반환하기 위해 사용한다.
  1. Client는 URI형식으로 웹 서비스에 요청 전송
  2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
  3. Controller가 요청을 처리한 후 응답을 DispatcherServlet으로 반환하고 DispatcherServlet은 View를 사용자에게 반환.

[Contoller - Data]

Spring 3.x MVC Restful Web Service Work Flow controller data

  • @ResponseBody로 Spring MVC의 컨트롤러에서는 데이터를 반환하기 위해 사용
    1. Client는 URI형식으로 웹 서비스에 요청 전송
    2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
    3. @ResponseBody를 사용하여 Client에게 Json형태로 데이터를 반환.

2. @RestController(Spring Restful Controller)

Spring 4.x MVC Restful Web Service Work Flow restcontroller

  • RestController = Spring MVC Controller + @ResponseBody
  • 주용도 : Json/XML형태로 객체 데이터 반환
    1. Client는 URI형식으로 웹 서비스에 요청 전송
    2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
    3. RestController는 해당 요청을 처리하고 데이터를 반환.

참고

Share on

Twitter Facebook LinkedIn

You may also enjoy

Redis Stream

2021年04月28日

Stream Stream은 로그 데이터를 처리하게위해 5.0에서 새로 도입된 데이터 타입입니다. 대량의 데이터가 연속적으로 발생할때 처리하기 위해 등장했습니다. 기존 데이터를 수정하지 않고 오직 추가로 발생합니다. 이런 종류의 데이터를 stream or log데이터...

Study, Object, chapter2&3 presentation

2021年04月20日

chapter03. 역할, 책임, 협력 객체지향 설계란, 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다.

Spring, chatting 프로그램 만들기, Reactive란?

2020年06月16日

Reactive 막힘없이 흘러다니는 data(event)를 통해 사용자에게 자연스러운 응답을 주고 규모 탄력적으로 리소스를 사용하며 실패에 있어서 유연하게 대처한다 모든 지점에서 블럭 되지 않게 하자 oop와 같은 패러다임 모든 것을 비동기적인 data의 strea...

Spring, chatting 프로그램 만들기, websocket

2020年06月16日

채팅 서비스 구현하기 팀원들과 velog를 클론코딩하기로 했다. 큰 도메인은 게시물, 개인페이지였고 팀원은 백엔드 개발자 세명이여서 일 분배가 어려웠다. 따라서 나는 그 동안 구현 해보고 싶었던 채팅 서비스를 구현해서 붙여보기로 했다.