Spring에는 여러 모듈이 존재하며, 이들은 각각 다른 기능을 제공한다. 모든 모듈을 사용할 필요는 없고 골라서 사용하는게 가능하다.
흔히 spring architecture 소개를 한다는 것은 이 모듈들이 뭐가 있는지를 설명하는 것이라고 생각하면 된다.
크게 Core Container, Data Access / Integration, Web, Misc.와 같이 4개로 나누는게 가능하다.
이전 글에서 간략히 설명했던 것과 관련된 모듈들의 모음이다.
프레임웍의 핵심 기능들을 제공하는 모듈
DI, IoC 관련 기능들도 여기에 포함된다.
BeanFactory
를 제공해주는 모듈
Spring에서 활용하는 design pattern으로 factory design pattern이라는게 있다. 이 pattern은 굳이 Spring이 아니더라도 적용이 가능한 pattern이지만, 직접 구현하는 피곤함을 최소화하기 위해 Spring에서 나름 최적화된 factory design pattern 관련 class를 제공하는데 그게 바로 BeanFactory
다. 이 링크에서 간단하게 잘 설명이 되어 있다.
Core
과 Bean
module을 기반으로 하는 module이다.
정의된 object들을 접근하는 매개체가 되어준다.
여기에 속하는 중요한 녀석 중 하나로 ApplicationContext
라는 interface가 있다.
runtime때 object graph를 조작하거나 접근할 때 쓸 수 있는 강력한 expression language를 제공하는 모듈이다.
Spring Expression Language의 약자다.
원래는 Java에서 database에 접근할 때 사용할 수 있는 API들의 모음을 의미한다.
이 JDBC와 관련된 귀찮은 코드들을 한층 더 감싸서 모듈 형태로 제공하는 것이 Spring의 JDBC다.
JDBC 관련 추상화 layer을 제공하는 것이라고 생각하면 된다.
Object Relational Mapping의 약자다. 이게 뭔지는 위키 참고
위키를 보면 알겠지만 이를 직접 구현하는건 지옥일거고, 실제로 여러 ORM 관련 api들이 이미 존재한다. JPA, JDO, Hibernate, iBatis가 대표적.
이 api들을 위한 integration layer을 제공하는 module이 바로 Spring의 ORM module이다.
Object XML Mapping의 약자다.
Spring 고유의 module이며, 말 그대로 Java Object와 XML 간의 mapping을 관리하는데 사용할 수 있는 module이다.
이를 활용하는 것들로 JAXB, Castor, XMLBeans, JiBX, XStream이 있다.
Java Messagiing Service의 약자다.
message를 만들거나 소모하는 것과 관련된 기능을 제공하는 모듈이다.
기본적인 웹 지향 통합 기능들을 제공한다.
대표적으로 하나의 파일을 여러개의 part로 나눠서 업로드하는 multipart file upload, servlet lisetner과 웹지항 application context를 기반으로 한 IoC container 생성 등이 있다.
portlet 환경에서 사용될 MVC pattern 구현 model을 제공한다.
Java의 Web-Servlet을 구현한 module과 매우 유사한 기능을 제공한다. Web Servlet에 대한 설명은 다음 링크 참고
AOP paradigm을 원할하게 수행할 수 있도록 도와주는 module이다.
method-interceptor과 pointcut들을 프로그래머가 정의할 수 있도록 해서, 분리되어야 하는 기능들을 구현하는 코드들이 서로 연관이 없을 수 있도록 하는걸 도와준다.
STOMP(Simple Text Oriented Message Protocol)라는 녀석을 지원해주는 module이다. 이를 application에서 WebSocket sub-protocol 용도로 사용할 수 있도록 제공해준다.
그러면 WebSocket들이 서로 이 STOMP를 활용해서 message를 송수신을 할텐데, 이 message들을 전달하는 과정 및 처리에 사용되는 annotation programming model도 여기서 제공해준다.