A.2) 스프링 모듈의 의존관계
스프링 모듈의 필수 의존관계
- 각 화살표는 모듈 사이의 의존관계를 나타낸다.
- 예를 들어 Beans의 필수 의존모듈은 Core와 ASM이므로
Beans 모듈을 사용하려면 Core와 ASM 모듈도 함께 추가해줘야 한다. - 필수 의존관계는 전이적이므로 스프링의 모듈을 선택할 때는 필수 의존관계에 있는 모든 모듈을 찾아서 포함시켜야 한다.
- Maven이나 Ivy의 의존 라이브러리 관리 기능을 이용한다면
전이적인 의존관계를 따라서 모든 필수 의존 라이브러리가 자동으로 추가된다. - 이 외에도 선택 의존관계에 있는 모듈도 있다.
필수 의존모듈은 아니지만 일부 모듈의 기능은 필요로 하는 경우도 있다.
- 예를 들어 Beans의 필수 의존모듈은 Core와 ASM이므로

모듈별 의존관계
- 각 모듈별로 의존하고 있는 모듈의 종류와 관련 기능을 살펴보자.
- ASM 모듈
- 클래스 바이트코드 조작 및 분석 프레임워크인 ASM을 재패키징한 모듈
- ASM 프레임워크는 스프링뿐 아니라 다른 많은 프레임워크와 라이브러리에서도 사용된다.
- 그러므로 다른 ASM을 사용하는 프레임워크와의 충돌을 방지하기 위해
스프링이 사용하는 버전의 ASM 프레임워크를 재패키징해서 독립적인 모듈로 제공한다. - ASM 모듈이 의존하는 다른 모듈은 없으며, ASM 모듈은 모든 스프링 프레임워크에서 필요로 하는 필수 모듈이다.
- 클래스 바이트코드 조작 및 분석 프레임워크인 ASM을 재패키징한 모듈
- Core 모듈
- 대부분의 스프링의 모듈에서 필요로 하는 공통 기능을 갖고 있는 핵심 모델
- 스프링이 사용하는 주요 타입, 애노테이션, 컨버터, 상수, 유틸리티 클래스 등을 제공한다.
- Core 모듈이 의존하는 모듈은 없으며 클래스 메타정보를 읽는 기능에서 선택적으로 ASM 모듈에 의존한다.
- Core는 모든 스프링 프로젝트에 반드시 포함시켜야 하는 필수 모듈이다.
- Beans 모듈
- 스프링 DI 기능의 핵심인 빈 팩토리와 DI 기능을 제공하는 모듈
- 빈 메타 정보, 빈 리더, 빈 팩토리의 구현과 프로퍼티 에디터가 포함되어 있다.
- Beasn는 ASM, Core 두 개의 필수 의존모듈을 갖는다.
- AOP 모듈
- 스프링의 프록시 AOP 기능을 제공하는 모듈
- 프록시 기반 AOP를 만들 때 필요한 어드바이스, 포인트컷, 프록시 팩토리 빈, 자동 프록시 생성기 등을 제공한다.
- 스프링의 AOP는 DI에 기반을 두고 있으므로 DI 기능을 제공하는 Beans 모듈에 의존한다.
그리고 전이적 의존관계에 따라 Beans가 의존하는 ASM과 Core에도 의존한다.
- 스프링의 프록시 AOP 기능을 제공하는 모듈
- Expression 모듈
- 스프링 표현식 언어 기능을 지원하는 모듈
- Expression은 Core 모듈에만 의존한다.
- Core 모듈과 함께 사용한다면 스프링 애플리케이션 밖에서 순수한 표현식 라이브러리로 이용할 수도 있다.
- Context 모듈
- 애플리케이션 컨텍스트 기능을 제공하는 모듈
- 애플리케이션 컨텍스트를 만드는 데 필요한 대부분의 기능을 포함해서
빈 스캐너, 자바 코드에 의한 설정 기능, EJB 지원 기능, 포매터, 로드타임 위빙, 표현식, JMX, JNDI, 리모팅, 스케줄링,
스크립트 언어 지원, 검증기 등의 애플리케이션 컨테이너로서의 주요한 기능을 담고 있다. - 본격적인 엔터프라이즈 애플리케이션 프레임워크로 사용하기 위해 반드시 필요한 모듈이다.
- Context는 AOP와 그 상위 의존모듈을 필요로 한다. 또한 Expression도 Context의 필수 의존모듈이다.
- Context의 로드타임 위빙 기능을 사용하는 경우에는 Instrument 모듈이 선택적으로 필요하다.
- Context.Support 모듈
- 경우에 따라 애플리케이션 컨텍스트에서 필요로 하는 부가기능을 담은 모듈
- EhChae, 메일 추상화 서비스, CommonJ, Quartz 스케줄링,
FreeMarker, JasperReports, Velocity 팩토리 기능을 제공한다.
이런 특별한 기능을 사용하지 않는다면 Context.Support 모듈은 필요 없다. - 단 스프링 MVC가 Context.Support에 의존하기 때문에 스프링 MCV를 사용한다면 필수로 추가해야 한다.
그 외의 웹 기술을 사용하는 경우라면 포함시키지 않을 수도 있다. - Context.Support는 기본적으로 Context 모듈에 의존한다.
Quartz의 JobStore 기능을 활용하는 경우에 선택적으로 JDBC와 Transaction 모듈이 필요하다.
- Transaction 모듈
- 스프링의 데이터 액세스 추상화의 공통 기능을 담고 있는 모듈
- DataAccessException 예외 계층구조와 트랜잭션 추상화 기능,
트랜잭션 동기화 저장소 그리고 JCA 지원 기능을 포함하고 있다. - 스프링의 데이터 액세스 기술을 사용하는데 반드시 필요한 모듈이다.
- Transaction의 필수 의존모듈은 Context다.
- JDBC 모듈
- JDBC 템플릿을 포함한 JDBC 지원 기능을 가진 모듈
- JdbcTemplate 등의 JDBC 지원 오브젝트 외에도 스프링이 제공하는 DataSource 구현 클래스들이 제공된다.
- JDBC는 Transaction 모듈에 의존한다.
- ORM 모듈
- 하이버네이트, JPA, JDO, iBatis와 같은 ORM에 대한 스프링의 지원 기능을 갖고 있는 모듈
- ORM은 JDBC 모듈의 DataSource나 트랜잭션 매니저 등을 활용하기 때문에 JDBC에 의존한다.
- OpenSessionViewFilter와 같은 일부 기능은 Web 모듈에 선택적으로 의존한다.
- Web 모듈
- 스프링 웹 기술의 공통적인 기능을 정의한 모듈
- 스프링 MCV 외에도 스프링이 직접 지원하는 스트럿츠, JSF 등을 적용할 때도 필요하다.
또한 Caucho, HttpInvoker, JAX-RPC, JAX-WS 등의 리모팅 기능도 포함하고 있다.
기본적인 바인딩, 컨텍스트 로더, 필터, 멀티파트, 메시지 컨버터 기능도 제공한다. - Web 모듈은 Context 모쥴을 필수 모듈로 갖고 있다.
- XML을 사용하는 메시지 컨버터 기능에는 OXM 모듈이 필요할 수 있다.
- Web.Servlet 모듈
- 스프링 MVC 기능을 제공하는 모듈
- 전통적인 스프링 MVC와 최신 @MVC 기능이 모두 포함되어 있다.
- Web.Servlet의 필수 의존모듈은 Web과 Context.Support다.
- XML을 이용한 뷰나 메시지 컨버터 등을 사용할 때는 선택적으로 OXM 모듈을 필요로 한다.
- Web.Portlet 모듈
- Porlet 개발에 사용하는 스프링 모듈
- Web.Protlet의 필수 의존모듈은 Web.Servlet이다.
- Web.Struts 모듈
- 스트럿츠 1.x를 지원하는 모듈
- 스프럿츠 1.x를 스프링의 웹 프레젠테이션 계층으로 사용할 때 유용한 기능을 제공한다.
- Web.Struts는 Web 모듈에만 의존한다.
- JMS 모듈
- 스프링의 JMS 지원 기능을 사용할 때 필요한 모듈
- JMS는 Transaction 모듈에 의존한다.
- Aspects 모듈
- 스프링이 제공하는 AspectJ AOP 기능을 사용할 때 필요한 모듈
- 스프링이 직접 제공하는 AspectJ로 만든 기능은
@Configurable을 이용한 도메인 오브젝트 DI 기능, JPA 예외 변환기, AspectJ 방식의 트랜잭션 기능 등이 있다. - Aspects의 필수 의존모듈은 없다.
- JPA 지원 기능을 사용할 때는 ORM, 트랜잭션 지원 기능을 사용할 때는 Transaction 모듈에 선택적으로 의존한다.
- Instrument 모듈
- 스프링의 로드타임 위버 기능을 적용할 때 필요한 모듈
- LTW 기능을 제공하는 Context 모듈에도 선택적으로 사용된다.
- Instrument는 다른 의존모듈이 없다.
- Instrument.Tomcat 모듈
- 애플리케이션이 아니라 톰캣 서버의 클래스 로더로 사용하는 모듈
- 다른 모듈에 대한 의존관계는 전혀 없다.
- Test 모듈
- 스프링의 테스트 지원 기능을 가진 모듈
- 테스트 컨텍스트 프레임워크나 목 오브젝트 등을 이용해 테스트를 만들 때 사용한다.
- 테스트용 모듈이기 때문에 운영 중에는 사용되지 않는다.
- ASM 모듈
'Java-Spring > 토비의 스프링 3.1' 카테고리의 다른 글
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 의존 라이브러리(1) (0) | 2024.05.27 |
---|---|
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 의존 라이브러리(0) (0) | 2024.05.27 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 모듈(1) (0) | 2024.05.18 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 모듈(0) (0) | 2024.05.18 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 프로젝트 시작하기 (3) (0) | 2024.05.17 |
A.2) 스프링 모듈의 의존관계
스프링 모듈의 필수 의존관계
- 각 화살표는 모듈 사이의 의존관계를 나타낸다.
- 예를 들어 Beans의 필수 의존모듈은 Core와 ASM이므로
Beans 모듈을 사용하려면 Core와 ASM 모듈도 함께 추가해줘야 한다. - 필수 의존관계는 전이적이므로 스프링의 모듈을 선택할 때는 필수 의존관계에 있는 모든 모듈을 찾아서 포함시켜야 한다.
- Maven이나 Ivy의 의존 라이브러리 관리 기능을 이용한다면
전이적인 의존관계를 따라서 모든 필수 의존 라이브러리가 자동으로 추가된다. - 이 외에도 선택 의존관계에 있는 모듈도 있다.
필수 의존모듈은 아니지만 일부 모듈의 기능은 필요로 하는 경우도 있다.
- 예를 들어 Beans의 필수 의존모듈은 Core와 ASM이므로

