본문 바로가기

IT/Spring80

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.
Private Method Test 하기 Test 코드를 작성하다보면 private method를 테스트해야할 경우가 생긴다.이러한 경우 Reflection을 사용하면 테스트가 가능하다.여기서는 Spring의 ReflectionTestUtils와 Java의 Reflection을 사용하는 방법에 대해 작성하였다.data class Human( val age: Int) { private fun isAdult(): Boolean { return age > 19 }}import org.junit.jupiter.api.Assertions.assertFalseimport org.junit.jupiter.api.Assertions.assertTrueimport org.junit.jupiter.api.Testimport org.s.. 2023. 9. 14.
Annotation Bean register ApplicationContext 의 구현체 GenericXmlApplicationContext 의존성 주입을 지원하기 위한 클래스이며, XML 기반의 설정 파일을 사용하여 Bean 을 관리하게 해준다. AnnotationConfigApplicationContext XML이 아닌 어노테이션을 통해 Bean 을 관리하게 해준다. AnnotationConfigApplicationContext public class AnnotationConfigApplicationContext extends GenericApplicationContext implements AnnotationConfigRegistry { @Override public void register(Class... componentClasses) {.. 2023. 9. 7.