[Spring] Logging AOP

·2023년 4월 8일
0

Spring

목록 보기
24/24

AOP 개념
AOP의 대해 학습을 하긴 했지만 프로젝트에서 어떻게 활용해야 하는지 전혀 모르겠어서 그냥 이런게 있다~ 하고 넘어갔다. 그러지 말았어야..

AOP로 Logging하기!

의존성 라이브러리 추가

implementation 'org.springframework.boot:spring-boot-starter-aop'

LogAop 클래스 작성

@Aspect
@Component
@Slf4j
public class LogAop {}

해당 클래스를 Spring Bean으로 등록하기 위해 @Component를 추가해주었다.

@Aspect

@Aspect애너테이션은 해당 클래스가 공통 기능을 제공하는 Aspect 클래스를임을 선언하기 위해 사용된다.

@PointCut

@Pointcut("execution(* com.server.domain..*.*(..))")
    private void cut() {}

@Pointcut애너테이션은 AOP가 적용될 JoinPoint들을 정의한다. AspectJ 표현식을 사용하여 @Pointcut가 지정한 메서드를 실행하는데 execution(* com.server.domain..*.*(..))는 패키지 이름을 정의한 것이다.

🚨주의할 점
처음에는 전체 코드에 AOP를 사용하기 위해 com.server로 설정하였다. 이렇게 넓은 범위를 지정할 경우 JWT의 SecretKey와 같은 유출되지 않아야 할 정보들이 유출될 수 있으니 주의해야 한다!

execution(접근제어자,반환타입, 패키지를 포함한 클래스 경로, 메소드파라미터 )

AspectJ 표현식은 다양한 방식으로 표현할 수 있다!

@Before

@Before("cut()")
    public void beforeLog(JoinPoint joinPoint) {...}

cut()이 실행되지 이전에 실행되는 메서드를 지정한다.

@AfterReturning

@AfterReturning(value = "cut()", returning = "returnObj")
    public void afterReturning(JoinPoint joinPoint, Object returnObj) {...}

메서드가 예외 없이 정상 완료 후 실행된다.
returning 속성에 지정된 타입을 반환하는 메서드만 해당 메서드를 실행한다.

참고 블로그
AspectJ표현식

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

0개의 댓글