AOP

수정이·2022년 6월 13일
0

Spring

목록 보기
6/16
post-thumbnail

AOP(Aspect Oriented Programming)


  • AOP : 어떤 로직을 기준을 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.
  • 관심을 분리해서 횡단 관심핵심 관심으로 나눈다.
    • 횡단 관심 : 비즈니스 메소드마다 실행될 공통의 로직을 뜻한다.
    • 핵심 관심 : 비즈니스 메소드를 핵심 관심이라고 한다.

AOP 용어 정리


  • JoinPoint : 클라이언트가 호출하는 모든 비즈니스 메소드를 뜻한다.
  • Pointcut : 필터링된 비즈니스 메소드를 뜻한다.
    • @Pointcut("execution(* com.jeongsu.biz..*Impl.*(..)")
  • Advice : 횡단 관심에 해당하는 공통 기능의 메소드이다.
    • 5가지 Advice 동작 시점이 있다.
      • Before : 비즈니스 메소드 실행 전에 동작한다.
      • After : 비즈니스 메소드 실행 후에 동작한다.
      • After Returning : 비즈니스 메소드가 성공적으로 반환되면 동작한다.
      • After Throwing : 비즈니스 메소드가 실행 중 예외가 발생하면 동작한다.
      • Around : 클라이언트가 호출한 메소드를 가로채 비즈니스 메소드 실행 전후에 처리할 로직을 삽입할 수 있다.
        • Around로 동작하는 어드바이스 메소드는 반드시 ProceedingJoinPoint를 매개 변수로 받아야 한다.
  • Aspect or Advisor
    • 포인트컷과 어드바이스의 결합이다.
    • 애스팩트 설정에 따라 AOP의 동작 방식이 결정된다.
    • 어드바이저는 DB 트랜잭션을 관리할 때 사용한다.

Pointcut 설정 예시


  • 리턴 타입과 패키지 경로 사이에만 띄어쓰기가 있다.
  • 리턴 타입 필터링
    • * : 모든 리턴 타입을 허용한다.
    • void : 리턴 타입이 void인 메소드만 필터링한다.
    • !void : 리턴 타입이 void가 아닌 메소드만 필터링한다.
  • 패키지 경로 필터링
    • com.jeongsu.biz.board : com.jeongsu.biz.board인 패키지를 필터링한다.
    • com.jeongsu.biz.. : com.jeongsu.biz로 시작하는 모든 패키지를 필터링한다.
    • com.jeongsu..board : com.jeongsu 시작하는 모든 패키지 중에서 패키지 마지막이 board인 패키지를 필터링한다.
  • 클래스 이름 필터링
    • BoardServiceImpl : BoardServiceImpl 클래스를 필터링한다.
    • *Impl : 클래스 이름이 Impl로 끝나는 모든 클래스를 필터링한다.
  • 메소드 이름 필터링
    • getBoardList : 이름이 정확하게 getBoardList인 메소드를 필터링한다.
    • get* : 이름이 get으로 시작하는 모든 메소드(get()도 포함)를 필터링한다.
  • 매개변수 필터링
    • (..) : 모든 경우의 매개변수의 개수와 타입을 허용한다.
profile
공부는 꾸준히... 글쓰기도 꾸준히...

0개의 댓글