ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Camel][Spring] REST 란? Controller와 REST Controller의 차이점은?
    Spring/개념 정리 2020. 6. 28. 03:15

    [Camel][Spring] REST 란? Controller와 REST Controller의 차이점은?

     

     

    1. REST

     REST REpresentational State Transfer의 약어로서 부수적인 레이어나 세션 관리를 추가하지 않고도 HTTP프로토콜로 데이터를 전달하는 프레임워크입니다.

     

    1-1. REST의 특징

     이러한 REST는 몇가지 특징이 존재합니다. 

    • 모든 것은 URI를 가지고 있어야 한다. 모든 Resource는 클라이언트가 바로 접근할 수 있는 URI가 존재한다.
    • 웹 어플리케이션은 클라이언트의 상태에 대한 정보를 보관하지 않는다. 
      • 모든 HTTP 요청은 완전히 독립적이다. 
      • 클라이언트가 요청을 할 때마다 필요한 모든 정보를 준다.
    • 서버는 클라이언트의 time out에 대해 신경 쓰지 않아도 된다. 
      • 클라이언트에게 요청할 때마다 필요한 모든 정보를 주기 때문이다.
      • REST에서는 상태가 서버가 아닌 클라이언트에 유지된다. 
    • 모든 Resource는 일반적 HTTP 인터페이스인 GET, POST, PUT, DELETE로 접근되어야 한다.

     

    1-2. REST의 장점 및 단점

    REST의 장점

    • HTTP 프로토콜의 인프라를 그대로 사용하기 때문에 REST를 위한 별도의 인프라 구축이 필요 없다.
    • 웹 캐시 서버를 그대로 이용할 수 있다.
      • 모든 Resource가 URI로 유니크하게 표현되기 때문에 웹 캐시 상에 보관될 수 있기 때문이다. 
    • 서버와 클라이언트의 역할이 명확하게 분리된다.
    • HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용이 가능하다.
    • 사용이 쉽다. 

     

    REST의 단점

    • 표준이 존재하지 않는다. 
      • 표준이 존재하지않기 때문에 관리가 어렵다. 하지만 많은 사람들이 REST를 사용하면서 표준은 아니지만 암암리에 생겨난 표준 같은 것이 존재하며, 이를 Detector 표준이라 한다.
    • REST적 접근과 설계가 필요하다.
      • REST는 프로토콜이 아닌 Resource 기반의 아키텍쳐이기 때문에 시스템의 설계에도 REST에 적합한 설계가 요구된다. 
    • 구형 브라우저는 지원을 못하는 경우가 존재한다.
      • ex) PUT, DELETE, PATCH 방식 사용 불가

     

    2. Spring MVC 컨트롤러와 REST 컨트롤러의 차이점

     

    이 둘의 차이점을 딱 말하자면 바로 HTTP Response Body가 생성되는 방식입니다.

     

     MVC 컨트롤러는 View 기술을 사용하는 반면 REST 컨트롤러는 객체를 반환하면 객체 데이터가 JSON / XML 형식의 HTTP 응답에 직접 작성됩니다. 모든 경우가 그런것은 아니지만, MVC 컨트롤러는 View를 반환하는 것이고, REST 컨트롤러는 데이터를 반환하는 것이라고 할 수 있습니다. MVC컨트롤러의 경우에도 @ResponseBody 애너테이션을 사용하면 객체를 반환할 수 있긴합니다. 

     

    아래의 이미지는 이곳(www.genuitec.com)에서 참고하였음을 미리 알려드립니다. 

     

    2-1. 전통적인 Spring MVC 컨트롤러

     아래의 이미지를 비교해보면 전통적인 Spring  MVC 컨트롤러는 요청이 들어오면 Dispatcher Servlet에서 공통 처리 작업을 수행하고 컨트롤러에게 작업을 위임하게 됩니다. 이후 컨트롤러는 응답을 Dispatcher Servlet으로 반환하고, Dispatcher Servlet은 View를 클라이언트에게 반환하게 됩니다. 

    Spring MVC Controller

     

     

    2-2. Spring 4.x MVC REST 컨트롤러

     반면 REST 컨트롤러의 경우는 Spring MVC 컨트롤러에 @ResponseBody가 결합된 것으로, @RestController는 반환 값에 자동으로 @ResponseBody가 붙게되면서 HTTP 응답 데이터에 Java 객체가 매핑되어 전달되게 됩니다. 이러한 방식은  전통적인 Spring MVC 컨트롤러와는 다르게 컨트롤러에서 직접 데이터를 반환할 수 있게 합니다. 단, @RestController 애노테이션은 Spring 4.x 버전 이상에서부터 사용가능합니다. Spring 3.x 버전에서는 @RestController 대신 @Controller와 @ResponseBody 애너테이션으로 나누어 작성해주어야 합니다. 

     

     

    Spring 4.x MVC REST Controller

     

     

     

    3. Reference

    https://doublesprogramming.tistory.com/105?category=736879

    https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/

    https://blog.naver.com/hoyeon0/50137172782

    댓글

Camel`s Tistory.