본문 바로가기

Spring

[Spring] Spring Framework, Spring Web MVC

Framework

  • 웹 어플리케이션을 개발하기 위해서는 기본 기능과 많은 기능을 설계, 작성해야 합니다. (요청처리, 세션관리, 리소스 관리, 멀티 쓰레드 등) 하지만 기본적인 공통 구조(framework)를 제공한다면 개발자는 웹 어플리케이션 기능 자체 개발에만 신경 쓰면 되기 때문에 생산성이 높아집니다..
  • 개발자 입장에서는 완성된 구조에 자신이 맡은 코드만 개발해서 넣어주면 되기 때문에 개발 시간을 단축할 수 있습니다.

Spring Framework의 특징

  • POJO(Plain Old Java Object) 방식의 프레임워크 - EJB가 기능 작성을 위해서 인터페이스를 구현하거나 상속하는 것에 비해 일반적인 자바 객체를 이용해서 그대로 사용할 수 있음을 의미합니다.
  • 의존성 주입(DI, Dependency Injection)을 통한 객체관계 구성 - 프레임워크 내부에서 사용되는 객체간 의존성이 존재할 경우, 개발자는 의존성에 관련한 설정만 해주면 실제 의존성 생성은 프레임워크가 담당합니다.
  • 관점지향 프로그래밍(AOP, Aspect Oriented Programming) 지원 - 트랜잭션, 로깅 등 여러 모듈에서 공통적으로 사용하는 기능에 대해서 별도로 분리하여 작성, 관리할 수 있는 기능을 제공합니다.
  • 제어 역전(IoC, Inversion of Control) - 제어 역전을 통해 객체 및 프로세스의 제어를 프레임워크가 담당하고 필요에 따라 개발자의 코드를 호출한다.
  • 높은 확장성과 다양한 라이브러리 지원 - 기존의 라이브러리를 스프링에서 사용할 수 있는 기능을 지원하고 있습니다. 특히 영속성 관련하여 MyBatis나 Hibernate 등 의 완성도 높은 데이터베이스 라이브러리와 연결가능한 인터페이스를 제공해 줍니다.

Spring Web MVC

MVC란 Model-View-Controller(모델-뷰-컨트롤러)의 약자로 웹 애플리케이션을 화면 부분, 요청 처리 부분, 로직 처리 부분으로 나누어 개발하는 방법입니다. 각 기능이 분리되어있어 개발 및 유지보수가 편리하고 각 기능의 재사용성이 높아진다는 장점이 있습니다.

Model

  • 데이터베이스 연동과 같은 비즈니스 로직을 수행합니다.
  • Controller로 부터 넘어온 data를 이용하여 이를 수행하고 그에 대한 결과를 다시 Controller에 return 합니다.
  • 일반적으로 DAO와 VO 클래스로 이루어져 있습니다.

View

  • Model에서 처리한 결과를 화면에 표시합니다.
  • JSP가 화면 기능을 담당합니다.

Controller

  • 서블릿이 컨트롤러의 역할을 합니다.
  • 클라이언트의 요청을 분석합니다.
  • 요청에 대해서 필요한 모델을 호출합니다.
  • return 받은 결과 data를 필요에 따라 request, session등에 저장하고 redirect 또는 forward 방식으로 jsp(view) page를 이용하여 출력합니다.

Spring Web MVC는 Servlet API를 기반으로 구축된 웹프레임워크로 Spring Framework가 제공하는 DI, AOP 뿐만 아니라 Web 개발에 필요한 기능들을 제공해줍니다. DispatcherServlet(FrontController)를 중심으로 디자인 되었으며, View Resolver, Handler Mapping, Controller 와 같은 객체와 함께 요청을 처리하도록 구성되어 있습니다.

Spring MVC 구성요소

구성 요소 설명
DispatcherServlet 클라이언트의 요청을 전달받아 해당 요청에 대한 Controller를 선택하여 클라이언트의 요청을 전달합니다. 또한 Controller가 반환한 값을 View에 전달하여 알맞은 응답을 생성합니다.
HandlerMapping 클라이언트가 요청한 URL을 처리할 Controller를 지정합니다.
Controller 클라이언트의 요청을 처리한 후 그 결과를 DispatcherServlet에 전달합니다.
ModelAndView Controller가 처리한 결과 및 View 선택에 필요한 정보를 저장합니다.
ViewResolver Controller에 선언된 View의 이름을 기반으로 결과를 반환할 View를 결정합니다.
View Controller의 처리 결과 화면을 생성합니다.

Spring MVC - 요청 처리 흐름

  1. 브라우저가 DispatcherServlet에 URL로 접근하여 해당 정보를 요청합니다.
  2. HandlerMapping에서 해당 요청에 대해 매핑된 Controller가 있는지 요청합니다.
  3. DispatcherServlet이 매핑된 Controller에 처리를 요청합니다.
  4. Controller가 요청을 처리합니다.
  5. 결과(요청처리를 위한 data, 결과를 보여줄 view의 이름)를 ModelAndView에 담아 반환합니다.
  6. ViewResolver에 의해서 실제 결과를 처리할 View를 결정하고 반환합니다.
  7. 결과를 처리할 View에 ModelAndView 객체를 전달합니다.
  8. DispatcherServlet이 View가 만들어낸 결과를 응답합니다.