inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

HandlerExceptionResolver 시작

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

90

yoon6669

작성한 질문수 90

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 값 지정에 따른 반환에 대해 궁금해서 찾다가 궁금한점이 여기까지 파생되어 질문드립니다..

 

 

 

spring mvc

답변 2

0

김영한

안녕하세요. yoon6669님

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

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

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

감사합니다.

0

인프런 AI 인턴

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

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

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

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

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

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

이미지 업로드와 db 트랜잭션 묶는법

0

43

1

Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4

0

53

2

MessageSourceTest 코드

0

47

1

인터셉터 에러 설정

0

48

1

resolveArgument()메서드 질문

0

57

1

43강 검증1 에서 실패 로직 관련 질문있습니다.

0

57

2

타임리프 3.X 버전 rendering, serializer 에러 해결 방법

2

133

3

스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ

0

90

3

pdf 오타 문의

0

57

1

ItemUpdateForm 검증 관련 질문입니다.

0

48

1

22page 링크 주소 변경

0

59

2

특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문

0

53

1

섹션3번 수업에 대한 질문입니다.

0

80

2

@Autowired 보다 더 좋은 방법이 어떤 걸까요?

0

85

2

타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.

0

65

1

자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다

0

142

3

스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문

0

63

1

톰캣 에러 페이지가 안보입니다.

0

103

2

apiEceptionController에서 센드 에러 호출하면 안되는지?

0

81

1

세션 타임아웃시 쿠키 삭제 방법이 없나요?

0

118

2

ApiExceptionController 질문드립니다.

0

64

1

셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?

0

66

1

MemberRepository 필드의 fianl 선언 유무

0

85

2

혹시 index.html 에서는 fragment 사용이 안되는건가요

0

58

1