스프링 AOP에 대해서 설명해 주세요.
Spring AOP는 스프링 프레임워크에서 제공하는 기능으로, 관점 지향 프로그래밍(AOP)을 지원하는 기술이다.
Spring AOP는 로깅, 보안, 트랜잭션 등 공통 관심사를 모듈화하여 코드 중복을 줄이고 유지보수성을 향상 시키는 데 도움을 준다.
관점 지향 프로그래밍(Aspect-Oriented Programming)
객체 지향 프로그래밍(OOP) 패러다임을 보완하는 기술로, 메서드나 객체의 기능을 핵심 관심사와 공통 관심사로 나누어 프로그래밍 하는 것을 말한다.
핵심 관심사는 각 객체야 가져야 할 본래의 기능을 말하며, 공통 관심사는 여러 객체에서 공통으로 사용되는 코드를 말한다.
여러 개의 클래스에서 반복해서 사용하는 코드를 모듈화하여 공통 관심사로 분리한다.
이렇게 분리한 공통 관심사를
Aspect로 정의하고,Aspect를 적용할 메서드나 클래스에Advice를 적용하여 공통 관심사와 핵심 관심사를 분리할 수 있다.이렇게 관점 지향 프로그래밍에서는 반복적으로 사용하는 코드를 하나로 묶어서 모듈화하여 재사용성과 유지 보수성을 높일 수 있다.
AOP 적용 방식
컴파일 시점
클래스 로딩 시점
런타임 시점(프록시)
스프링 AOP는 프록시 방식을 사용하기 때문에 스프링 컨테이너가 관리하는 스프링 빈에만 AOP를 적용할 수 있으며, 메서드 실행 지점에만 AOP를 적용할 수 있다.
스프링 AOP 주요 용어
Aspect
- 공통적인 기능들을 모듈화한 것
- 여러 advice와 Pointcut 이 존재
Target
- Aspect가 적용될 대상(메서드, 클래스 등)
- Pointcut으로 결정된다.
JoinPoint
- AOP를 적용하는 지점 - 스프링 AOP는 메서드 실행 지점으로 제한
Advice
- Aspect의 기능을 정의(부가 기능 정의)
- 다양한 종류가 있다.
Pointcut
- Advice를 적용할 위치를 선별
- 주로 AspectJ 표현식을 사용하고, 외에도 다양한 방법이 있음
- 스프링 AOP는 메서드 실행 지점으로 제한
Advice종류@Before: 대상 매서드가 실행되기 전에Advice를 실행@AfterReturning: 대상 메서드가 정상적으로 실행되고 반환된 후에Advice실행@AfterThrowing: 대상 메서드에서 예외가 발생했을 때Advice실행@After: 대상 메서드가 실행된 후에Advice실행(예외가 발생해도 실행)@Around: 대상 메서드 실행 전, 후, 예외 발생 시Advice실행
스프링 AOP 주의점
@Around를 사용할 때는 반드시jointPoint.proceed()를 호출해줘야 한다.타겟 객체(
Target) 안에서 내부 호출을 할 때는 AOP(프록시)가 적용되지 않는다.
참고
Last updated