스프링 모듈
스프링 프레임워크는 20여개의 서로 다른 모듈로 이루어져 있습니다.
각 모듈마다 세 개의 JAR 파일을 갖게 되는데 각각 컴파일된 .class 라이브러리, 원본 소스 JAR 파일, JavaDoc JAR 파일입니다.

이 모듈들은 크게 6개의 기능 카테고리에 속하게 됩니다.
이 6개의 기능은 엔터프라이즈 애플리케이션을 만들 때 보편적으로 필요한 기능들입니다.

그러나 스프링을 이용해 애플리케이션을 만든다고 해서 무조건 이 모듈들을 사용할 필요는 없으며 스프링은 부분적으로 유연하게 다른 프레임워크나 라이브러리와 융합할 수 있도록 설계 되어있습니다.

 

 

 

 

 

코어 스프링
스프링 프레임워크의 핵심은 빈의 생명주기와 설정 그리고 처리 방법을 관리하는 스프링 컨테이너입니다.
모든 스프링의 모듈은 코어 스프링 기반으로 구축됩니다.

AOP(Aspect Oriented Programming)
스프링은 AOP 모듈을 통해 관점 지향 프로그래밍을 풍부하게 지원합니다.
이를 통해 객체가의 결합도를 낮출 수 있도록 도와줍니다.

Data Access
JDBC, ORM, 트랜잭션 등 서비스 추상화를 통해 쉽게 데이터에 접근하는 방법을 제공합니다.

웹과 리모팅
스프링은 다양한 MVC 프레임워크와 같이 사용할 수 있지만 스프링 자체적으로 제공하는 spring mvc 모듈들이 만들어져 있습니다.
또한 스프링의 리모팅 기술로 RMI, Hessian, Burlap, JAX-WS , HTTP 호출자 그리고 REST API 모듈을 제공합니다.

Instrumentation
스프링의 인스트루먼테이션 모듈은 JVM에 에이전트를 추가하는 기능을 제공합니다.
정확히는 톰캣용 위빙 에이전트(weaving agent)를 제공하는데, 톰캣은 클래스 로더에 의해 로드되는 클래스 파일을 변환합니다.

테스팅
스프링은 테스트의 중요성을 인식하여 테스트에 전념할 수 있게 도움을 주는 모듈들을 제공합니다.
테스트 컨텍스트 프레임워크나 목(mock) 오브젝트 등을 이용해 테스트를 할 때 사용합니다.



스프링 모듈의 의존관계
스프링 프레임워크를 이용할 때에는 목적과 환경 사용 기술에 따라 필요한 모듈을 선택해야 합니다.
각 모듈들은 서로에게 선행되어야 하는 모듈이 있습니다.
즉 모듈간에 서로에게 의존관계에 있으므로 스프링을 이용할때 의존관계를 이용해야 할 필요가 있습니다.
스프링 모듈의 의존관계와 모듈 이름을 Maven 기준으로 알아보겠습니다.

 

 

 

ASM
ASM 모듈은 엄밀히 말해 스프링 모듈이 아닙니다.
ASM 모듈은 클래스 바이트코드 조작 및 분석 프레임워크인 ASM을 재 패키징한 모듈입니다.
ASM 프레임워크는 스프링 뿐 아니라 여러 프레임워크에서 및 라이브러리에서 사용되는데 이때 스프링 프레임워크와
ASM을 사용하는 다른 프레임워크와의 충돌을 방지하기 위해 org.springframework.asm 패키지로 재패키징해 독립적인 모듈로 제공합니다.

Core
Core 모듈은 거의 대부분의 다른 스프링 모듈에서 필요로 하는 공통 기능을 갖는 핵심 모듈입니다.
스프링에서 사용하는 주요 어노테이션, 컨버터, 상수, 유틸리티 클래스 등을 제공합니다.
필수 라이브러리 - 없음
선택적 의존 - ASM

Beans
Beans는 스프링 DI 기능의 핵심인 빈 팩토리와 DI 기능을 제공하는 모듈입니다.
빈 메타 정보, 빈 리더, 빈 팩토리의 구현과 프로퍼티 에디터가 포함되어 있습니다.
애플릿이나 모바일같은 제한된 환경에서 스프링의 DI 기능만 적용하고 싶으면 Beans 모듈까지만 적용하면 됩니다.
필수 라이브러리 - ASM, Core

AOP
AOP는 스프링의 프록시 AOP 기능을 제공하는 모듈입니다.
프록시 기반 AOP를 만들 때 필요한 어드바이스, 포인트컷, 프록시 팩토리빈, 자동 프록시 생성기 등을 제공합니다.
필수 라이브러리 - Beans

Expression
Expression은 스프링 표현식 언어(SpEL) 기능을 지원합니다.
필수 라이브러리 - Core

Cotext
Cotext는 어플리케이션 컨텍스트 기능을 제공합니다.
어플리케이션 컨텍스트를 만드는 데 필요한 대부분의 기능과 빈 스캐너, 자바코드 설정 기능, EJB 지원, 포메터, 로드타임 위빙, 표현식,
JMX JNDI, 리모팅, 스케줄링, 스크립트 언어 지원, 검증기 등의 컨테이너로서의 주요한 기능을 담고 있습니다.
단순한 빈팩토리가 아닌 엔터프라이즈 어플리케이션 프레임워크로 사용하기 위해 반드시 필요합니다.
필수 라이브러리 - AOP, Expression
선택적 의존 - 로드 타임 위빙을 사용하는 경우 Instrument 모듈 필요

