스프링 AOP에 대해서 설명해 주세요.

  • Spring AOP는 스프링 프레임워크에서 제공하는 기능으로, 관점 지향 프로그래밍(AOP)을 지원하는 기술이다.

  • Spring AOP는 로깅, 보안, 트랜잭션 등 공통 관심사를 모듈화하여 코드 중복을 줄이고 유지보수성을 향상 시키는 데 도움을 준다.

관점 지향 프로그래밍(Aspect-Oriented Programming)

  • 객체 지향 프로그래밍(OOP) 패러다임을 보완하는 기술로, 메서드나 객체의 기능을 핵심 관심사와 공통 관심사로 나누어 프로그래밍 하는 것을 말한다.

  • 핵심 관심사는 각 객체야 가져야 할 본래의 기능을 말하며, 공통 관심사는 여러 객체에서 공통으로 사용되는 코드를 말한다.

  • 여러 개의 클래스에서 반복해서 사용하는 코드를 모듈화하여 공통 관심사로 분리한다.

  • 이렇게 분리한 공통 관심사를 Aspect로 정의하고, Aspect를 적용할 메서드나 클래스에 Advice를 적용하여 공통 관심사와 핵심 관심사를 분리할 수 있다.

  • 이렇게 관점 지향 프로그래밍에서는 반복적으로 사용하는 코드를 하나로 묶어서 모듈화하여 재사용성과 유지 보수성을 높일 수 있다.

AOP 적용 방식

  • 컴파일 시점

  • 클래스 로딩 시점

  • 런타임 시점(프록시)

스프링 AOP는 프록시 방식을 사용하기 때문에 스프링 컨테이너가 관리하는 스프링 빈에만 AOP를 적용할 수 있으며, 메서드 실행 지점에만 AOP를 적용할 수 있다.

스프링 AOP 주요 용어

용어
설명

Aspect

- 공통적인 기능들을 모듈화한 것 - 여러 advicePointcut 이 존재

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