spring-context의 추상화(캐시·스케줄링·UI)를 외부 서드파티 라이브러리에 실제로 연결해 주는 어댑터·통합 모음 모듈이다. Spring 코어 추상화와 Caffeine / JSR-107(JCache) / Jakarta Mail / Quartz / FreeMarker 사이를 잇는 "브리지" 코드만 모여 있다.
spring-context는 캐시(CacheManager/Cache), 스케줄링(TaskScheduler), 메일 같은 기능에 대해 인터페이스(추상화)만 정의한다. 실제 동작하는 구현은 대부분 외부 라이브러리에 의존하는데, 그 의존성을 코어에 직접 끌어들이면 코어가 무거워지고 선택의 자유가 사라진다.
spring-context-support는 이 "구현 결합" 부분을 따로 떼어낸 모듈이다. 네 가지 서로 독립적인 통합 영역을 제공한다.
- 캐시(cache) — Caffeine, JSR-107(JCache)을 Spring
Cache/CacheManager로 어댑트. 추가로 트랜잭션 인지 캐시 데코레이터, 그리고 JSR-107 표준 캐시 애너테이션(@CacheResult등)을 AOP로 처리하는 인터셉션 인프라. - 메일(mail) — 메일 발송에 대한 라이브러리 독립적 추상화(
MailSender)와 Jakarta Mail 기반 구현(JavaMailSender). - 스케줄링(scheduling/quartz) — Quartz
Scheduler를 Spring 빈 생명주기에 통합하고, Quartz Job에 의존성 주입을 가능하게 하는 어댑터. - UI(ui/freemarker) — FreeMarker
Configuration을 SpringResourceLoader/빈 설정과 통합.
각 영역은 서로 의존하지 않으므로, 책처럼 읽을 때 관심 있는 챕터만 골라 읽어도 된다.
┌────────────────────────────────────────────────┐
│ spring-context-support │
│ cache.caffeine cache.jcache cache.transaction │
│ mail / mail.javamail │
│ scheduling.quartz │
│ ui.freemarker │
└───────┬───────────────┬───────────────┬─────────┘
│ 사용 │ 사용 │ 사용
▼ ▼ ▼
spring-context spring-tx spring-core
(Cache 추상화, (Transaction- (Resource,
AOP, @Config) Synchronization) ResourceLoader)
▲
│ 선택적 외부 라이브러리(런타임)
Caffeine · JCache(JSR-107) · Jakarta Mail · Quartz · FreeMarker
- 의존하는 Spring 모듈:
spring-core(리소스/유틸),spring-beans(FactoryBean, 프로퍼티 주입),spring-context(Cache/CacheManager추상화, AOP 캐시 인프라,@Configuration),spring-aop(Pointcut/Advisor),spring-tx(트랜잭션 동기화). - 외부 라이브러리: Caffeine,
javax.cache(JSR-107), Jakarta Mail/Activation, Quartz, FreeMarker. 모두 선택적(optional) 의존이며, 사용하는 통합 영역의 클래스를 실제 로딩할 때만 필요하다. - 이 모듈을 의존받는 곳:
spring-webmvc(FreeMarker 뷰), Spring Boot 자동 구성 등.
- 01 — 캐시 어댑터: Caffeine · JCache · 트랜잭션 인지 캐시
- 02 — JSR-107 캐시 애너테이션 인터셉션
- 03 — 메일 추상화와 Jakarta Mail 통합
- 04 — Quartz 스케줄링 통합
- 05 — FreeMarker 템플릿 구성
org.springframework
├── cache ← 캐시 통합 (챕터 01, 02)
│ ├── caffeine
│ │ ├── CaffeineCache Caffeine Cache → Spring Cache 어댑터
│ │ └── CaffeineCacheManager Caffeine 기반 CacheManager(동적/정적)
│ ├── jcache JSR-107 javax.cache 어댑터
│ │ ├── JCacheCache / JCacheCacheManager javax.cache → Spring Cache 어댑터
│ │ ├── JCacheManagerFactoryBean javax.cache.CacheManager FactoryBean
│ │ ├── config @Configuration (애너테이션 구동 인프라)
│ │ │ ├── AbstractJCacheConfiguration
│ │ │ ├── ProxyJCacheConfiguration
│ │ │ └── JCacheConfigurer
│ │ └── interceptor JSR-107 캐시 애너테이션 AOP 처리
│ │ ├── JCacheAspectSupport 애스펙트 코어(연산 디스패치)
│ │ ├── JCacheInterceptor MethodInterceptor 구현
│ │ ├── *OperationSource 메서드 → JCacheOperation 매핑
│ │ ├── Cache{Result,Put,RemoveEntry,RemoveAll}Interceptor
│ │ └── *Operation / *InvocationContext
│ └── transaction ← 트랜잭션 인지 캐시 (챕터 01)
│ ├── TransactionAwareCacheDecorator put/evict/clear를 커밋 후로 지연
│ ├── TransactionAwareCacheManagerProxy
│ └── AbstractTransactionSupportingCacheManager
├── mail ← 메일 추상화 (챕터 03)
│ ├── MailSender / SimpleMailMessage 단순 메일 발송 추상화
│ ├── Mail*Exception 계층화된 메일 예외
│ └── javamail Jakarta Mail 기반 구현
│ ├── JavaMailSender / JavaMailSenderImpl
│ ├── MimeMessageHelper MIME 메시지 작성 헬퍼
│ ├── MimeMessagePreparator 콜백 기반 메시지 준비
│ └── ConfigurableMimeFileTypeMap 확장자→MIME 타입 매핑
├── scheduling.quartz ← Quartz 통합 (챕터 04)
│ ├── SchedulerFactoryBean Scheduler 생성·생명주기 관리
│ ├── QuartzJobBean JobDataMap을 빈 프로퍼티로 주입
│ ├── SpringBeanJobFactory / AdaptableJobFactory Job에 DI 적용
│ ├── *FactoryBean (JobDetail, CronTrigger, SimpleTrigger)
│ └── LocalDataSourceJobStore / LocalTaskExecutorThreadPool
└── ui.freemarker ← FreeMarker 통합 (챕터 05)
├── FreeMarkerConfigurationFactory Configuration 조립
├── FreeMarkerConfigurationFactoryBean 그 FactoryBean
└── SpringTemplateLoader ResourceLoader 기반 템플릿 로더
버전 기준: Spring Framework 7.1.0-SNAPSHOT. 모든 설명은 위 경로의 실제 소스를 근거로 한다.