▶ Apache Maven
자바용 프로젝트 관리 도구로 Project Object Model(POM) XML문서를 통해해당 프로젝트의 버전 정보 및 라이브러리 정보들을 통합하여관리하는 프레임워크
라이브러리 종속성
일반적인 프로젝트는 개발자가 필요한 라이브러리를 직접 찾아서추가해야 하지만 Maven을 사용하면 pom.xml문서에 사용하고싶은라이브러리를 등록하여 자동으로 프로젝트에 추가되게 하여라이브러리 관리의 편리성 제공
Maven의 종속성
▶ POM
POM(Project Object Model)은 하나의 프로젝트에서 사용하는 자바 버전, 라이브러리, 플러그인 구성을 통합하여 관리할 수 있게각 설정 정보를 XML로 문서화한 것
▶ pom.xml의 구성

▶ Spring Framework
자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로간단하게 스프링(Spring)이라고도 부름 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며대한민국 공공기간의 웹 서비스 개발 시 사용을 권장하고 있는전자정부 프레임워크의 기반 기술로 쓰임
특징
| DI (Dependency Injection) 의존성 주입 | 설정 파일이나 어노테이션을 통해 객체 간의 의존 관계를설정하여 개발자가 직접 의존하는 객체를 생성할 필요 없음 |
| Spring AOP (Aspect Oriented Programming) 관점 지향 프로그래밍 | 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로필요로 하는 기능의 경우 해당 기능들을 분리하여 관리 |
| POJO (Plain Old Java Object) | 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어 개발이 쉬우며 기존 라이브러리의 지원 용이 |
| IoC (Inversion of Control) 제어 반전 | 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다는뜻으로 객체의 생성부터 모든 생명주기의 관리까지프레임워크가 주도 객체를 생성하고 직접 호출하는 프로그램이 아니라만들어둔 자원을 호출하여 사용 |
| Spring JDBC | MyBatis나 Hibernate 등의 데이터베이스를 처리하는영속성 프레임워크와 연결할 수 있는 인터페이스 제공 |
| Spring MVC | MVC 디자인 패턴을 통해 웹 애플리케이션의 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 개발자가아닌 서버가 객체들을 관리하는 웹 애플리케이션 구축 |
| PSA (Portable Service Abstraction) | 스프링을 다른 여러 모듈을 사용함에 있어별도의 추상화 레이어 제공 예를 들어 JPA를 사용할 때 Spring JPA를 사용하여추상화하므로 실제 구현에 있어 Hibernate를 사용하든 EclipseLink를 사용하든 개발자는 모듈의 의존 없이프로그램에 집중할 수 있음 |
▶ Spring의 구성 모듈
Data 접근 계층
JDBC나 데이터베이스에 연결하는 모듈로 Data 트랜잭션에 해당하는기능을 담당하여 영속성 프레임워크의 연결 담당
MVC 계층(MVC / Remoting)
Spring Framework에서 Servlet, Struts 등 웹 구현 기술과의 연결점을Spring MVC 구성으로 지원하기 위해 제공되는 모듈 계층또한 스프링의 리모팅 기술로 RMI, Hessian, Burlap, JAX-WS, Http 호출자그리고 REST API 모듈 제공
AOP 계층
Spring에서 각 흐름 간 공통된 코드를 한 쪽으로 빼내어 필요한 시점에해당 코드를 첨부하게 하기 위해 지원하는 계층 별도의 proxy를 두어 동작, 이를 통해 객체 간의 결합도를 낮출 수 있음
Core Container
Spring의 핵심 부분이라고 할 수 있으며 모든 스프링 관련 모듈은이 Core Container 기반으로 구축 Spring의 근간이 되는 IoC(또는 DI) 기능을 지원하는 영역 담당BeanFactory를 기반으로 Bean클래스들을 제어할 수 있는 기능 지원
모듈 정리
| 모듈 명 | 내용 |
| spring-beans | 스프링 컨테이너를 이용해서 객체를 생성하는 기본 기능 제공 |
| spring-context | 객체 생성, 라이프 사이클 처리, 스키마 확장 등의 기능 제공 |
| spring-aop | AOP 기능 제공 |
| spring-web | REST클라이언트 데이터 변환 처리, 서블릿 필터, 파일 업로드 지원등 웹 개발에 필요한 기반 기능 제공 |
| spring-web | 스프링 기반의 MVC 프레임워크, 웹 애플리케이션을 개발하는데필요한 컨트롤러, 뷰 구현 제공 |
| spring-websocket | 스프링 MVC에서 웹 소켓 연동을 처리할 수 있도록 제공 |
| spring-oxm | XML과 자바 객체 간의 매핑을 처리하기 위한 API 제공 |
| spring-tx | 트랜잭션 처리를 위한 추상 레이어 제공 |
| spring-jdbc | JDBC프로그래밍을 보다 쉽게 할 수 있는 템플릿 제공 |
| spring-orm | Hibernate, JPA, MyBatis 등과의 연동 지원 |
| spring-jms | JMS서버와 메시지를 쉽게 주고 받을 수 있도록 하기 위한 템플릿 |
| spring-context-support | 스케줄링, 메일발송, 캐시연동, 벨로시티 등 부가기능제공 |
▶ Spring의 동작 구조
Spring 애플리케이션

