갈수록 커밋 내역이 줄어들고 잔디밭에 잔디숱이 적어지는데 이러다 빵구날까봐 걱정이다. 사실 커밋할 것들은 많지만 뭔가 전체적으로 구현이 되어서 긴장도 풀어지고 체력도 떨어져서 핑계대느라 커밋을 안하고 있는거다...반성하자! 할 일이 많다! TIL 시작.
프로젝트에서는 항해 대대로 유물처럼 전해져 내려오는 ResponseDto의 fail 메서드를 사용해서 예외 처리를 하고 있다. 이 코드를 지금껏 잘 차용해서 쓰면서도 눈치채지 못했던 궁금증이 이제야 생기게 되었다. fail 메서드를 통해 상태 코드, 에러 메세지 등을 바디에 담아 응답하는데 상태 코드를 바디에 담아서 응답하는 것이 어떤 의미가 있는지 잘 모르겠다.
public static <T> ResponseDto<T> fail(Integer httpStatus, String message, String detail) {
return new ResponseDto<>(false, null, new Error(httpStatus, message, detail));
}
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(GlobalException.class)
protected ResponseDto<?> handleGlobalException(GlobalException e) {
return ResponseDto.fail(
e.getErrorCode().getHttpStatus(),
e.getErrorCode().getMessage(),
e.getErrorCode().getDetail());
}
}
예를 들어 404 NOT FOUND 상태 코드를 응답할 때 실제 Strat line에는 200 코드가 뜨고, 바디에만 404를 담아 보낸다.
바디에만 상태 코드를 404를 날리고 실제 start line의 상태코드를 200으로 날리는건 문제가 있다고 생각했고, 지금 당장은 아니지만 프로젝트 진행이 어느정도 마무리가 되면 바디에는 에러 메세지 정도만 담아 보내고, start line에 상태코드를 변화를 주는 방향으로 리팩터링을 해야겠다.