Spring 통합테스트: Validation 문제 해결과 깊은 고민
·
Spring/테스트 코드
validation을 사용하여 dto 코드를 작성하고 통합테스트를 진행하던 도중 처음 겪는 문제에 직면했다. 📌 서론 통합테스트에서 "사용자가 잘못된 값을 입력해서 보내면 적절한 예외가 발생한다." 이런 bad 케이스 테스트를 작성하고 실행했다. 이때 예외가 발생해야 테스트가 성공하는데 내가 작성한 테스트에서는 예외가 발생하지 않았다. 그래서 나는 가장 먼저 사용자로부터 데이터를 받아오는 dto객체를 살펴봤다. 나는 dto 객체 내부에 Integer타입을 받는 변수를 선언해 주고 spring-validation의 기능을 적용하여 @Min(0)을 적어줬는데 이렇게 해주면 음수(-) 값이 들어왔을 때 검증에 의해 예외가 발생한다. 이렇게 열심히 세팅한 후 테스트를 진행했다. 그런데 보기 좋게 테스트에 실패했..
[Spring] RuntimeException의 메시지
·
Spring/Spring 기초 지식
이번 포스트에서는 RuntimeException의 예외 메시지를 가져오는 getMessage()에 대해서 자세히 알아보자📌 서론테스트 코드를 작성하다 발생했던 문제를 해결하며 이 내용을 정리했다. 예외 처리 메시지를 가져오는 과정에서 문제가 있었기에 RuntimeException의 예외 메시지를 가져오는 과정을 정리해봤고 그 내용을 정리했다. 1. 테스트 코드에서 발생한 문제 파악하기테스트 코드를 작성했다.테스트 코드를 작성하고 실행했는데 코드 중간에 작성된 assertEquals(expectedMessage, exception.getMessage())에서 오류가 발생했다. 테스트 코드 호출 결과테스트 결과를 보면 기대값이 존재하는데 Actual이 null인 오류가 발생했다고 나온다.  오류 분석 - ..
SpringBoot MSA 로깅: Zipkin을 사용한 분산 추적에서 예외상황을 다루는 방법
·
MSA
이번 포스트에서는 저번 포스트에서 설명하지 못했던 서버 간 통신에서 예외가 발생했을 때는 Zipkin 추적을 어떻게 할지 설명한다. 1. Zipkin 예외처리를 위해 @SqsListener 메서드 분석하기 1-1. 레시피 서버의 @SqsListener 메서드를 다시 한번 확인해 보자 이전 포스트부터 기록해둔 SqsListener 코드에는 이미 try-catch-finally가 되어있는데 이건 추적에 대한 예외처리가 완료된 상황의 코드다. 이렇게 포스트를 작성한 이유는 모든 동작에 이상이 없는 것을 확인하고 블로그에 글을 작성했더니 예외처리가 된 채로 코드를 캡처해서 글을 작성하게 되어버렸다. 1-2. Zipkin추적의 예외처리가 적용될 try-resource문법 여기서 중요한 부분은 catch문이다. 만..
Spring: @ControllerAdvice와 AOP를 함께 사용하여 에러 로깅하기
·
Spring/Spring 기초 지식
@ControllerAdvice와 AOP 를 동시에 적용하여 로깅을 해보자 📌 서론 Spring Boot에서는 일반적으로 @ControllerAdvice와 @ExceptionHandler를 사용하여 전역 에러 핸들링을 수행한다. 그러나 이러한 방식은 상세한 로깅에 한계가 있을 수 있다. 이 글을 작성하게 된 계기는 많은 개발자들이 로깅을 어떻게 효율적으로 할 수 있을지, 그리고 예외 상황에서 어떻게 로깅을 해야 할지에 대한 고민을 하고 있기 때문이다. 다니선 회사의 동료 또한 이에 대한 궁금증을 가졌기에 이 글을 통해 그러한 고민을 조금이라도 해결할 수 있으면 좋겠다. 1. 문제 상황 파악 @ExceptionHandler가 명시된 메서드에서는 지정된 Exception 객체만을 받을 수 있기 때문에, 에러..
Spring Boot: @ControllerAdvice/@RestControllerAdvice로 예외처리하기
·
Spring/Spring 기초 지식
@ControllerAdvice와 @RestControllerAdvice에 대해 자세히 알아보자 📌 서론 프로그래밍에서 예외 처리는 매우 중요한 부분이며, Spring Boot에서는 @ControllerAdvice와 @RestControllerAdvice를 통해 이를 효율적으로 수행할 수 있다. 이 어노테이션들은 코드의 재사용성과 유지 보수성을 높여, 복잡한 비즈니스 로직에서도 예외 상황을 안정적으로 관리할 수 있게 해준다. 1. @ControllerAdvice이해 @ControllerAdvice란? @ControllerAdvice는 Spring 3.2에서 도입된 어노테이션으로, 모든 @Controller 클래스가 공유하는 공통 로직을 정의할 때 사용한다. 주로 예외 처리와 바인딩 설정, 모델 객체 등에..