Spring AOP

Ada·2022년 10월 8일
0

항해TOL

목록 보기
32/63
  • 부가기능을 모듈화
    • AOP (Aspect Oriented Programming) 를 통해 부가기능을 모듈화
      • '부가기능'은 '핵심기능'과는 관점(Aspect), 관심이 다름
      • 따라서 '핵심기능'과 분리해서 '부가기능' 중심으로 설계, 구현 가능
  1. Aspect: Advice + PointCut
    = 어떤 부가기능을 어느 핵심기능에 어떻게 적용했는가?

  2. Advice(부가기능): 어떤 부가기능을 언제?

  3. PointCut: 부가기능 적용 위치. 어느 패키지/메서드에?

  • @Around : 핵심기능의 수행 전후에 모두 수행되는 어드바이스

  • joinpoint : 부가기능을 적용할 수 있는 포인트컷 위치의 후보를 가리킴

// 핵심기능 수행
Object output = joinPoint.proceed();
return output;

원래 수행하려고 했던 핵심기능 수행


  • 스프링 AOP 어노테이션
    1. @Aspect

      • 스프링 빈 (Bean) 클래스에만 적용 가능
    2. 어드바이스 종류

      • @Around : '핵심기능' 수행 전과 후 (@Before + @After)

      • @Before : '핵심기능' 호출 전 (ex. Client 의 입력값 Validation 수행)

      • @After : '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 (try, catch 의 finally() 처럼 동작)

      • @AfterReturning : '핵심기능' 호출 성공 시 (함수의 Return 값 사용 가능)

      • @AfterThrowing : '핵심기능' 호출 실패 시. 즉, 예외 (Exception) 가 발생한 경우만 동작 (ex. 예외가 발생했을 때 개발자에게 email 이나 SMS 보냄)

    3. 포인트컷

    • 포인트컷 Expression Language
      • 포인트컷 Expression 형태

execution(modifiers-pattern? return-type-pattern declaring-type-pattern? method-name-pattern(param-pattern) throws-pattern?)

  • ? 는 생략 가능
  • 포인트컷 Expression 예제
 @Around("execution(public * com.sparta.springcore.controller..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { ... }
  • modifiers-pattern, 제어자

    • public, private, *
  • return-type-pattern, 반환타입

    • void, String, List, *
  • declaring-type-pattern, 클래스

    • 클래스명 (패키지명 필요)

    • com.sparta.springcore.controller.*

      -> controller 패키지의 모든 클래스에 적용

    • com.sparta.springcore.controller..

      -> controller 패키지 및 하위 패키지의 모든 클래스

  • method-name-pattern(param-pattern)

    • 함수명
      - addFolders : addFolders() 함수에만 적용
      - add* : add 로 시작하는 모든 함수에 적용
    • 파라미터 패턴 (param-pattern)
      -(com.sparta.springcore.dto.FolderRequestDto) - FolderRequestDto 인수 (arguments) 만 적용
      - () - 인수 없음
      - (*) - 인수 1개 (타입 상관없음)
      - (..) - 인수 0~N개 (타입 상관없음)
  • @Pointcut

    • 포인트컷 재사용 가능

    • 포인트컷 결합 (combine) 가능

profile
백엔드 프로그래머

0개의 댓글