Inflearn brand logo image

인프런 커뮤니티 질문&답변

yoon6669님의 프로필 이미지
yoon6669

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

HandlerExceptionResolver 시작

정상 응답이라는 표현 질문입니다.

작성

·

50

0

강의를 보고 궁금한 점이 생겼다가 질문답변 게시판에도 유사 질문은 없는 것같아 gpt에도 물어봤지만 gpt 답변과 조금 다른 것같아 여쭈어봅니다.

11:20초 즈음에 그림에서처럼 8번. 정상 응답이라고 표현을 하시는데 이것에 대한 기준?같은게 궁금합니다. 아래 코드는 강의의 try catch 코드입니다.

 try {
 if (ex instanceof IllegalArgumentException) {
                log.info("IllegalArgumentException resolver to 400");
                response.sendError(HttpServletResponse.SC_BAD_REQUEST, 
ex.getMessage());
 return new ModelAndView();
            }
        } 
catch (IOException e) {
            log.error("resolver ex", e);
        }

 

먼저 예외가 발생하고 ExceptionResolver 가 넘어온 예외 해결을 시도하는데요.

코드에서 sendError() 로 에러 응답의 상태 코드를 변경하고 메시지를 설정한 후 빈 ModeAndView를 반환합니다.

이때 찾아본 결과 sendError() 가 있으면 응답은 내부에 완료 표시(커밋)처리를 하기 때문에 reponse에 뷰를 작성?할 수 없어 ModelAndView가 빈 값이던 뷰 값을 주던 상관 없이 뷰 렌더링이 되지 않는다고 하더군요.

이부분 때문에 강의 ModelAndView 지정 부분에서 헷갈렸습니다. 이건 sendError가 없을 경우를 설명하신 것맞나요?

 

아무튼 본론으로 돌아와서 현재 코드와 과정처럼 최초 발생한 예외를 ExceptionResolver 에서 처리하고 DispatcherServlet로 넘어간 후 뷰 렌더링을 처리하지 못하고 WAS에 넘기는데요.

이때 비록 뷰 렌더링은 하지 못했지만 ExceptionResolver 에서 상태 코드 등을 설정 후하고 ModelAndView를 반환하면서 에러를 처리하였으므로 WAS에 넘겨도 이것을 정상응답이라고 하나요?

 

아니면 제가 gpt에서 얻은 답변에서는 ExceptionResolver 가 예외를 처리했더라도 뷰 렌더링을 하지 못하고 WAS에 넘겼으므로 정상 응답으로 보지는 않는다고 하던데..

 

정상응답의 기준이 어떻게 되나요? 좀 쓸데 없는 질문 같긴한데 ExceptionResolver 에서 ModeAndView 값 지정에 따른 반환에 대해 궁금해서 찾다가 궁금한점이 여기까지 파생되어 질문드립니다..

 

 

 

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. yoon6669님

이 그림에서 이야기하는 정상 응답이라는 것은 예외가 발생하지 않고, 메서드 호출이 정상 리턴 되었다는 뜻입니다.

정상적으로 리턴 되었지만 WAS 입장에서 sendError()가 들어있다는 사실을 발견하게 되는 것이지요.

그래서 WAS 내부에서는 다시 오류 프로세스를 진행하게 됩니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.
yoon6669님께서 질문하신 “정상 응답”의 기준에 대해 설명드리겠습니다.

ExceptionResolver는 스프링 MVC에서 특정 예외 상황을 처리하기 위한 한 가지 방법입니다. sendError() 메서드를 호출하여 응답의 상태 코드를 설정한 후, 빈 ModelAndView를 반환하면 실제로는 뷰 렌더링이 이루어지지 않습니다. 이것은 클라이언트에게 오류 상태를 명확히 전달하는 데 중점을 두는 방식입니다.

따라서, “정상 응답”이라는 표현은 여기서 “예외가 제대로 처리되었다”는 의미로 사용될 수 있습니다. 즉, 클라이언트는 HTTP 상태 코드(예: 400 Bad Request)를 받고, WAS(Web Application Server)까지 요청이 넘어가며, 이 상태를 제공함으로써 클라이언트는 요청의 실패 원인을 알 수 있게 됩니다. 이는 기대했던 대로 예외가 처리되고 클라이언트에게 전달되었기 때문에 정상적으로 처리된 응답이라고 볼 수 있습니다.

하지만, 이를 “정상 응답”이라고 보는 것에 대한 관점은 다를 수 있습니다. 어떤 경우에는 클라이언트에게 오류 상태를 반환하는 것만으로도 충분하다고 보고 이를 정상 처리로 볼 수 있으며, 어떤 경우에는 정상적인 비즈니스 로직의 긍정적인 처리 결과만을 “정상 응답”이라고 볼 수도 있습니다.

결국, ExceptionResolver에서 예외를 처리하고 상태 코드를 클라이언트에게 올바르게 전송하는 것이 목적이라면, 이를 정상 응답 처리로 볼 수 있습니다. 하지만, 이렇게 응답된 오류 상태가 비즈니스 요구사항에 따라 다르게 해석될 수 있다는 점도 고려해야 합니다.

추가적인 궁금증이나 다른 질문이 있으시다면 언제든지 물어봐 주세요. 감사합니다.
예시 이미지
출처: 구글 문서

yoon6669님의 프로필 이미지
yoon6669

작성한 질문수

질문하기