[Spring] Spring AOP의 개념

아는벌·2023년 3월 6일
0

web (2)

목록 보기
9/20

AOP

Aspect Oriented Programming

  • 관점지향 프로그래밍
  • 부가적인 기능인 횡단 관심사(Cross-cutting Concern)를 핵심 비즈니스 로직과의 분리를 허용함으로 모듈성을 증가
  • AOP 목적: 코드의 간결성을 높이고 변경에 유연함과 무한한 확장 가능
  • 코드 자체를 수정하지 않고 기존 코드에 추가 동작인 Advise를 정의하여 추가된 기능이 실행됨
  • 어느 코드가 pointcut(특정 이름으로 시작하는 메서드)을 통해 수정되는지를 별도로 지정하는 구조를 가짐
  • 분리된 기능을 Aspect라는 모듈화

용어

Aspect

  • AOP의 기본 모듈
  • 여러 계층에 걸친 관심사의 모듈화
  • 정규 클래스 또는 @Aspect 주석이 달린 정규 클래스를 사용하여 구현
  • Advice(부가기능을 정의한 기능 코드) + PointCut(어디에 적용할지)

Advice

  • 부가기능을 부여할 대상에 제공할 부가기능을 담고 있는 모듈

Join Ponint

  • AOP가 적용될 메소드
  • 메소드 실행 또는 예외처리와 같은 프로그램 실행 중인 지점
  • Spring AOP에서 Join Point는 항상 메서드 실행을 나타냄

Advice

  • Join Point에서 AOP가 적용되는 시점
  • around, before, after ... 어드바이스의 특정 조인포인트에서 에스펙트가 취하는 조취
    • @Before : 어드바이스 타겟 메소드가 호출되기 이전에 어드바이스 기능 수행
    • @After : 타겟 메소드 결과에 관계없이(성공, 예외에 관계없이) 타겟 메소드가 완료된 후에 어드바이스 기능 수행
    • @AfterReturning : 타겟메소드가 성공적으로 결과값을 반환한 후에 어드바이스 기능 수행
    • @AfterThrowing : 타겟 메소드가 수행 중 예외를 던지면 어드바이스 기능 수행
    • @Around : 타켓 메소드 호출 전과 후에 어드바이스 기능 수행

PointCut

  • AOP가 적용될 메소드를 표현하는 정규식과 같은 표현식
  • 어드바이스는 포인트 컷과 연결되어 포인트컷과 일치하는 모든 조인포인트에서 실행(ex - 특정 이름을 가진 메서드 실행)

Weaving

  • 에스펙트와 타겟을 연결하는 과정
  • 포인트컷에 의해 결정된 타겟의 조인 포인트에 부가기능(어드바이스)을 삽입하는 과정
  • AOP가 핵심기능의 코드에 영향을 주지 않으면서 필요한 부가기능을 추가할 수 있도록 해주는 핵심 처리과정
  • 스프링에서는 주로 Run time(RTW) 런타임 적용 방법 사용

스프링 AOP 특징

  • 프록시 패턴 기반의 AOP 구현체, 접근 제어 및 부가기능을 추가하기 위해 프록시 객체 사용
  • 스프링 빈에만 AOP 적용 가능
  • 모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서의 문제(중복코드, 객체들간 관계 복잡도 증가 등...)에 대한 해결책을 지원하는 것이 목적

참고

https://engkimbs.tistory.com/746
https://velog.io/@kai6666/Spring-Spring-AOP-%EA%B0%9C%EB%85%90
https://docs.spring.io/spring-framework/docs/2.5.x/reference/aop.html

0개의 댓글