Spring Framework
자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
스프링을 쓰는 이유
- 대표적으로 인터프라이즈 시스템 개발이 너무 복잡하기 때문.
- 기술적인 제약조건과 요구사항이 늘아며, 엔터프라이즈 애플리케이션이 구현해야할 핵심 기능인 비즈니스 로직의 복잡함이 증가함.
특징
- 코드의 경량화, 개발중 테스트가 쉬움.
- 크기와 부하의 측면에서 경량
- 제어의 역행(IOC)라는 기술을 통해 application의 느슨한 결합 도모
- 관점지향프로그래밍(AOP) 프로그래밍을 위한 풍부한 지원을 함
- 경량 컨테이너로써 자바 객체를 직접 관리. 각 객체의 생성, 소멸과 같은 LifeCycle을 관리하며, 스프링으로부터 객체를 얻어올 수 있음.
- 확장성이 높음. 수많은 라이브러리 지원 및 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이.
- 애플리케이션 프레임워크(일종의 Container)
- 특정 계층이나 기술, 업무 분야에 국한되지 않고, 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크.
- 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 둠.
주요 기술
- POJO(Plain Old Java Object)
- 단순히 평범한 자바빈즈(JavaBeans) 객체.
- 별도로 종속되지 않는 자바 객체를 통칭하여 의미.
- 처음에 javax.ejb 인터페이스를 상속받지 않은, 무거운 EJB와는 반대로 경량의 자바 객체를 지칭하는 용어로 소개.
- 특정 인터페이스를 구현하거나 상속받을 필요가 없어 기존의 라이브러리 등을 지원하기 용이하고, 객체가 가벼움.
-
IoC(Inversion Of Control)
- 스프링에서 객체를 생성하고 조립하는 컨테이너(Container)로, 컨테이너를 통해 생성된 객체를 Bean(=Object)이라 부름.
- Bean Factory, Application Context라고도 칭하나, 일반적으로 Application Context를 말함.
- Bean Factory와 Applicaton Context는 각각 BeanFactory, ApplicationContext 두 개의 인터페이스 로정의.
- 컨테이너가 본격적인 IoC 컨테이너로서 동작하려면 POJO 클래스와 설정 메타정보가 필요.
- 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출.
-
DI(Dependency Injection)
- 의존성 주입. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우, 프레임워크가 서로 연결시켜줌.
- 부품들을 생성하고, 제품을 조립해주는 공정과정을 대신해 주는 라이브러리 (역할자)
- 개발 핵심 처리 루틴의 수정 없이 제품(객체)를 다른 제품(객체)로 쉽게 대체하여 생성 가능하도록 하는 역할을 함.
- 명세서에 따라서 자동적으로 부품을 활용하여 제품을 조립.
- 생성하기 원하는 객체를 명세서(XML)에 기술하고, 그 부품과 의존성(Dependency)들을 보관하는 일을 처리. 그러한 데이터를 보관하는 공간을 컨테이너라고 함.(IoC 컨테이너)
-
AOP(Aspect Oriented Programming)
(출처: http://ooz.co.kr/193?category=818548)
- 관점 지향 프로그래밍.
- 클래스들이 공통으로 갖는 기능이나 절차 등을 하나의 것으로 묶어 빼내어 별도로 관리하려는 목적.
- 서비스 모듈이 자신의 주요 관심 사항(핵심 기능)에 대한 코드만 포함하고, 그 외의 관심 사항은 모두 Aspect로 옮겨지므로 코드가 깔끔해지고, 가독성도 높아짐.
- 부가적인 업무의 예로 로그인(Login), 트랜잭션(Transaction), 보안(Security), 캐싱(Caching)과 같은 내부 처리(비지니스, Business) 작업이 있다.
Life Cycle
- 브라우저(클라이언트)가 서버에 요청을 하면(ex.날씨) DispatcherServlet이 요청을 받아, 가장 먼저 HandlerMapping에 다시 요청함.
- HandlerMapping은 요청받은 것에 가장 적합한 Controller를 찾아내서 DispatcherServlet으로 반환함.
- Controller를 반환받은 DispatcherServlet은 다시 HandlerAdapter에게 요청을 보내고, HandlerAdapter은 해당하는 Controller에 적합한 Method를 요청하고, Model이라는 데이터로 반환함. 다시 DispatcherServlet에 반환함.
- 반환받은 정보를 ViewResolver에 요청함.
- ViewResolver은 요청받은 정보에 적합한 View(Jsp 문서)를 찾아 DispatcherServlet으로 반환함.
- DispatcherServlet은 반환 받은 View 문서를 사용자에게 반환함.
디렉터리 구조
-
homecontroller.java: Dispatcher의 역할 수행(비즈니스 로직 분기, 수행결과의 응답)
-
log4j.xml: 로그 출력 범위 설정 파일
- servlet-context.xml
- 서블릿의 context 설정
- controller의 매핑 설정 및 view 처리 설정 등
- root-context에 등록된 bean 참조
- root-context.xml: 서비스와 respository 설정
- home.jsp: 처음 실행될 때의 화면
- web.xml: 서버 설정 파일
- pom.xml: maven을 통한 라이브러리 설정 파일
donate.html