본문 바로가기
Spring

[Spring] Spring AOP Logging 공통 관심사 분리

by cheery7272 2023. 1. 4.

현재 모든 controller 로직에 controller 시작을 알리는 log를 적용하였다.

 

그저 시작을 알리는 log 이지만 만약 log를 변경해야할시에는 모든 log를 변경해야한다.

또한 트랜잭션 시작을 알리는 log를 작성해야할 경우 controller와 동일하게 모든 서비스 메서드에 log를 작성해야하며

변경할시에 공통 로그를 모두 변경해야한다.

 

위의 그림에서는 주문을 생성하거나 배달 가능지 조회, 주문한 물품 조회라는 핵심 로직을 가지고 있다.

그렇기에 log는 부가기능으로 생각해볼 수 있다.

 

AOP는 핵심 로직과 부가 로직으로 구성된 로직에서 중복되는 공통관심사항을 따로 분리하여 관리할 수 있다.

 

Pointcut 어노테이션은 필터링할 위치를 지정해주는 것으로

allLogController 메서드는 클래스명이 Controller로 지정된 모든 클래스를 지정하는것이다.

allService 메서드는 클래스명이 Service로 지정된 모든 클래스를 지정하는것이다.

 

LogAspect는 Controller의 요청전과 요청 후까지의 log를 작성할 수 있도록 log라는 부가기능을 AOP로 등록한것이다.

 

Before 어노테이션은 메서드를 실행하기 전 시점에 실행하는것이며

AfterReturning 어노테이션은 메서드를 실행한 후 시점에 실행하는 것이다.

AfterThrowing 어노테이션은 해당 메서드가 에러가 발생했을시점에 실행된다.

 

그렇기에 Controller의 해당 API 요청이 실행되기 전 doLogBefore이 실행되며 응답을 반환하고 doLogReturn이 실행되며

예외가 발생했을시에 doLogThrowing을 실행하게된다.

댓글