AOP란?
관점 지향 프로그래밍으로
어떤 로직을 공통적인 기능과 핵심적인 기능을 분리해서 관리하도록 프로그래밍하는 것이다.
이런 그림으로 표현할 수 있다.
위를 보면 공통적으로 사용하는 기능을 분리해서 관리하는 것을 볼 수 있다.
우리가 지금까지 사용했던 함수(메서드)들과 비슷한 모습으로 보인다.
여기서 우리는 공통적인 기능들을 Aspect라 하고
그 기능 자체를 Advice라 한다.
이 Advice가 적용되는 부분은 메서드, 필드 등이 있는데
스프링에서는 메서드만 적용 가능하다.
그리고 이것을 Joinpoint라 한다.
그리고 Pointcut을 통해
Joinpoint에서 Advice가 실행될 지점을 더욱 구체적으로 정할 수 있다.
실제로 구현할 때는 프록시 패턴을 기반으로 구현하게 되는데,
Client - Proxy - Target
이러한 구조로 되어있다.
여기서 Target은 공통적인 기능(Advice)을 부여할 대상이다.
※ 스프링에서는 빈에서만 AOP를 적용할 수 있다! ※
Advice의 종류
Advice는 앞서 말했듯이 공통적인 기능 그 자체를 말한다.
Aspect가 '무엇'을 '언제' 할지에 대한 정의를 담고있다.
이 Advice는 여러 종류로 나뉘어 동작하게 된다.
그 종류로는 Before, After, After-returning, After-throwing, Around 가 있다.
자세히 살펴보자!
먼저 Before은 Advice 타겟 메서드가 호출되기 전에 기능을 수행하는 것이다.
마찬가지로 After은 Advice 타겟 메서드가 호출된 후에
결과에 관계없이 메서드가 완료되면 기능을 수행한다.
After-returning은 After과 달리 타겟 메서드가 성공적으로 결과값을 반환했을 경우
기능을 수행하게 된다.
이와 반대로 After-throwing은 예외가 발생했을 경우 기능을 수행한다.
Around는 after과 before을 합치듯 타겟 메서드의 실행 전 후에 기능을 수행한다.
각각의 기능들을 어노테이션으로 선언해서 사용하면 된다.
@Before
@After
@AfterReturning
@AfterThrowing
@Around
Reference
https://engkimbs.tistory.com/746
https://www.baeldung.com/spring-aop
https://n1tjrgns.tistory.com/261
'WEB > Spring' 카테고리의 다른 글
[Spring Boot] Spring Boot에서 TDD 방법론 (0) | 2023.06.23 |
---|---|
[Spring] 패키지 구조 (0) | 2023.03.29 |
[Spring Boot] Spring boot EC2에 배포하기 (0) | 2022.12.19 |
[Spring] RestTemplate Response Entity Type (0) | 2022.12.15 |
[Spring] AOP - 구현 (0) | 2022.10.27 |