[SPRING] AOP

림민지·2025년 5월 15일

Today I Learn

목록 보기
56/62

🧈 1. AOP란 뭘까?

AOP는 "관점 지향 프로그래밍"이라는 뜻
➡️ 특정 행동이 일어나면, 자동으로 추가 행동을 몰래 넣는 기술!

📌 AOP는 언제 쓰면 좋을까?

1. 로그 남기기 📋 : 관리자가 접근했네? 언제 무엇을 했는지 남길때
2. 보안 검사 🔐
3. 시간 측정 🕒
4. 트랜잭션 처리 💰
이런 공통적인 작업을 한 번에 관리하고 싶을 때 아쥬 딱

✒️ 예제

예제를 통해 이해해보자
이 예제는, 관리자가 접근할 때마다 로그를 남기는 AOP 코드이다

@Slf4j
@Aspect
@Component
@RequiredArgsConstructor
public class AdminAccessLoggingAspect {

    private final HttpServletRequest request;

    @After("execution(* org.example.expert.domain.user.controller.UserController.getUser(..))")
    public void logAfterChangeUserRole(JoinPoint joinPoint) {
        String userId = String.valueOf(request.getAttribute("userId"));
        String requestUrl = request.getRequestURI();
        LocalDateTime requestTime = LocalDateTime.now();

        log.info("Admin Access Log - User ID: {}, Request Time: {}, Request URL: {}, Method: {}",
                userId, requestTime, requestUrl, joinPoint.getSignature().getName());
    }
}

@어노테이션

@Slf4j
: "로그 남기기 도구(log)를 쓰겠다"는 뜻
→ log.info(...) 처럼 로그 메시지를 출력할 수 있따
@Aspect
: 🔍 '감시 역할'을 하겠다는 표시
→ 특정 행동을 몰래 보고 있다가, 그때 이 코드에 적힌걸 해버릴거야!!!!라는 뜻
@Component
: 이 클래스를 Spring이 관리하도록 등록해주는 표시
@RequiredArgsConstructor
: 생성자 자동 주입

Aspect 어노테이션언제 쓸까?
@Before메서드 실행 전
@After메서드 실행 후 (성공, 예외 상관없음)
@AfterReturning메서드 정상 종료 후
@AfterThrowing메서드 예외 발생 시
@Around메서드 전/후 모두 제어 가능

코드

private final HttpServletRequest request;

지금 요청한 사람(관리자)의 정보 같은 걸 가져올 수 있는 도구
👉 누가 어떤 주소로 왔는지 등을 알 수 있다

@After("execution(* org.example.expert.domain.user.controller.UserController.getUser(..))")

몰래 지켜보는 포인트(지점)을 알려주는 어노테이션! @After
이 코드에서의 뜻은,
UserController라는 클래스 안의 getUser()라는 메서드가 끝난 직후에, 이 AOP의 기능을 수행한다!

public void logAfterChangeUserRole(JoinPoint joinPoint) {

JoinPoint는 누가 호출했는지 등의 정보를 담은 메서드

이렇게하면 로그로 출력해버릴 수 있따

log.info("Admin Access Log - User ID: {}, Request Time: {}, Request URL: {}, Method: {}",
    userId, requestTime, requestUrl, joinPoint.getSignature().getName());

profile
@lim_128

0개의 댓글