본문 바로가기
프레임워크/Spring

Spring Boot에서 AOP와 Interceptor를 활용한 로깅 방법

by taeung515 2025. 6. 12.

Spring Boot에서 로깅의 중요성

Spring Boot로 개발할 때 로깅은 디버깅, 트러블슈팅, 모니터링, 보안 등 모든 영역에서 필수적인 요소입니다.

특히 사용자 요청(request)과 응답(response) 정보를 기록하면 이슈 분석이 훨씬 쉬워지고, 시스템 안정성을 높일 수 있습니다.

 


AOP(Aspect Oriented Programming) 관점지향프로그래밍

AOP는 공통관심사(로깅, 트랜잭션 등)를 핵심 비지니스 로직과 분리해서 관리하는 프로그래밍 기법입니다.

  • 장점:
    • 서비스, 컨트롤러, 레포지토리 등 모든 계층에 적용 가능
    • 메서드 실행 전/후 예외 발생 시점 등 다양한 포인트에서 로깅 가능
    • 코드중복 최소화

Interceptor 인터셉터

인터셉터는 HTTP 요청/응답의 전/후처리를 담당합니다.

Spring MVC의 HandlerInterceptor를 구현해서

 

컨트롤러 진입전(preHandle),

컨트롤러 수행 후(postHandle),

요청 완료 후(afterCompletion)

 

세 가지 시점에서 작업을 할 수 있습니다.

  • 장점:
    • 웹 요청/응답 중심의 로깅에 특화
    • 인증, 권한 체크, 공통 응답 처리 등에 적합

AOP와 Interceptor의 차이점

  AOP Interceptor
적용 범위 모든 Spring Bean (서비스, 레포지토리 등) HTTP 요청/응답 (웹 계층)
실행 시점 메서드 호출 전/후, 예외 발생 시 컨트롤러 진입 전/후, 요청 완료 후
주요 활용 트랜잭션, 로깅, 성능 측정, 보안 등 인증/인가, 공통 응답 처리, 로깅
성능 프록시 생성으로 약간의 오버헤드 상대적으로 가벼움

 


로깅코드 예시


다음은 ADMIN 권한으로 changeUserRole 메서드를 호출할 때 요청 body, 요청 시각, 요청 URL, 요청 id를 로깅하는 예시입니다.

  • 요청 시각과 요청 URL은 인터셉터에서
  • 요청 body와 요청 idAOP 로깅으로 처리하였습니다.

 

 

1. AOP를 활용한 로깅 예시

예시코드(@Aspect, @Slf4j, @Pointcut, @Around)

 

 

 

2. 인터셉터를 활용한 로깅 예시

예시코드(implements HandlerInterceptor, preHandle())

예시코드(WebConfig에 등록하는 상황)

 

언제AOP, 언제Intrerceptor를 써야할까?

  • 비지니스 로직 전체(서비스,레포지토리 등)에서 공통 처리 -> AOP 추천
  • 웹 요청(HTTP) 전/후에만 처리 -> Interceptor 추천
  • 로깅/트랜잭션/성능측정 등 다양한 시점 필요 -> AOP 추천
  • 인증, 헤더 검사, 응답 변환 등 HTTP에 특화 -> 인터셉터 추천

'프레임워크 > Spring' 카테고리의 다른 글

JWT, Spring security  (0) 2025.06.23
테스트코드 알아보기  (0) 2025.06.12
필터에서 예외처리  (0) 2025.06.12