[Spring] AOP

gnoesnooj·2021년 11월 22일
0

- AOP 관점 지향 프로그래밍

어떤 로직을 기준으로 핵심 로직, 부가적인 로직으로 관심사를 나눈다.
만일 여러 코드에서 부가적인 로직이 반복, 공통적으로 사용이 되고 있다면, 해당 관심사(로직)을 모듈화하여 사용한다.

-> 부가적인 관심사를 없애고 핵심 관심사만을 남겨서 해당 기능만 보여주도록 하며
-> 유지보수할 때 일일이 찾아서 수정하지 않고 모듈만 수정해주면 된다.

구조 ?

  • Aspect : advice + PointCut 최소한의 단위
  • Target : aspect 가 적용될 객체
  • advice : 실행될 aspect의 내용
  • JoinPoint : aspect가 적용가능한 지점
  • PointCut : aspect 가 실제 실행되는 지점 (JointPoint 의 부분집합 관계)

AOP 어노테이션

  • @Component
  • @Aspect
  • @Around
    @Around("execution(* -- 패키지경로 == ..*. --객체명 --.*(..))*) : 해당 패키지 경로에 있는 객체명의 모든 메서드에 Aspect를 적용한다는 뜻
    @Around("@annotation(--어노테이션--)")사용 시 특정 어노테이션이 붙은 포인트에만 aspect를 적용할 수 있다.
  • @Around 말고 Before , After 등과 같은 어노테이션을 통해 언제 해당 aspect가 실행 될 지 정할 수 있다.

AOP의 장점 ?

  • 관심사 분리를 통해서 불필요한 중복되는 코드를 없앨 수 있고, 부가적인 관심사의 코드를 수정 시 유지보수가 보다 수월해진다.
  • 개발자는 비즈니스 로직 개발에 좀 더 집중할 수 있다.

AOP의 단점 ?

  • Aspect의 로직을 모르고 가져다가 사용 시에, 본인의 코드와 맞지 않아서 발생하는 문제가 무엇인지 모를 수도 있다.
  • 어떤 복잡한 로직의 aspect에 대해서 많은 곳에서 사용이 될 때 어디서 사용 되었는지 헤맬 수 있음. 정확히 알기 위해 로그를 찍어야 하는데 이러면 또 사용하는 aspect 가 늘어난다.
profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글