Spring Framework 는 Core Container, Data Access/Integration, Web, AOP, Instrumentation, Messaging, Test 로 그룹화 된, 약 20 개의 모듈로 구성된다.



1. Core Container


Core 컨테이너는 spring-core, spring-beans, spring-context, spring-context-support, spring-expression (Spring Expression Language) 모듈로 구성된다.

모듈 이름은 의존성 관리 도구에 사용되는 artifact ID 가 된다. (spring-<module>:<version> 형식)


spring-corespring-beans 모듈은 IoC 및 DI 기능을 포함하여 프레임워크의 기본적인 부분을 제공한다. 

BeanFactory 는 factory 패턴을 정교하게 구현하여, 프로그래밍 방식의 singleton 패턴을 없애고 실제 프로그램 로직에서 종속성의 구성과 사양을 분리할 수 있다.


spring-context 모듈은 Core 와 Beans 모듈에서 제공하는 견고한 기반 위에 구축되어, JNDI 레지스트리와 비슷한 프레임워크 스타일 방식으로 객체에 액세스하는 수단이다. Beans 모듈에서 기능을 상속하며, 국제화 (예: resource bundles 사용), 이벤트 전달(propagation), 리소스 로드 및 서블릿 컨테이너 같은 컨텍스트의 생성과 EJB, JMX 및 기본 원격 처리을 지원한다.

spring-context-support 는 캐싱(EhCache, Guava, JCache), 메일링(JavaMail), 스케줄링(CommonJ, Quartz) 및 템플릿 엔진(FreeMarker, JasperReports, Velocity) 을 위한 Spring 어플리케이션 컨텍스트로 일반적인 third-party 라이브러리를 통합할 수 있게 한다.


spring-expression 모듈은 런타임시 객체 그래프(특정 시점의 객체들의 참조 관계) 를 쿼리하고 조작하기 위한 강력한 표현식 언어(EL: Expression Language) 로, JSP 2.1 사양에 명시된 대로 통합 표현식 언어 (unified EL) 를 확장하였다. EL 은 속성 값 설정, 가져오기, 할당 / 메소드 호출 / 배열, 콜렉션, 인덱서의 내용 / 논리 및 산술 연산자 / 변수 / Spring 의 IoC 컨테이너에서 이름으로 객체를 조회하고, 일반 리스트의 projection, selection, aggregations 를 지원한다.



2. AOP / Instrumentation


spring-aop 모듈은 AOP Alliance 와 호환되는 관점 지향 프로그래밍(AOP) 구현을 제공한다. 예를 들어 분리되어야 하는 기능 구현 코드를 완전히 분리하도록 메소드 interceptors 와 pointcut 을 정의할 수 있다.


spring-aspects 모듈로 AOP 프로그래밍인 AspectJ 와 통합할 수 있다.


spring-instrument 모듈은 JVM 부트스트랩핑을 위한 Instrumentation 에이전트로, 특정 애플리케이션 서버에서 사용되는 instrumentation 지원 및 클래스 로더 구현을 제공한다. 

spring-instrument-tomcat 모듈은 Tomcat 용 Spring instrumentation 에이전트를 포함한다.



3. Messaging


spring-messaging 모듈은 메시징 아키텍처와 프로토콜을 지원하며, 메시징 기반 어플리케이션에 사용되는 Message, MessageChannel, MessageHandler 등의 주요 추상화를 제공한다.



4. Data Access/Integration


Data Access/Integration 계층은 JDBC, ORM, OXM, JMS 및 Transaction 모듈로 구성된다.


spring-jdbc 모듈은 JDBC 코딩과 데이터베이스 벤더의 특정 에러 코드를 분석할 필요가 없도록 JDBC 추상화 계층을 제공한다.


spring-tx 모듈은 특별한 인터페이스를 구현하는 클래스와 모든 POJO 를 위한 프로그래밍 및 선언적 트랜잭션 관리를 지원한다.


spring-orm 모듈은 JPA, JDO 및 Hibernate를 포함하는 ORM(Object-Relational Mapping) API를 위한 integration 계층을 제공한다. 


spring-oxm 모듈은 JAXB, Castor, XMLBeans, JiBX, XStream 같은 Object/XML 매핑 구현을 지원하는 추상화 계층을 제공한다.


spring-jms 모듈은 JMS(Java Messaging Service) 엑세스와 메시지 리스너 컨테이너를 지원하며, spring-messaging 모듈과의 통합을 제공한다.



5. Web


Web 계층은 spring-web, spring-webmvc, spring-websocket, spring-webmvc-portlet 모듈로 구성된다.


spring-web 모듈은 서블릿 리스너와 웹 어플리케이션 컨텍스트를 이용한 IoC 컨테이너 초기화와 multipart 파일 업로드 기능 같은 기본적인 웹 지향 통합 기능을 제공한다. 또한 HTTP 클라이언트와 Spring 원격 지원의 웹 관련 부분을 지원한다.


spring-webmvc 모듈(Web-Servlet) 은 도메인 모델 코드와 웹 폼을 깔끔하게 분리하는 MVC(Model-View-Controller) 와 REST Web Service 구현을 지원한다.


spring-webmvc-portlet 모듈은 spring-webmvc 모듈의 기능을 반영하고, Portlet 환경에서 사용될 MVC 구현을 제공한다.



6. Test


spring-test 모듈은 JUnit 나 TestNG 를 사용하여, Spring 구성 요소의 유닛 테스트 및 통합 테스트를 지원하며, 코드를 독립적으로 테스트할 수 있는 모의(mock) 객체를 제공한다.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,