먼저 스프링이란 무엇일까?
스프링 프레임워크의 정의는 다음과 같다.
- 자바(JAVA) 플랫폼을 위한 오픈소스(Open Source) 어플리케이션 프레임워크
- 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크
- 자바 개발을 위한 프레임워크로 종속 객체를 생성해주고, 조립해주는 도구
- POJO(Plain Old Java Object) BEAN CONTAINNER
즉, 자바 객체를 직접 관리하며, 각 객체의 생성과 소멸 = 라이프 사이클을 관리해준다.
이러한 특성 때문에 스프링 컨테이너에 내가 사용할 객체를 맡겨두고 필요할 때 받아온다.
그래서 제어반전(IoC) (컨트롤의 제어권이 사용자가 아니라 스프링에서 제어),
의존성주입(DI) (각 계층이나 서비스 간에 의존성이 존재할 경우 연결시켜줌),
관점 지향 프로그래밍(AOP) (트랜잭션이나 로깅, 보안과 같은 모듈을 관리)
등을 제공 관리할 수 있으며 따라서 확장성이 높다. (iBatis, MyBaits, Hibernate 등과 연결)
결국 간단히 말해서, 다양한 라이브러리와 연동을 쉽게해주고
객체관리를 스프링이 해준다. 따라서 코드가 매우 간결해지는 효과도 주어진다.
또한, 중요한 관점으로 오랫동안 사용되어 상당히 안정화되어있다는 점이다.
스프링을 쓰지 않을 때 코드를 보도록 하자
각 Controller, Servlet를 일일이 만들어 줘야 하며,
DispatcherServlet, HandlerMapping등 모두 다 만들어주어야한다.
이 처럼 맵을 통해 각 서블릿으로 보내주어야 하므로 굉장히 복잡해진다.
하지만 스프링을 통했을 때의 환경을 보자.
각 컨트롤러가 하나에 모두 들어가며, Servlet과 HandlerMapping은 설정파일로 바뀌기 때문에
클래스 파일이 현저게하 줄고, 객체생성을 직접하지 않으므로 코드가 매우 깔끔해진다.
이제 Spring App단의 환경설정 파일을 보며 설정파일에서 어떻게 객체가 할당되는지 알아보자.
ApplicationContext.xml은 App단의 클래스와 파일에 대한 설정이다
Web단을 가지 않는 한 service에서 바로 View로 데이터 가공한 후 전송하기 때문에
DAO와 Service에 관련된 설정이 들어간다는 것을 알 수 있다.
먼저, DB부분부터 보도록 하자, 만약 MyBatis를 사용하고자 한다면,
MyBatis-Config.xml이 필요하다 여기에는 Mapper가 등록되야하고
Mapper는 Interface나 xml형태로 만들어서 MyBatis-Config.xml에 등록해놔야 한다.
이제 위에서 DAOImpl 들을 보도록 하자. 각 Impl들은 Bean에 클래스경로와 ID를 등록한다.
Spring을 이용한 DAO는 JDBCTemplate이 있어야하고
할당 받을때는 @Autowired나 @Resources 그리고 Context.getBean(“id”)로 받을 수 있다.
JDBCTemplate은 DataSource를 생성자나 Set메소드로 받아야 하므로
c태그나 p태그를 사용하여 받아준 다는 것을 등록해놓자.
근데 이 때, C태그나 P태그와 맞게끔 클래스에서 생성자나 Set메소드를 설정해놓아야한다.
나머지의 구동방식도 마찬가지이다. 각 DAO는 사용하기위한 설정 클래스가 필요하고
이 설정 클래스들 또한 앞서 필요한 파일들이 있다.
그렇게 모두 등록해 놓은 후 Service나 xml에 설정된 bean을 사용할 때에는
위에서 언급한대로 @Autowired, @Resources, Context.getBean(“id”)로 받아야 한다.
AOP에 대하여 알아보도록 하자.
먼저 AOP는 Service와 Controller 중간에서 데이터의 흐름을 가로챌 수 있다.
AOP에 등록된 서비스가 만약에 수행된다면, 먼저 Proxy가 만들어져서 Service를 호출하기 전에
AOP를 무조건 거치게 된다. AOP를 거친 후 AOP 수행에 따라 Service를 수행하기도 하고 돌아가기도 한다.
Web단의 설정을 보도록 하자.
Web.xml에는 App단의 설정파일과 Servlet설정파일 그리고 User와 Dispatcher Servlet사이에서
그 요청을 가로채서 데이터를 가공하거나 처리할 수 있다.
보통 UTF-8같은 처리 or 유효성검증을 하기도 한다.
Dispatcher Servlet은 먼저 Servlet.xml파일로 그 내용이 설정되고 이 파일이 Web.xml에서 호출된다.
Servlet.xml에서 Context Component-Scan은 HandlerMapping이 내재되어있기 때문에
알아서 알맞은 Controller에 할당을 해준다.
또한, Controller와 Dispatcher Servlet의 흐름을 가로채는 Interceptor를 여기에 등록해놓는다.
Interceptor에서는 login이 안되어있는데 페이지를 들어가려하거나 하는 경우에
login 세션의 값이 null인지 체크를 하여 되돌려 보내거나 처리를 하는 등으로 쓸 수 있다.
Controller는 String과 ModelAndView를 통해 Dispatcher와 데이터를 주고 받는다.
말 그대로 함수의 데이터 형이 String이거나 ModelAndView라는 뜻이다.
Controller는 Web.xml에서 불러진 Application Context.xml에서 Service를 할당받는다.
그리고 요청받은것에 따라 각 함수가 수행된다.
이제 한꺼번에 설명하자면, 유저가 Request를 보내면 Filter가 Dispatcher에 가는 그 흐름을 가로채
UTF-8로 그 형태를 바꿔주거나 유효성검증등을 해준다.
이제, Web.xml에 등록된 Action-Servlet.xml파일에서 Context Coponent-Scan을 통해
알맞은 Controller로 Request를 String 또는 ModelAndView를 통해 주고 받는다.
이 과정에서 Action-Servlet.xml에 등록된 Interceptor가 그 흐름을 가로채
login 세션등을 체크하여 Service를 수행하거나 페이지를 되돌려 보낼 수 있다.
Controller에서 Service를 수행할 때에는, Web.xml에 등록된 Application-Context.xml
을 부르고 그 안에 등록된 Service Bean을 할당하여 수행한다.
이 때, 만약 Service가 AOP에 등록되어있다면 Proxy가 만들어져 Service를 수행하기전
Proxy를 거쳐 AOP함수를 수행하게 된다. 이제 Service는 DAOImpl을 호출한다.
역시 Application-Context.xml에 등록된 bean을 호출하여 DAOImpl을 수행하고
DAOImpl은 DB와 연동될 때, Application-Context.xml에 설정된 각 설정파일을 통해
DB에 접근하며 Spring Framework의 기본 흐름은 끝난다.
'WEB Framwork > Spring' 카테고리의 다른 글
Spring Intro - 1. MVC 란? (0) | 2020.01.22 |
---|---|
Spring DB - 7. Mybatis 연동 (0) | 2020.01.22 |
Spring DB - 6. DataSource Spring (0) | 2020.01.22 |
Spring DB - 5. JDBC Spring (0) | 2020.01.22 |
Spring DB - 4. JDBCUtil을 만들어 사용해보자. (0) | 2020.01.22 |