Spring MVC

Spring MVC란 ?

Spring MVC란? 현재 가장 많이 사용하는 개발 패턴중 하나인 MVC 패턴에서 따온 것이다.

Spring Framework를 MVC 패턴 개발시 편리하게 개발 가능하도록 제공한다. 일반적으로 Model View Controller의 형태로 제공하며, 최근에는 프론트와 백엔드의 서버 분리(스케일링이슈) 가 추세이다.

Spring MVC 구조와 처리 과정

Spring MVC

  • DispatcherServlet
    • 어플리케이션으로 들어오는 모든 request를 받는 관문이다.
    • request를 실제로 처리할 controller에게 전달하고 그 결과를 받아서 view에게 전달하는 적절한 응값을 생성할 수 있도록 흐름을 제어한다.
  • HandlerMapping
    • Request URL 각각을 어떤 Controller가 실제로 처리할 것인지 찾아주는 역할을 한다.
  • Controller
    • Request를 직접 처리한 후에 그 결과를 다시 DispatcherServlet에게 돌려준다.
  • ModelAndView
    • Controller가 처리한 결과와 그 결과를 보여줄 View에 관한 정보를 담고 있는 객체이다
  • ViewResolver
    • View 관련 정보를 갖고 실제 View를 찾아주는 역할을 한다.
  • View
    • Controller가 처리한 결과값을 보여줄 View를 생성한다.

Spring에서 filter, interceptor 차이

Filter

  • 요청과 응답을 거른 후에 정제하는 역할을 한다.
  • 서블릿 필터는 DispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나 여러가지 체크를 수행할 수 있다.
  • 스프링 컨텍스트 외부에 존재하여 스프링과 무관한 자원에 대해 동작한다.
  • 스프링 영역에 포함되어 있지 않다.

Interceptor

  • 요청에 대한 작업 전/후로 가로챈다고 보면 된다.
  • 스프링의 DispatcherSevlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트 내부에 Controller에 관한 요청과 응답에 대해 처리한다.

AOP

  • Aspect Oriented Programming(관점 지향 프로그래밍)
  • OOP를 보완하기 위해 나온 개념이고, OOP를 대체하는 개념은 아니다.
  • 객체 지향의 프로그램을 했을 중복을 줄일 수 없는 부분을 줄이기 위해 종단점(관점)에서 바라보고 처리한다.
  • 주로 ‘로깅’, ‘트랜잭션’, ‘에러 처리’ 등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용한다.
  • 메소드 전후의 지점에 자유롭게 설정 가능하다.

3가지의 차이점

  • 처리 순서 “Filter > DispatcherServlet > Interceptor > AOP” 와 같다.
  • Interceptor와 Filter는 주로 주소를 대상을 구분해서 걸러내야 하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.