필수 설정: @EnableAsync, @EnableCaching 필요
상위 맥락
03. Async와 Caching < 01. AOP와 빈 관리 원리 < 01. Spring MVC1 기초와 아키텍처 < MVC < Spring < Web
핵심 정리
@Async와 @Cacheable은 메서드에 붙이는 어노테이션이지만, 그 자체만으로 기능이 동작하는 것은 아닙니다. 스프링 컨테이너가 해당 어노테이션을 읽고 프록시 기반 인프라를 활성화해야 합니다. 이때 필요한 전역 스위치가 @EnableAsync와 @EnableCaching입니다.
왜 필요한가
@Async나 @Cacheable은 메서드에 붙은 메타데이터에 가깝습니다. 스프링이 이 메타데이터를 해석해 실제 프록시를 만들고, 비동기 실행이나 캐싱 처리를 끼워 넣어야 기능이 완성됩니다.
- @EnableAsync: @Async가 붙은 메서드를 비동기 처리할 수 있도록 관련 인프라를 활성화합니다.
- @EnableCaching: @Cacheable이 붙은 메서드에 캐시 처리를 적용할 수 있도록 관련 인프라를 활성화합니다.
내부 동작의 큰 흐름
@EnableAsync가 활성화되면 스프링은 TaskExecutor를 이용해 비동기 실행을 처리할 준비를 합니다. 이후 @Async 메서드가 호출되면 프록시가 작업을 별도 실행 흐름으로 위임합니다.
@EnableCaching이 활성화되면 캐시 매니저를 기반으로 캐싱 인프라가 동작합니다. 이후 @Cacheable 메서드가 호출되면 프록시가 먼저 캐시를 확인하고, 필요할 때만 실제 메서드를 호출합니다.
주의할 점
@Enable 설정이 되어 있어도 내부 호출 문제는 해결되지 않습니다. @Async나 @Cacheable이 붙은 메서드는 반드시 프록시를 통해 외부에서 호출되어야 합니다. 같은 클래스 내부에서 직접 호출하면 설정이 되어 있어도 기능이 적용되지 않습니다.
따라서 기능 활성화와 구조 설계는 함께 봐야 합니다. 설정은 프록시 인프라를 켜는 역할이고, 실제 적용 여부는 호출 흐름이 프록시를 통과하는지에 달려 있습니다.
한 문장 요약
@EnableAsync와 @EnableCaching은 @Async와 @Cacheable을 단순한 어노테이션에서 실제 프록시 기반 기능으로 동작하게 만드는 필수 스위치입니다.