📌 Spring AOP(Aspect Oriented Programming)에 대한 자세한 개념들은 아래 포스팅을 참고해주세요.
<Spring AOP(Aspect Oriented Programming)란?>
📌 먼저, 이 프로젝트에서는 Spring AOP를 활용하여 알림 기능을 분리하였고,
Custom Annotation을 만들어 적용하였습니다.
1. Custom Annotation
만들기
@interface
➜ Annotation 정의 시 이름 앞에 붙여 작성해야함
@Retention
➜ 해당 Annotation이 적용되고 유지되는 범위 설정 ( 이 애너테이션이 언제까지 살아 남아 있을지 )
( RententionPolicy enum으로 범위 설정 가능 )
@Target
@Target(ElementType.TYPE)
➜ 클래스, 인터페이스, enum@Target(ElementType.FIELD)
➜ 필드@Target(ElementType.METHOD)
➜ 메서드 ( 이 프로젝트에서 사용 )@Target(ElementType.PARAMETER)
➜ 파라미터@Target(ElementType.CONSTRUCTOR)
➜ 생성자@Target(ElementType.LOCAL_VARIABLE)
➜ 지역 변수@Target(ElementType.ANNOTATION_TYPE)
➜ 애너테이션@Target(ElementType.PACKAGE)
➜ 패키지@Target(ElementType.TYPE_USE)
➜ 타입@Target(ElementType.TYPE_PARAMETER)
➜ 타입 파라미터@Target(ElementType.MODULE)
➜ 모듈
2. Aspect
정의해주기
( 부가 기능 (Advice) + 적용할 위치 (Pointcut) )
➜ 이 프로젝트의 경우 알림 기능을 Spring AOP를 사용하여 적용할 예정이라 NotifyAspect
임
📌 NotifyAspect에 대한 자세한 내용은 아래 포스팅을 참고해주세요.
3. 메서드에 Annotation 붙이기
위처럼 알림 기능이 필요한 메서드에 우리가 만들었던 Annotation을 붙여주었다.
4. 콘솔 창에서 결과 확인
이 프로젝트에서는 로그 기능 또한 Aspect를 분리하여 적용시켰기 때문에 기능들을 작동시키면 아래와 같이 로그가 자동으로 뜨는데,
위에서 Annotation을 붙였던 메서드를 실행시켜보면,
Aspect에서 정의했던 Advice에서 notifyService.send
로 보낸 정보들이 잘 나타나는 것으로 보아
알림 기능이 잘 작동하는 것을 알 수 있다 !
만약 AOP만 사용하여 횡단 관심사를 분리하였다면,
횡단 관심사가 주입될 핵심 관심사에 대해 매번 포인트컷을 변경해주어 번거로운데
위와 같이 Custom Annotation을 만들어 처리한다면
포인트컷 변경이 필요 없이 해당 Target의 메서드 레벨에 애너테이션만 붙여주면 되기 때문에
유지 보수성 및 확장성을 높여줄 수 있는 방법인 것 같다 !
여기까지 Custom Annotation을 이용하여 프로젝트에 Spring AOP를 적용하는 방법이었고,
⠀
📌 다음 포스팅은 Spring AOP로로그 기능
과 이번 포스팅에서 짧게 다룬알림 기능
구현하기에 대한 내용입니다.
⠀
👉 [Project] Spring AOP로 로그 / 알림 Aspect 구현하기 !