Spring Core/03. AOP

06. AOP 작성 주의 사항

  • -
반응형

AOP는 우리의 코드에서 횡단 관심 사항을 분리해 줌으로 엄청난 자동화를 이룰 수 있다. 하지만 잘못 사용하면 큰 난관에 부딪힐 수도 있으니 주의해야 한다.

 

AOP 작성 주의 사항

 

일반적인 작성 시 주의 사항

  • AOP를 잘못 사용하면 예기치 못한 큰 문제를 일으킬 수 있다. 좀 억지로 만들어본 코드지만 다음과 같이 advice를 설정하면 어떤 일이 발생할까?
    @Before("execution(* *(..))")
    public void toAllMethod(JoinPoint jp) {
      // do something
    }
    이 코드는 프로젝트의 모든 빈의 메서드에게 영향을 줄것이다. 이로 인한 부작용은 심각할 수 있다.따라서 AOP를 사용할 때는 적용 대상을 정확히 파악하고 꼭 필요한 내용만 AOP로 작성해야 한다.
  • AOP를 적용하면 코드의 복잡도가 크게 증가한다. AOP 이전에는 main 메서드에서 부터 차근차근 따라가면 전체적인 흐름을 이해할 수 있었다. 하지만 AOP가 적용되면 target의 메서드 만으로는 도저히 분석할 수가 없다. 따라서 작성 시 반드시 테스트를 통해 동작을 확인해야 하고 문서화를 잘 해두어야 나중에 유지보수가 용이하다.

  • AOP는 runtime에 proxy를 만드는 등 코드를 변경하므로 성능에 영향을 줄 수 있다. 따라서 성능이 중요한 경우에는 AOP 사용을 신중히 고려해야 한다.

 

Spring에서 AOP의 대상 파악 주의

스프링의  AOP는 빈을 대상으로만 적용이 가능하다. 즉 일반 객체를 대상으로는 동작하지 않는다.  관리 대상을 빈에서 proxy로 변경해서 적용할 뿐이니 너무 당연한 일이다.

그리고 spring의 AOP는 proxy를 기반으로 하므로 proxy를 통하지 않은 접근은 AOP의 대상이 아니다

빈 내부에 AOP의 대상인 methodA와 methodB가 있다고 생각해 보자. 이 메서드들을 외부에서 호출할 때는 당연히 Proxy를 통하게 된다. 이 과정에서 methodB가 methodA를 내부적으로 호출한다면 어떻게 될까?

직접 methodA를 호출했을 때와는 달리 proxy 입장에서는 methodB만 호출된 것이므로 advice를 동작하지 않는다.  즉 내부에서 호출되는 methodA는 AOP의 적용대상이 아님을 주의하자.

 

반응형

'Spring Core > 03. AOP' 카테고리의 다른 글

05. Spring 내부의 AOP들  (0) 2021.10.29
04. advice의 타입  (0) 2020.06.20
03. pointcut 작성  (0) 2020.06.20
02. Aspect 작성과 동작  (0) 2020.06.18
01. AOP 기본 컨셉  (0) 2020.06.18
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.