[오류 1]
Exception 클래스에서 RuntimeException의 생성자에 적절한 에러 메시지를 전달하지 않아, 발생한 예외의 메시지가 null로 출력되었다. 로그에서 모두 에러 메시지가 제대로 나타나지 않았다.
2025-01-22T16:16:16.664+09:00 ERROR 84514 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: com.------.source.domain.dispatch.exception.DispatchException] with root cause
com.------.source.domain.dispatch.exception.DispatchException: null
at com.-------.source.domain.dispatch.service.DispatchRequestService.createDirectoryTransmissionRequest(DispatchRequestService.java:68) ~[main/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
[원인]
아래는 수정 전 Execption 클래스이다. 초기 코드에서는 Exception 생성 시 ErrorCode만 전달하고 있었으나, RuntimeException의 메시지 필드에 DispatchErrorCode의 에러 메시지(getErrorMessage())를 설정하지 않았기 때문이였다.

[해결 방법]
- Exception의 생성자에서 super(errorCode.getErrorMessage())를 호출하여 RuntimeException의 메시지 필드에 에러 메시지를 전달.
- Exception 클래스에 getHttpStatus() 메서드를 추가하여 ErrorCode의 HTTP 상태를 쉽게 가져올 수 있도록 수정.


[해결 완료]
2025-01-22T16:40:06.141+09:00 ERROR 3345 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: com.------.source.domain.dispatch.exception.DispatchException: 이미 해당 디렉토리 전송 요청을 전송하였습니다.] with root cause
com.------.source.domain.dispatch.exception.DispatchException: 이미 해당 디렉토리 전송 요청을 전송하였습니다.
at com.-------.source.domain.dispatch.service.DispatchRequestService.createDirectoryTransmissionRequest(DispatchRequestService.java:72) ~[main/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
이제 로그에서 에러메세지가 잘 뜨는 것을 확인할 수 있다 !!!
[오류 2]
API 호출 시 서버에서 예외가 발생했을 때, 클라이언트에 반환되는 응답이 500 Internal Server Error로만 표시되고, 구체적인 에러 메시지가 포함되지 않았다. 즉, log에만 에러 메세지가 뜨고 HTTP 응답에는 그냥 500에러로 떴다..

[원인]
전역 예외 처리 클래스에 @RestController를 사용했기 때문이였다. @RestController는 컨트롤러로 동작하지만 예외를 전역적으로 처리하기 위한 어노테이션이 아니라고 한다.... 이로 인해 전역 예외 처리기로 동작하지 않았다.

[해결]
@RestControllerAdvice는 Spring 애플리케이션의 모든 컨트롤러에서 발생하는 예외를 처리할 수 있다.
예외가 발생하면, 해당 예외와 매핑된 @ExceptionHandler 메서드가 호출되어 클라이언트에 적절한 응답을 반환한다.

[해결 완료]

이제 HTTP 요청에도 어떤 이유로 에러가 났는지 알 수 있게 되었다.. 성공 ~!!!
'백엔드 공부' 카테고리의 다른 글
[Java Spring] Mockito & Junit + 코드 예시 (0) | 2025.01.20 |
---|---|
[Java Spring 설계] MSA + Spring Cloud Eureka 개념 (0) | 2025.01.17 |