Skip to content

Latest commit

 

History

History
97 lines (82 loc) · 7.07 KB

File metadata and controls

97 lines (82 loc) · 7.07 KB

spring-context-support — 부가 통합 모듈

한 줄 정의

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을 Spring ResourceLoader/빈 설정과 통합.

각 영역은 서로 의존하지 않으므로, 책처럼 읽을 때 관심 있는 챕터만 골라 읽어도 된다.

의존 관계

        ┌────────────────────────────────────────────────┐
        │              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 자동 구성 등.

내부 목차

  1. 01 — 캐시 어댑터: Caffeine · JCache · 트랜잭션 인지 캐시
  2. 02 — JSR-107 캐시 애너테이션 인터셉션
  3. 03 — 메일 추상화와 Jakarta Mail 통합
  4. 04 — Quartz 스케줄링 통합
  5. 05 — FreeMarker 템플릿 구성

전체 패키지 구조 ASCII 맵

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. 모든 설명은 위 경로의 실제 소스를 근거로 한다.