[Spring] Spring Initializr에서 AOP가 없는 이유

2025. 7. 1. 21:42·Spring

세 줄 요약

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에서 좌표 직접 입력

  1. Dependencies → Search 클릭
  2. 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
'Spring' 카테고리의 다른 글
  • [Spring] @MockitoBean 등장(Spring 6.2), Deprecated되는 @MockBean(Spring Boot 3.4.0)
  • [Spring] Spring에서 Bean Validation이 동작하는 내부 원리
  • [Spring] JAR로 패키징 vs WAR로 패키징
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (457)
      • Software Development (27)
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8)
        • Code Style, Convetion (0)
        • DDD (0)
        • Software Engineering (18)
      • Java (71)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (12)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (130)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (6)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[Spring] Spring Initializr에서 AOP가 없는 이유
상단으로

티스토리툴바