Spring 웹

XML파일
Spring컨테이너 구동 시 한 개의 spring환경 설정된 xml파일을 불러오는데이 파일에 bean, aop, transaction 등 여러 사항을 다 작성하여 구동
@Annotation
xml파일에는 구동 시킬 필수 요소만 작성하고 소스 코드에Annotation으로 표시하여 구동
▶ Spring MVC
Spring Framework에서는 클라이언트의 화면을 표현하기 위한 View와서비스를 수행하기 위한 개발 로직 부분을 나누는 MVC2 패턴 지원또한 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서관리하여 유연한 웹 애플리케이션을 쉽게 구현 및 개발 가능
Spring MVC 요청 처리 과정

Spring MVC 구성 요소
| 구성 요소 | 설명 |
| DispatcherServlet | 클라이언트의 요청(Request)을 전달 받고 요청에 맞는 컨트롤러가리턴한 결과 값을View에 전달하여 알맞은 응답(Response) 생성 |
| HandlerMapping | 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할 지 결정 |
| Controller | 클라이언트의 요청을 처리한 뒤 결과를 DispatcherServlet에게 리턴 |
| ModelAndView | 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음 |
| ViewResolver | 컨트롤러의 처리 결과를 생성할 View 결정 |
| View | 컨트롤러의 처리 결과 화면 생성, JSP나 Velocity 템플릿 파일 등을 View로 사용 |
▶ Spring IoC
IoC(Inversion of Controller)는 프로그램을 구동하는데 필요한 객체에 대한생성, 변경 등의 관리를 프로그램을 개발하는 사람이 아닌프로그램을 구동하는 컨테이너에서 직접 관리하는 것을 말함스프링은 IoC구조를 통해 구동 시 필요한 객체의 생성부터 생명주기까지해당 객체에 대한 관리를 직접 수행함
▶ Spring IoC 컨테이너
스프링에서 관리하는 객체를 Bean(빈)이라고 하고 해당 빈들을 관리한다는 의미로 컨테이너를 Bean Factory라고 함
IoC 컨테이너 역할
1. 객체의 생명주기와 의존성 관리
2. VO(DTO / POJO) 객체의 생성, 초기화, 소멸 등의 처리 담장
3. 개발자가 직접 객체를 생성할 수 있지만 해당 권한을컨테이너에 맡김으로써 소스 코드 구현 시간 단축
▶ Spring DI
DI(Dependency Injection)는 IoC 구현의 핵심 기술이라고 할 수 있음사용하는 객체를 직접 생성하여 만드는 것이 아니라 컨테이너가빈의 설정 정보를 읽어와 자동으로 해당 객체에 연결하는 것 의미이렇게 의존성을 주입 받게 되면 이후 해당 객체를 수정해야 할 상황이생겼을 때 소스 코드의 수정을 최소화 할 수 있음
DI의 장점
1. 개발자가 작성해야 할 코드가 단순해짐
2. 각 객체 간의 종속 관계(결합도) 해소 가능
* 객체간의 종속 관계(결합도) : 한 클래스에서 필드 객체를 생성 할 때 발생하는두 객체 간의 관계를 말하며, 각 객체 간의 내용이 수정될경우 영향을 미치는 정도를 나타냄
▶ Spring DI 종류
Setter메소드를 통한 의존성 주입
의존성을 주입 받는 Setter메소드를 만들고 이를 통해 의존성 주입
생성자를 통한 의존성 주입
필요한 의존성을 포함하는 클래스에 생성자를 만들고이를 통해 의존성 주입
메소드를 통한 의존성 주입
의존성을 입력 받는 일반 메소드를 만들고 이를 통해 의존성 주입