차근차근 개발자 되기

Spring

90일차: Spring Framework Anotation DI / Spring MVC_2021.10.26

wellow 2021. 10. 26. 22:49

 

목차

1.      Anotation을 이용한 DI (Dependency Injection)

2.      Spring MVC의 구조와 흐름

 

 

1. Anotation을 이용한 DI (Dependency Injection)

 

1) Anotation을 이용해서 DI를 할 때의 흐름

 

 

2) Anotation으로 객체 생성

- 어노테이션(@)을 이용하면 spring의 환경 설정 파일에서 더 이상 <bean> 태그로 빈 객체를 생성하지 않고 어노테이션을 이용해서 객체를 생성할 수 있다.

- 이때, 스프링 환경설정 xml 파일에서 <context:component-scan> 태그를 사용한다.

- 형식: <context:component-scan base-package="패키지">

- 지정된 패키지 하위에서 @Component, @Controller 등의 어노테이션(또는 하위 어노테이션) 이 적용된 클래스를 검색하여 빈으로 등록한다.

- ex) <context:component-scan base-package="sample13"/>

→   ① sample13 패키지 하위 클래스를 스캔한다는 의미를 가진다.

      ② @Component, @Controller, @Service, @Repository 어노테이션이 붙어있는 클래스는 @Autowired 어노테이션 

         을 이용해서 필요한 빈 객체를 setter 메소드 없이 주입을 받는다.

 

 

 

2. Spring MVC의 구조와 흐름        

 

1) Spring MVC 패턴의 구조

- Spring MVC 패턴에서는 Front Controller인 Dispatcher Servlet이 모든 요청의 진입점 역할을 한다.

- 아파치 톰캣을 구동하면 가장 먼저 web.xml 파일이 실행되는데, web.xml 파일 안에 DispatcherServlet 클래스의 이름과 위치가 등록되어 있다.

- 스프링의 환경 설정 파일인 servlet-context.xml과 root-context.xml 파일은 web.xml 파일이 실행될 때 함께 실행된다.

 

 

 

2) 요청 처리 순서

① DispatcherServlet이 요청을 수신

- 단일 front controller servlet

- 요청을 수신하여 처리를 다른 컴포넌트에 위임

- 어느 컨트롤러에 요청을 전송할지 결정

② DispatcherServlet은 HandlerMapping에 어느 컨트롤러를 사용할 것인지 요청

- 지금은 @RequestMapping을 이용해서 요청을 받는다.

③ DispatcherServlet은 요청을 컨트롤러에게 전송하고 컨트롤러는 요청을 처리한 후 결과 리턴

- 비즈니스 로직 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 뷰에서 사용됨

④ ModelAndView 오브젝트에 수행 결과가 포함되어 DispatcherServlet에 리턴

⑤ ModelAndView는 실제 JSP정보를 갖고 있지 않으며, ViewResolver가 논리적 이름을 실제 JSP이름으로 변환

⑥ View는 결과 정보를 사용하여 화면을 표현함

 

3) web.xml에 들어가는 내용

① DispatcherServlet 설정

- DispatcherServlet을 등록하고 servlet mapping을 설정한다.

 

 

 

② Spring의 환경 설정 파일

- Spring의 환경 설정 파일(servlet-context.xml)을 등록한다.

- DataBase 접속과 같이 공통적인 내용을 root-context.xml 파일에 등록한다.

 

 

③ 한글 인코딩을 처리하기 위한 필터

- 한글 인코딩을 처리하기 위한 필터

 

 

* 환경설정 파일은 resources 폴더에 위치시켜도 되는데, 이때 ‘classpath:’를 붙여줘야 한다.

ex) <param-value>/WEB-INF/spring/appServlet/classpath:servlet-context.xml</param-value>

 

4) Spring의 환경 설정 파일: servlet-context.xml

① ViewResolver 등록

  - view 파일을 저장할 최상위 디렉토리(prefix) : /WEB-INF/views

 - view 파일의 확장자(suffix) : .jsp

 

② base-package 등록

- base-package 하위 클래스를 스캔한다는 의미를 가진다.

- base-package 하위 클래스에 @Controller, @Service, @Repository 어노테이션이 붙어있는 클래스는 @Autowired 어노테이션을 이용해서 필요한 빈 객체를 setter 메소드 없이 자동으로 주입 받는다.

 

 

 

5) Spring의 환경 설정 파일: root-context.xml

① DB 연동을 위한 <bean> 등록

- 스프링으로 DB와 연동하는 경우, 세 가지 <bean>이 root-context.xml 파일에 등록된다.

 

6) Controller 클래스(HomeController.java) 구현

- 컨트롤러 클래스 위에는 @Controller를 붙인다.

- 클라이언트의 요청을 받기 위해서 받기 위해서는 @RequestMapping으로 요청을 받는다.

- 컨트롤러에서 view 페이지로 값을 가지고 갈 경우에는 Model이나 ModelAndView 클래스에 값을 저장해서 이동한다.

- return 할 경우에는 prefix와 suffix를 제외한 나머지 경로 파일명만 기술한다.

 

 

 

7) View 페이지(home.jsp) 구현

- 컨트롤러 클래스에서 Model에 저장해서 넘어온 값을 표현 언어(Expression Language)로 출력한다.