Open sootudio opened 7 months ago
실제로 AOP에서 포인트컷을 선택할 때 주로 고려하는 기준은 다음과 같다고 합니다.
1. 기능적 요구사항: 가장 중요한 기준 중 하나는 어떤 기능을 구현하고자 하는지에 따라서이다. 어떤 로직을 어느 부분에 적용하고자 하는지를 고려하여 포인트컷을 선택할 수 있다.
2. 적용 범위: 어떤 부분에 AOP를 적용할지 결정하는 것도 중요하다. 전체 애플리케이션에 대한 AOP 적용인지, 특정 패키지 또는 모듈에만 적용할지를 고려할 수 있다.
3. 애플리케이션 아키텍처: 애플리케이션의 아키텍처를 고려하여 포인트컷을 선택할 수 있다. 예를 들어, 서비스 레이어, 데이터 액세스 레이어 등과 같은 특정 아키텍처 구성요소에 AOP를 적용할 수 있다.
4. 장애 관리: 특정 기능에 대한 에러 처리나 로깅과 같은 장애 관리 기능을 위해 포인트컷을 선택할 수 있다. 이를 통해 예외 처리나 로깅을 일괄적으로 적용할 수 있다.
5. 유지보수와 확장성: 포인트컷을 선택할 때 유지보수성과 확장성도 고려해야 한다. 변경이 잦거나 확장이 필요한 부분에 대해서는 유연한 포인트컷을 선택하는 것이 좋다.
p. 521 참고 ...
6.4.1장에서는 OCP 원칙을 제대로 지키지 못하는 InvocationHandler 부분을, 메소드를 선정하는 Pointcut과 부가기능 코드가 있는 Advice로 나누고, 하나 이상의 어드바이스와 포인트컷을 묶어 Advisor 오브젝트를 만들어 사용하고 있습니다.
이 때, PointcutAdvisor() 테스트에서 NameMatchPointcut 이라는 포인트컷 객체를 사용해서 mappedName 프로퍼티 값을 이용해 메소드의 이름을 비교하는 방식으로 부가기능을 부여할 대상 메소드를 선정했습니다.
예제 코드에서는 위처럼 'sayH'로 시작하는 모든 메소드를 선택했고, 6.4 장의 나머지 내용에서 add나 get, update로 시작하는 모든 메소드들을 선정한다는 설명이나 코드가 나왔고, 6.4.2장에서는 적절한 메소드 명명 규칙을 활용하여 Pointcut으로 선정하라고 설명하고 있습니다. 또한 이후의 6.5장에서 Pointcut을 확장하고, 필터링을 추가할 때도 항상 와일드카드(*)를 사용한 메소드의 이름을 기준으로 메소드를 찾는 방식을 선택하고 있습니다.
여기서 몇 가지 궁금한 점이 생겨 질문 올립니다!
update
도 있고,updateAll
도 있다면, 이름만으로는 구별하는 것이 힘들거라고 생각했습니다. 후자의 경우에는 메소드 선정에서 예외가 발생할 확률이 적겠지만, Pointcut을 사용하는 코드가 더 복잡해진다고 생각했습니다.