[Spring] Spring AOP

2022. 3. 27. 21:00Dev/Spring

Spring AOP 개념이 정리가 안돼서

여기에 글을 쓰면 정리가 될까 싶어서 올린다


📌 AOP(Aspect Oriented Programming)란?

메서드의 시작 또는 끝에 자동으로 부가기능 코드(advice)를 동적(=실행 중에)으로 추가해 주는 기술이다.

 

📌 AOP 관련 용어

용어 설명
target advice가 추가될 객체
advice target에 동적으로 추가될 부가 기능(코드)
join point advice가 추가(join)될 대상(메서드)
pointcut join point들을 정의한 패턴
proxy target에 advice가 동적으로 추가되어 생성된 객체, advice(부가기능) + target(핵심기능) = proxy
weaving target에 advice를 추가해서 proxy를 생성하는 것

 

📌 Advice의 종류

종류 애너테이션 설명
around advice @Around 메서드의 시작과 끝 부분에 추가되는 부가 기능, 가장 강력한 코드, 직업 대상 메서드를 호출하고 결과나 예외 처리 가능
before advice @Before 메서드의 시작 부분에 추가되는 부가 기능, 코드 실행 자체에 관여 불가
after advice @After 메서드의 끝 부분에 추가되는 부가 기능, 정상적으로 실행되거나 예외가 발생하거나 상관없이 실행되는 코드
after returning @AfterReturning 예외가 발생하지 않았을 때, 실행되는 부가 기능
after throwing @AfterThrowing 예외가 발생했을 때, 실행되는 부가 기능

추가로 Advice 설정은 XML와 애너테이션, 두 가지 방법으로 가능한데 요즘은 애너테이션이 더 많이 쓰인다.

 

📌 Pointcut이란?

advice가 어떤 JointPoint에 결합할지 결정하는 설정이다. 다양한 형태로 선언해서 사용할 수 있는데 일단은 execution만 익히자.

execution(반환타입 패키지명.클래스명.메서드명(매개변수목록)

 

📌 AOP 사용

AOP 기능을 Spring 프로젝트에서 사용하기 위해선 pom.xml에 dependency를 추가해서 라이브러리를 다운받아야 한다.

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.8</version>
            <scope>runtime</scope>
        </dependency>


<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

<!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>

 

📚 참고

패스트캠퍼스 강의 <스프링의 정석>

코드로 배우는 스프링 웹 프로젝트