티스토리 뷰
Spring Framework는 여러가지 모듈로 구성되어 있다. Framework에서 제공하는 기능들이 모듈화 되어 있어 필요한 모듈만 채택하여 선택적으로 사용이 가능하다. 각 모듈은 서로간의 의존되어 있으며 특정 모듈 추가 시 의존성이 있는 모듈이 모두 자동으로 추가되는 것은 아니기 때문에 명시적으로 다른 모듈의 추가가 필요할 수도 있다. 어떤 모듈이 추가되는지 확인하기 위해서는 https://search.maven.org 에서 사용하고자 하는 모듈을 검색한 다음 해당 모듈의 pom.xml을 확인하면 된다.

1. Core Container (코어 컨테이너)
Spring의 중심 축이 되는 기능들이 모여있는 모듈이다.
- spring-core: 프레임워크의 기반이 되는 핵심 유틸리티(예: IoC 컨테이너에서 사용되는 클래스)를 제공합니다.
- spring-beans: 의존성 주입(Dependency Injection)의 핵심 모듈로, 객체의 생성 및 설정을 담당합니다.
- spring-context: 국제화, 이벤트 처리, 리소스 접근 등 애플리케이션 전반의 컨텍스트 기능을 제공합니다.
- spring-expression (SpEL): 강력한 표현식 언어로, 런타임 시점에 객체 그래프를 조회하거나 조작할 수 있습니다.
2. AOP and Instrumentation (관점 지향 & 계측)
- spring-aop: AOP(Aspect-Oriented Programming)를 지원하며, 트랜잭션, 로깅, 보안 등의 횡단 관심사를 모듈화할 수 있습니다.
- spring-aspects: AspectJ와 같은 AOP 프레임워크와의 통합을 위한 어댑터를 제공합니다.
- spring-instrument: JVM 바이트코드를 계측하여 런타임에 클래스를 동적으로 조작할 수 있게 해줍니다.
3. Data Access/Integration (데이터 접근 & 통합)
- spring-jdbc: JDBC API를 쉽게 사용할 수 있게 도와주는 추상화 레이어를 제공합니다.
- spring-tx: 선언적/프로그래밍 방식 트랜잭션 관리 기능을 제공합니다.
- spring-orm: Hibernate, JPA 등 ORM 기술과의 통합을 지원합니다.
- spring-oxm: XML 매핑 기능 (JAXB, Castor 등)을 추상화한 API를 제공합니다.
- spring-jms: 메시징 시스템(JMS)과의 통합을 지원합니다.
4. Web (웹 관련 기능)
- spring-web: 웹 애플리케이션 개발을 위한 기본적인 기능 (multipart 파일 업로드, HTTP API 등)을 제공합니다.
- spring-webmvc: Model-View-Controller 패턴 기반의 웹 프레임워크 (Spring MVC)를 구현합니다.
- spring-websocket: WebSocket 기반의 양방향 통신 기능을 지원합니다.
- spring-webmvc-portlet: 포틀릿 환경에서 MVC를 구현할 수 있도록 도와줍니다.
5. Test (테스트)
- spring-test: JUnit, TestNG 등과 함께 사용되어 컨텍스트 로딩, Mock 객체, 트랜잭션 롤백 등의 테스트 지원 기능을 제공합니다.
모듈 의존 관계도
Spring Framework에서 제공하는 모듈의 관계도는 아래와 같다. 모듈간의 의존 관계는 https://search.maven.org 에서 원하는 모듈을 검색하여 dependecies 를 확인해 보면 된다. 모듈 추가 시 의존 관계에 있는 모든 모듈이 자동으로 추가되는 것은 아니기 때문에 명시적으로 추가해야할 수 도 있다. 예를 들어 spring 5 버전 부터는 spring-webmvc 모듈 추가 시 spring-context 모듈은 자동으로 추가되지 않는다.

'라이브러리&프레임워크 > Spring' 카테고리의 다른 글
| CustomException 설계와 Spring 예외 처리 전략 (0) | 2025.04.25 |
|---|---|
| XML 설정 시 반드시 알아야 할 XSD와 namespace 개념 정리 (0) | 2025.04.24 |
| Spring 데이터 영속성 예제 (0) | 2025.04.07 |
| MVC 구조 웹 애플리케이션 개발 (0) | 2025.03.23 |
| Spring에서 트랜잭션 적용 방법 (0) | 2025.03.22 |
