예제 만들기
- 지금까지 학습한 내용을 활용해서 유용한 스프링 AOP를 만들어보자.
- @Trace 애노테이션으로 로그 출력하기
- @Retry 애노테이션으로 예외 발생시 재시도 하기
리포지토리
서비스
테스트 생성
로그 출력 AOP
애노테이션
애스팩트
AOP 적용
- ExamRepository의 save에
@Trace
를 추가한다. - ExamService의 request에
@Trace
를 추가한다. - ExamTest에
@Import(TraceAspect.class)
를 추가한다. - 이제 ExamTest를 실행하면 로그가 잘 출력되는 것을 확인할 수 있다.
재시도 AOP
애노테이션
애스팩트
- 재시도 하는 애스펙트
- @annotation(retry)와 Retry retry를 사용해서 어드바이스에 애노테이션을 파라미터로 전달한다.
- retry.value()를 통해서 애노테이션에 지정한 값을 가져올 수 있다.
- 예외가 발생해서 결과가 정상 반환되지 않으면 retry.value()만큼 재시도한다
AOP 적용
- ExamRepository의 save에
@Retry(value = 4)
를 추가한다. - ExamTest에서
@Import(TraceAspect.class)
를 @Import({TraceAspect.class, RetryAspect.class})
로 변경한다. - 이제 ExamTest를 실행하면 5번째 문제가 발생했을 때 재시도 덕분에 문제가 복구되고, 정상 응답되는 것을 확인할 수 있다.
참고
- 스프링이 제공하는 @Transactional은 가장 대표적인 AOP이다.
출처