[TIL] Intercepter, AOP

YJin·2025년 4월 21일

[내배캠 Spring 6기_TIL]

목록 보기
23/56

Intercepter

1. Interceptor와 AOP를 활용한 API 로깅

  • 키워드 : Interceptor 또는 AOP를 활용합니다.
  • 어드민 사용자만 접근할 수 있는 특정 API에는 접근할 때마다 접근 로그를 기록해야 합니다.

요구사항:

  1. 어드민 사용자만 접근할 수 있는 컨트롤러 메서드는 다음 두 가지예요.
    • org.example.expert.domain.comment.controller.CommentAdminController 클래스의 deleteComment()
    • org.example.expert.domain.user.controller.UserAdminController 클래스의 changeUserRole()

로깅 구현 방법:

  1. Interceptor를 사용하여 구현하기
    • 요청 정보(HttpServletRequest)를 사전 처리합니다.
    • 인증 성공 시, 요청 시각과 URL을 로깅하도록 구현하세요.
  2. AOP를 사용하여 구현하기
    • 어드민 API 메서드 실행 전후에 요청/응답 데이터를 로깅합니다.
    • 로깅 내용에는 다음이 포함되어야 합니다:
      • 요청한 사용자의 ID
      • API 요청 시각
      • API 요청 URL
      • 요청 본문(RequestBody)
      • 응답 본문(ResponseBody)
  3. 세부 구현 가이드
    • Interceptor:
      • 어드민 인증 여부를 확인합니다.
    • AOP:
      • @Around 어노테이션을 사용하여 어드민 API 메서드 실행 전후에 요청/응답 데이터를 로깅합니다.
      • 요청 본문과 응답 본문은 JSON 형식으로 기록하세요.
    • 로깅은 Logger 클래스를 활용하여 기록합니다.

API 접근이므로 컨트롤러 로깅

디스패처 서블릿 - 인터셉터 - 컨트롤러 사이에 위치

Spring이 제공하는 기술로써, 디스패처 서블릿(Dispatcher Servlet)이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공

PreHandle

컨트롤러 호출 전에 실행

AfterHandle

컨트롤러 호출 후에 실행

작동할 수 있도록 클래스를 빈(Bean)으로 등록해 주어야 하는데요. 이를 위해 WebMvcConfigurer 인터페이스를 구현한 설정 클래스가 필요

필터 동작 후에 서블릿, 인터셉터인데 필터에서 인증은 확인하는 건 못하는걸까?
스프링 컨텍스트 밖에 있어서그런가?

3.4.0 이하에선 지원을 안해준다 MockitoBean을......

AOP

관점 지향 프로그래밍

공통 관심사를 분리하여 중심 로직으로부터 서브 로직(공통 관심사)를 분리가능

AOP는 따로 어노테이션을 적용해줘야함

프록시 사용?

https://alwayspr.tistory.com/34

profile
백엔드 개발도 락이다

0개의 댓글