Spring MVC 구조


Spring MVC는 Servlet Container 안에 있는 Servlet 요소 중 하나이다.



Spring MVC(Model-View-Controller)의 핵심 Component는 아래와 같다.

Component개요
DispatcherServletSpring MVC Framework의 Front Controller, 웹요청과 응답의 Life Cycle을 주관한다.
HandlerMapping웹요청시 해당 URL을 어떤 Controller가 처리할지 결정한다.
Controller비지니스 로직을 수행하고 결과 데이터를 ModelAndView에 반영한다.
ModelAndViewController가 수행 결과를 반영하는 Model 데이터 객체와 이동할 페이지 정보(또는 View객체)로 이루어져 있다.
ViewResolver어떤 View를 선택할지 결정한다.
View결과 데이터인 Model 객체를 display한다.

이들 컴포넌트간의 관계와 흐름을 그림으로 나타내면 아래와 같다. 


  1. Client의 요청이 들어오면 DispatchServlet이 가장 먼저 요청을 받는다.
  2. HandlerMapping이 요청에 해당하는 Controller를 return한다.
  3. Controller는 비지니스 로직을 수행(호출)하고 결과 데이터를 ModelAndView에 반영하여 return한다.
  4. ViewResolver는 view name을 받아 해당하는 View 객체를 return한다.
  5. View는 Model 객체를 받아 rendering한다.

Bean


Bean(빈)이란 개발자가 생성하지 않고 Spring이 관리하는 인스턴스이다. 


Spring이 제공하는 Container를 통해서 관리되는 인스턴스를 우린 Bean이라고 부른다.


POJO

POJO는 Plain Old Java Object의 약자인데 그 어느 곳에도 종속되지 않은 (즉, 상속받지도, 구현하지도 않은 독립적인) Java Class를 말한다.



IOC 


이전의 방식

main()에서 시작할 때 사용할 객체를 결정, 객체 내의 메소드 호출 작업 일반적

오브젝트가 프로그램 흐름 결정한다.


IOC 방식

IOC는 자신이 사용할 오브젝트를 스스로 생성하거나 선택하지 않는다.

자신이 어떻게 만들어지고 어디서 사용되는지 모른다.

모든 제어 권한을 자신이 아닌 다른 대상에게 위임한다.



DL(Dependency Lookup)


저장소에 저장되어 있는 빈에 접근하기 위해 컨테이너에서 제공하는 API 이용해 사용하고자 하는 빈을 LOOKUP 하는 것


DI(Dependency Injection)


각 계층, 클래스 사이 필요로 하는 의존관계 컨테이너가 자동으로 연결해준다.

각 클래스 사이 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해준다.

DL 사용시 컨테이너 종속성 증가하여 이를 줄이기 위해 DI 사용한다.


각 class/객체 사이의 의존관계를 빈 설정 정보를 바탕으로 container가 자동적으로 연결해 주는 것을 말한다. 


따라서 lookup과 관련된 코드들이 오브젝트 내에서 완전히 사라지고 컨테이너에 의존적이지 않은 코드를 작성할 수 있다. 


단지 빈 설정 파일에서 의존관계가 필요하다는 정보를 추가하면 된다.


Spring container 에서 지원한다. 스프링의 경우 초기 빈 Lookup을 제외하면 의존성이 항상 Injection 형태의 IoC를 사용하게 된다.




+ Recent posts