참조 : J2EE Development without EJB 8장 207쪽

Should We Intercept Fields?(필드 Joinpoint를 사용해야 되나?)

객체 지향의 Encapsulation을 깨트리게 되기 때문에 Method Joinpoint로 해결하는 것이 좋겠다.

Too Many Asepcts?(너무 많은 Aspect를 적용해서 메소드를 호출 할 때 뭐가 실행될지 알 수가 없다.)

Tool의 활용이 이 문제를 어느정도 해결해 줄 수 있지만, 일단은 그렇게 많은 Apset를 적용한 프로젝트도 없을 뿐더러, 프로그램 구조를 간단하게 가져가면 해결할 수 있을 것이다.

Orthogonality(직교성)

여러 Aspect가 한 곳에 적용될 때 Aspect 끼리 서로 영향을 끼치는 경우 예측 불가능한 상황이 발생할 수 있을 텐데 이런 문제는 어떻게 해결할 수 있을까?

대부분의 AOP 프레임워크에는 적용되는 Advice의 순서를 정할 수 있다.

Testing Application Using AOP

AOP를 적용하면 왠지 테스트가 어려울 것 같지만, 정 반대로 모듈화를 통해 테스트가 더 용이해 집니다. 트랜잭션 코드를 Aspect로 빼버리면 단위 테스트 할 때 트랜잭션 관련된 테스트 코드를 작성하지 않아도 되겠죠. 그리고 통합 테스트라고 해서 별반 다를 것은 없습니다.

Debugging

??? 흠.. Vertical Slice라는 용어가 나오는데  뭔지 모르겠습니다.

Won't AOP Seriously Affect Perfomance?

AspectJ가 빠르긴 한데 다른 AOP 구현체들에 비해 큰 차이가 나는 것은 아니다. 리플렉션과 객체 생성으로 성능 문제가 생길 수 있지만 자바 리플렉션과 GC의 기능이 향상되고 있다.

성능은 AOP가 적용되는 Granularity와 관련이 있다. 매우 세부적인 곳에 적용하는 Aspect를 많이 사용하면 문제를 발생시킬 수 있지만 대부분 EJB method interception 보다는 성능이 좋을 것이다.