본문 바로가기

개발일지/TIL

[230629] NullPointerException를 Status Code 400으로 내보내기

Java Spring 예외에 대한 응답 Status Code

지금까지 예외가 나면 Throw를 날려 클라이언트에서 Status 2xx이 날아오지 않는 것만 확인했었다. 이번 시험에서 유저를 찾지 못했을 경우 NullPointException 처리와 함께 Status 400을 클라이언트에 응답으로 내려줘야 했다. NullPointException을 던지고 테스트를 해봤다. 그랬더니 Status 500으로 응답이 떨어지는 것을 확인할 수 있었다.

 

public UserResponseDto findUser(Long id) {
    User user = userRepository.findById(id).orElseThrow(
            () -> new NullPointerException("회원 상세 조회 실패"));

    return new UserResponseDto(user);
}

 

이슈 & 해결

❓예외가 일어난 경우에 어떻게 Status Code를 변경해줄 수 있을까?

💬 예외를 받아서 Status Code 처리해줄 수 있는 것이 필요하다고 생각이 들어 "Java Spring Exception Handler"를 검색을 해서 찾아보았다. @ControllerAdvice와 @ExeptionHandler 어노테이션을 통해 처리하는 방식을 알 수 있었다. 서버에서 등록해 놓은 예외가 던져질 경우 받아와 로직을 처리할 수 있게 해주는 것 같다.

✅ CustomExceptionHandler 클래스를 별도로 만들어 예외 처리할 수 있도록 했다.

 

@ControllerAdvice
@Slf4j
public class CustomExceptionHandler {
    @ExceptionHandler(NullPointerException.class)
    public ResponseEntity handleNotFoundException(NullPointerException e) {
        log.error("UserNotFoundException",e);
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
    }
}

 

생각

클라이언트에 내려주는 응답 코드를 대수롭지 않게 생각했던 것 같다. 이번 기회를 통해 응답 코드에 대해서 검색도 해보고 그러니 응답된 코드에 따라 클라이언트의 반응도 달라진다는 것을 알았다. 서버에서 어떻게 예외를 적절한 Status Code로 변경해주는냐도 개발을 잘하는 사람의 덕목이 아닐까 싶다. 경험치를 쌓자. 예외를 처리하는 방식도 그걸 적절하게 사용하는 방식도.