모듈별 의존관계
- 각 모듈별로 의존하고 있는 모듈의 종류와 관련 기능을 살펴보자.
- ASM 모듈
- 클래스 바이트코드 조작 및 분석 프레임워크인 ASM을 재패키징한 모듈
- ASM 프레임워크는 스프링뿐 아니라 다른 많은 프레임워크와 라이브러리에서도 사용된다.
- 그러므로 다른 ASM을 사용하는 프레임워크와의 충돌을 방지하기 위해
스프링이 사용하는 버전의 ASM 프레임워크를 재패키징해서 독립적인 모듈로 제공한다. - ASM 모듈이 의존하는 다른 모듈은 없으며, ASM 모듈은 모든 스프링 프레임워크에서 필요로 하는 필수 모듈이다.
- 클래스 바이트코드 조작 및 분석 프레임워크인 ASM을 재패키징한 모듈
- Core 모듈
- 대부분의 스프링의 모듈에서 필요로 하는 공통 기능을 갖고 있는 핵심 모델
- 스프링이 사용하는 주요 타입, 애노테이션, 컨버터, 상수, 유틸리티 클래스 등을 제공한다.
- Core 모듈이 의존하는 모듈은 없으며 클래스 메타정보를 읽는 기능에서 선택적으로 ASM 모듈에 의존한다.
- Core는 모든 스프링 프로젝트에 반드시 포함시켜야 하는 필수 모듈이다.
- Beans 모듈
- 스프링 DI 기능의 핵심인 빈 팩토리와 DI 기능을 제공하는 모듈
- 빈 메타 정보, 빈 리더, 빈 팩토리의 구현과 프로퍼티 에디터가 포함되어 있다.
- Beasn는 ASM, Core 두 개의 필수 의존모듈을 갖는다.
- AOP 모듈
- 스프링의 프록시 AOP 기능을 제공하는 모듈
- 프록시 기반 AOP를 만들 때 필요한 어드바이스, 포인트컷, 프록시 팩토리 빈, 자동 프록시 생성기 등을 제공한다.
- 스프링의 AOP는 DI에 기반을 두고 있으므로 DI 기능을 제공하는 Beans 모듈에 의존한다.
그리고 전이적 의존관계에 따라 Beans가 의존하는 ASM과 Core에도 의존한다.
- 스프링의 프록시 AOP 기능을 제공하는 모듈
- Expression 모듈
- 스프링 표현식 언어 기능을 지원하는 모듈
- Expression은 Core 모듈에만 의존한다.
- Core 모듈과 함께 사용한다면 스프링 애플리케이션 밖에서 순수한 표현식 라이브러리로 이용할 수도 있다.
- Context 모듈
- 애플리케이션 컨텍스트 기능을 제공하는 모듈
- 애플리케이션 컨텍스트를 만드는 데 필요한 대부분의 기능을 포함해서
빈 스캐너, 자바 코드에 의한 설정 기능, EJB 지원 기능, 포매터, 로드타임 위빙, 표현식, JMX, JNDI, 리모팅, 스케줄링,
스크립트 언어 지원, 검증기 등의 애플리케이션 컨테이너로서의 주요한 기능을 담고 있다. - 본격적인 엔터프라이즈 애플리케이션 프레임워크로 사용하기 위해 반드시 필요한 모듈이다.
- Context는 AOP와 그 상위 의존모듈을 필요로 한다. 또한 Expression도 Context의 필수 의존모듈이다.
- Context의 로드타임 위빙 기능을 사용하는 경우에는 Instrument 모듈이 선택적으로 필요하다.
- Context.Support 모듈
- 경우에 따라 애플리케이션 컨텍스트에서 필요로 하는 부가기능을 담은 모듈
- EhChae, 메일 추상화 서비스, CommonJ, Quartz 스케줄링,
FreeMarker, JasperReports, Velocity 팩토리 기능을 제공한다.
이런 특별한 기능을 사용하지 않는다면 Context.Support 모듈은 필요 없다. - 단 스프링 MVC가 Context.Support에 의존하기 때문에 스프링 MCV를 사용한다면 필수로 추가해야 한다.
그 외의 웹 기술을 사용하는 경우라면 포함시키지 않을 수도 있다. - Context.Support는 기본적으로 Context 모듈에 의존한다.
Quartz의 JobStore 기능을 활용하는 경우에 선택적으로 JDBC와 Transaction 모듈이 필요하다.
- Transaction 모듈
- 스프링의 데이터 액세스 추상화의 공통 기능을 담고 있는 모듈
- DataAccessException 예외 계층구조와 트랜잭션 추상화 기능,
트랜잭션 동기화 저장소 그리고 JCA 지원 기능을 포함하고 있다. - 스프링의 데이터 액세스 기술을 사용하는데 반드시 필요한 모듈이다.
- Transaction의 필수 의존모듈은 Context다.
- JDBC 모듈
- JDBC 템플릿을 포함한 JDBC 지원 기능을 가진 모듈
- JdbcTemplate 등의 JDBC 지원 오브젝트 외에도 스프링이 제공하는 DataSource 구현 클래스들이 제공된다.
- JDBC는 Transaction 모듈에 의존한다.
- ORM 모듈
- 하이버네이트, JPA, JDO, iBatis와 같은 ORM에 대한 스프링의 지원 기능을 갖고 있는 모듈
- ORM은 JDBC 모듈의 DataSource나 트랜잭션 매니저 등을 활용하기 때문에 JDBC에 의존한다.
- OpenSessionViewFilter와 같은 일부 기능은 Web 모듈에 선택적으로 의존한다.
- Web 모듈
- 스프링 웹 기술의 공통적인 기능을 정의한 모듈
- 스프링 MCV 외에도 스프링이 직접 지원하는 스트럿츠, JSF 등을 적용할 때도 필요하다.
또한 Caucho, HttpInvoker, JAX-RPC, JAX-WS 등의 리모팅 기능도 포함하고 있다.
기본적인 바인딩, 컨텍스트 로더, 필터, 멀티파트, 메시지 컨버터 기능도 제공한다. - Web 모듈은 Context 모쥴을 필수 모듈로 갖고 있다.
- XML을 사용하는 메시지 컨버터 기능에는 OXM 모듈이 필요할 수 있다.
- Web.Servlet 모듈
- 스프링 MVC 기능을 제공하는 모듈
- 전통적인 스프링 MVC와 최신 @MVC 기능이 모두 포함되어 있다.
- Web.Servlet의 필수 의존모듈은 Web과 Context.Support다.
- XML을 이용한 뷰나 메시지 컨버터 등을 사용할 때는 선택적으로 OXM 모듈을 필요로 한다.
- Web.Portlet 모듈
- Porlet 개발에 사용하는 스프링 모듈
- Web.Protlet의 필수 의존모듈은 Web.Servlet이다.
- Web.Struts 모듈
- 스트럿츠 1.x를 지원하는 모듈
- 스프럿츠 1.x를 스프링의 웹 프레젠테이션 계층으로 사용할 때 유용한 기능을 제공한다.
- Web.Struts는 Web 모듈에만 의존한다.
- JMS 모듈
- 스프링의 JMS 지원 기능을 사용할 때 필요한 모듈
- JMS는 Transaction 모듈에 의존한다.
- Aspects 모듈
- 스프링이 제공하는 AspectJ AOP 기능을 사용할 때 필요한 모듈
- 스프링이 직접 제공하는 AspectJ로 만든 기능은
@Configurable을 이용한 도메인 오브젝트 DI 기능, JPA 예외 변환기, AspectJ 방식의 트랜잭션 기능 등이 있다. - Aspects의 필수 의존모듈은 없다.
- JPA 지원 기능을 사용할 때는 ORM, 트랜잭션 지원 기능을 사용할 때는 Transaction 모듈에 선택적으로 의존한다.
- Instrument 모듈
- 스프링의 로드타임 위버 기능을 적용할 때 필요한 모듈
- LTW 기능을 제공하는 Context 모듈에도 선택적으로 사용된다.
- Instrument는 다른 의존모듈이 없다.
- Instrument.Tomcat 모듈
- 애플리케이션이 아니라 톰캣 서버의 클래스 로더로 사용하는 모듈
- 다른 모듈에 대한 의존관계는 전혀 없다.
- Test 모듈
- 스프링의 테스트 지원 기능을 가진 모듈
- 테스트 컨텍스트 프레임워크나 목 오브젝트 등을 이용해 테스트를 만들 때 사용한다.
- 테스트용 모듈이기 때문에 운영 중에는 사용되지 않는다.
- ASM 모듈
'Java-Spring > 토비의 스프링 3.1' 카테고리의 다른 글
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 의존 라이브러리(1) (0) | 2024.05.27 |
---|---|
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 의존 라이브러리(0) (0) | 2024.05.27 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 모듈(1) (0) | 2024.05.18 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 모듈(0) (0) | 2024.05.18 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 프로젝트 시작하기 (3) (0) | 2024.05.17 |