Context.Support
Context.Support의 경우 어플리케이션 컨텍스트에서 필요로 하는 부가기능을 지원합니다.
EhCache, 메일 추상화 서비스, CommonJ와 Quartz 스케줄링, FreeMarker, JasperReports, Velocity 팩토리 기능을 제공합니다.
해당 기능을 사용하지 않는다면 Context.Support은 필요 없습니다.
단 스프링 MVC가 Context.Support에 의존하므로 스프링 MVC를 사용한다면 필수로 추가해야 합니다.
필수 라이브러리 - Context
선택적 의존 - Quartz의 JobStore 기능을 활용하는 경우 JDBC, Transaction 모듈 필요

트랜잭션(Transaction)
트랜잭션은 스프링의 데이터 액세스 추상화의 공통 기능을 담고 있습니다.
DataAcssessException 예외 계층구조와 트랜잭션 추상화 기능, 트랜잭션 동기화 저장소 그리고 JCA 기능을 포함합니다.
필수 라이브러리 - Context


JDBC
JDBC는 JDBC 템플릿을 포함한 JDBC 지원 기능을 제공합니다.
JdbcTemplate 등의 JDBC 지원 오브젝트 외에도 스프링이 직접 제공하는 DataSource 구현 클래스들이 제공됩니다.
필수 라이브러리 - 트랜잭션

ORM
ORM은 하이버네이트, JPA, JDO, iBatis와 같은 ORM에 대한 스프링의 지원 기능을 포함합니다.
ORM은 내부적으로 JDBC를 사용합니다.
필수 라이브러리 - JDBC
선택적 의존 - OpenSessionInViewFilter 같은 일부 기능은 Web 모듈에 선택적으로 의존

Web
Web은 스프링 웹 기술의 공통적인 기능을 정의한 모듈입니다.
스프링 MVC 외에도 스프링이 지원하는 스트럿츠, JSF 등을 적용할 때 필요합니다.
또한 Caucho, HttpInvoker, JAX-RPC, JAX-WS 등의 리모팅 기능도 포함하고 있습니다.
기본적으로 바인딩, 컨텍스트 로더, 필터, 멀티파트, 메세지 컨버터 기능도 제공합니다.
필수 라이브러리 - Context
선택적 의존 - XML을 사용하는 메세지컨버터 기능에는 OXM 모듈이 필요

웹 서블릿(Web.Servlet)
웹 서블릿은 스프링 MVC 기능을 제공하는 모듈입니다.
전통적인 MVC와 최신 @MVC 기능이 모두 포함되어 있습니다.
필수 라이브러리 - Web, Context.Support
선택적 의존 - XML을 사용하는 뷰나 메세지컨버터 등을 사용할 때에는 OXM 모듈이 필요

웹 포틀릿(Web.Portlet)
웹 포틀릿은 Portlet 개발에 사용하는 스프링 모듈입니다.
필수 라이브러리 - Web.Servlet

웹 스트럿츠(Web.Struts)
웹 스트럿츠는 스트럿츠 1.x를 지원하는 모듈입니다.
필수 라이브러리 - Web

JMS
JMS는 스프링의 JMS 지원 기능을 사용할 때 필요한 모듈입니다.
필수 라이브러리 - Transaction

Aspects
Aspects는 스프링이 제공하는 AspectJ AOP를 사용할 때 필요한 모듈입니다.
AspectJ는 스프링의 @Configurable을 이용한 도메인 오브젝트 DI 기능, JPA 예외 변환기, AspectJ 트랜잭션을 만들때도 사용된 기술입니다.
선택적 의존 - JPA 지원 기능 사용시 ORM, 트랜잭션 기능 지원시 Transaction 필요

Instrument
Instrument는 스프링의 로드타임위버(LTW) 기능을 적용할 때 필요합니다.
JVM의 -javaagent 옵션을 자용해 자바에이전트로도 사용됩니다.

Instrument.Tomcat
Instrument.Tomcat은 어플리케이션이 아닌 톰캣 서버의 클래스 로더로 사용하는 모듈입니다.

Test
Test는 스프링의 테스트 지원기능을 가진 모듈입니다.
테스트 컨텍스트 프레임워크나 목 오브젝트 등을 이용해 테스트 할 때 사용됩니다.
테스트용 모듈이기 때문에 운영 중에는 사용되지 않습니다.


스프링 모듈과 Maven artifactId 및 기능 명세

 

 

 

 

스프링 모듈을 얻을 수 있는 방법은 쉽게 두가지가 있습니다.
첫 번째는 http://spring.io/projects 를 통해 다운로드 하는 것이고, 두번째는 메이븐을 통해 다운로드 받는 방법입니다.


Maven Dependency 설정
Maven을 이용한다면 pom.xml 파일의 dependency 설정만으로 필요한 모듈을 받을 수 있습니다.
스프링 모듈은 메이븐의 중앙 저장소(central repository)에 등록되어 있습니다.
다음은 스프링 웹서블릿 모듈에 대한 dependency 설정입니다.
1
2
3
4
5
           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>3.0.7.RELEASE</version>
           </dependency>
cs

 

 

 

groupId의 경우 모든 스프링 모듈은 고정으로 사용하고 artifactId의 경우 스프링 모듈을 사용합니다.
메이븐의 경우 모듈간의 의존관계를 자동으로 해결해주기 때문에 webmvc 모듈을 메이븐으로 받을 경우 웹 서블릿(webmvc)가 의존하는 
Context Support, Context, AOP, Beans, Core 모듈을 자동으로 모두 내려받기 때문에 일일이 신경쓸 필요가 없습니다.

 

 

 

 

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!