로깅 3

(AOP) 메세지 큐 요청/응답 로깅

이전 Filter 를 활용하여 Http 요청과 응답 값에 대한 로깅을 진행했었다.하지만, RabbitMQ 와 Kafka 등을 활용하게 되며 Http 요청 이외의 값에도 로깅이 필요하게 되었고, 최종적으로 AOP 를 활용해 이러한 코드를 구현하게 되었다.( 로깅을 위해서는 Filter ,Interceptor 를 활용할 수도 있으나, 이들은 Http 요청만을 가로챌 수 있다는 문제가 존재해 선택하지 않았다. )AOP 에서는 구현한 코드(메소드)를 어떤 시점에 작동시킬지 아래와 같은 메소드를 활용해 지정할 수 있다.Before 메소드를 실행하기 전 작동After메소드를 실행 후 작동AfterReturn메소드가 [정상] 실행 후 작동 ( 반환 값을 가져올 수 있음 )AfterThrowing메소드가 예외 처리 되..

Log 2025.05.11

ContentCachingRequestWrapper 동작 원리

ContentCachingRequestWrapper은 요청의 응답을 단 한 번 밖에 읽지 못 하기에 이를 여러번 사용할 수 있도록 해준다. 다만 여기에는 여러가지 조건과 제약이 있는데 이를 살펴보자.ContentCachingRequestWrapper를 사용하기 위해 보통 아래와 같은 방식을 사용하는데, 처음 이를 사용할 때 ContentCachingRequestWrapper는 request 값을 캐싱하여 담아두는 , 복사해둔다는 개념만 알았기에 선언과 동시에 이 값이 저장이 되는 것으로 생각하고 있었다.하지만 이를 자세히 살펴보면 , 선언과 동시에 저장되는 것은 request 값의 length뿐, 그 값은 저장이 되지 않은 것을 볼 수 있다.실제로 데이터를 저장하는 것은 값을 read 할 때이며, 때문에..

Log 2024.08.04

스프링부트 Filter를 이용한 로그(Request,Response ) 출력

스프링부트에서 로그 관리를 위해서는 크게 Filter, Interceptor,AOP 를 활용할 수 있다.이중 Interceptor와 AOP는 스프링 내부에서 동작하는 반면, Filter는 스프링 외부에서 동작하여 스프링 내에서 가공되기 전 요청과, 가공된 후의 응답 값을 가져와 읽을 수 있다는 장점이 있어 이번에는 Filter를 활용하여 Request와 Response의 값을 로그로 출력해보려한다.우선 로그를 출력하기 위해 아래 의존성을 추가해준다.( lombok이 아닌 다른 의존성 혹은 방법을 사용해도 무관하다 )implementation 'org.projectlombok:lombok'당연하게도 로그를 띄우기 위해서는 외부에서 전달 받은 Request 값을 스프링으로 보내기 전 무조건 한 번은 읽어야 ..

Log 2024.08.02