본문 바로가기

분류 전체보기318

Spring AOP 분석 Spring AOP 는 타겟이 클래스냐 인터페이스냐에 따라 두가지 방법으로 aop를 처리한다. 인터페이스 인 경우 JdkDynamicAopProxy를 사용하며 클래스인 경우 ObjenesisCglibAopProxy 를 사용하여 처리한다. public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory implements AutowireCapableBeanFactory { /** * Central method of this class: creates a bean instance, * populates the bean instance, applies post-processors, etc. * @see #doCreateBe.. 2023. 10. 10.
RestControllerAdvice 사용하여 로깅 @RestControllerAdvice 혹은 @ControllerAdvice 를 사용하여 로깅하는 방법도 존재한다. Request import io.github.oshai.kotlinlogging.KotlinLogging import org.springframework.core.MethodParameter import org.springframework.http.HttpInputMessage import org.springframework.http.converter.HttpMessageConverter import org.springframework.web.bind.annotation.RestControllerAdvice import org.springframework.web.servlet.mvc.met.. 2023. 9. 25.
AOP 사용하여 로깅 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 을 사용하는 메서드를 찾아서 로깅을 해주는 방식이다. getPointCut()에 return을 주지 않으면 데이터가 유실되는 현상이 나타나므로 return을 붙여줘야한다. getBody()에서는 사용된 어노테이션중 RequestBody를 찾아서 데이터를 가져 오도록 처리 하였다. @Aspect @Component class ApiLogAop { private val logger = KotlinLogging.logger {} @Pointcut( "@annotation(org.springframework.web.bind.annotation.GetMapping) ||" + "@annotation(org.sprin.. 2023. 9. 25.
Interceptor를 사용하여 Request/Reponse Logging Interceptor를 사용하여 Request/Reponse Logging 하는 방법에 대해 알아보자 이 글에선 예제 및 테스트용으로 작성하였기에 validation 처리는 따로 하지 않는다. Interceptor에서 logging을 할 때, Body를 읽지 않는 경우에 발생하는 문제가 있다. 만약 필요하지 않다면 바로 logging을 적용하면된다. body 사용하지 않는 경우 class ApiLogInterceptor : HandlerInterceptor { private val logger = KotlinLogging.logger {} override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: A.. 2023. 9. 20.