세 줄 요약
Spring Initializr(start.spring.io) 화면에는 ‘Spring AOP’(spring-boot-starter-aop) 항목이 기본으로 표시되지 않는다.
2015년부터 “불필요하게 AOP 스타터를 고르는 사용자가 많다”는 이유로 의도적으로 숨긴 정책이 지금까지 이어지고 있다.
프로젝트를 만든 뒤 빌드 파일에 spring-boot-starter-aop
를 직접 추가하거나, Initializr 검색창에 전체 좌표(org.springframework.boot:spring-boot-starter-aop
)를 입력하면 된다.
1. 화면에서 빠진 이유
배경 | 설명 |
---|---|
AOP 스타터가 실제 필요 없는 경우에도 많이 선택됐다는 통계가 나왔다 | ‘@Transactional’, ‘@Async’ 같은 기능은 다른 스타터가 이미 spring-aop JAR을 포함하므로 별도 선택이 필요 없다 |
AOP 스타터를 넣으면 AspectJ Weaver까지 함께 들어가 빌드 크기와 메모리 사용량이 늘어난다 | Spring 팀이 “초심자에게 혼란만 준다”는 판단으로 목록에서 제외했다 |
2. AOP 스타터가 정말 필요한 경우
필요 없음 | 필요함 |
---|---|
단순 DI, @Transactional , @Async , @Cacheable |
@Aspect 로 포인트컷·어드바이스 직접 작성, Load-time/Compile-time weaving, AspectJ Weaver가 필요한 외부 라이브러리 사용 |
3. 의존성 추가 방법
3-1. Initializr UI에서 좌표 직접 입력
- Dependencies → Search 클릭
org.springframework.boot:spring-boot-starter-aop
입력 후 Enter
→ “Add your own…” 형태로 항목이 추가된다
3-2. Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
3-3. Gradle (Kotlin DSL)
implementation("org.springframework.boot:spring-boot-starter-aop")
4. 추가 팁
- 프록시 전략: Spring Boot 2.x부터 기본 프록시 방식이 CGLIB이다. 인터페이스 기반(JDK Proxy)을 쓰려면
spring.aop.proxy-target-class=false
속성을 넣는다. - 빌드 최적화: AOP 스타터를 제거하면
aspectjweaver
(수백 KB)도 빠져서 빌드 크기를 줄일 수 있다.
요약
- 기본 UI에서는 의도적으로 숨겨져 있다.
- 필요하면 좌표를 직접 입력하거나 빌드 파일에 추가하면 된다.
- 사용자 정의 Aspect나 AspectJ 수준 AOP를 쓰려는 경우에만 권장한다.
'Spring' 카테고리의 다른 글
[Spring] @MockitoBean 등장(Spring 6.2), Deprecated되는 @MockBean(Spring Boot 3.4.0) (0) | 2025.06.14 |
---|---|
[Spring] Spring에서 Bean Validation이 동작하는 내부 원리 (0) | 2025.03.11 |
[Spring] JAR로 패키징 vs WAR로 패키징 (0) | 2024.12.24 |