개요
- Spring MVC와 WebFlux는 각각 다른 방식으로 요청을 처리하기 때문에 예외 클래스에서도 차이점이 존재한다.
기본적인 차이
- MVC는
spring-boot-starter-web
라이브러리를 사용하고 WebFlux는spring-boot-starter-webflux
를 사용하여 서로 다른 동작 방식을 갖는다.- MVC
- Servlet 기반 동기 방식으로 동작
org.springframework.web.servlet
패키지의 예외 클래스 사용 가능
- WebFlux
- Reactive Streams 기반 비동기 방식으로 동작
org.springframework.web.reactive
패키지의 예외 클래스 사용
- MVC
-> 이러한 차이로 인해, 예외 클래스에 차이가 발생하게 된다
공통으로 사용되는 예외
MVC와 WebFlux는
spring-web
모듈을 기반으로 동작하기 때문에org.springframework.web
패키지에 존재하는 일부 예외 클래스는 WebFlux에서도 공통으로 사용 가능하다.org.springframework.web
- Spring MVC와 WebFlux에서 공통적으로 사용되는 웹 관련 기능 제공
- ServletException를 상속받는 클래스는 Webflux에서 사용 불가
대표적인 예외 클래스
- ResponseStatusException: HTTP 응답 상태 코드와 메시지를 설정할 수 있는 공통 예외
- HttpMediaTypeNotSupportedException: 지원되지 않는 Content-Type이 들어왔을 때 발생
- HttpMediaTypeNotAcceptableException: 클라이언트의 Accept 헤더와 일치하는 응답을 제공할 수 없을 때 발생
MVC에서 사용되는 예외
- Spring MVC는 Servlet 기반이므로
jakarta.servlet
및org.springframework.web.servlet
패키지에서 제공하는 예외를 사용한다.- 주요 패키지
- jakarta.servlet.*
- org.springframework.web.servlet.*
- 대표적인 예외 클래스
- ServletException: Servlet 관련 예외의 최상위 클래스
- HttpRequestMethodNotSupportedException: 지원하지 않는 HTTP 메소드 요청 시 발생
- HttpMessageNotReadableException: 요청 본문을 읽을 수 없을 때 발생 (ex. JSON 파싱 오류)
- HandlerNotFoundException: 존재하지 않는 엔드포인트 요청 시 발생
- MissingServletRequestParameterException: 필수 요청 파라미터가 누락되었을 때 발생
- MethodArgumentNotValidException: Bean Validation (@Valid)
- 주요 패키지
WebFlux에서 사용되는 예외
- Spring WebFlux는 Reactive Streams 기반으로 동작하므로 Servlet을 사용하지 않고
org.springframework.web.reactive
패키지에서 제공하는 예외를 사용한다.- 주요 패키지
- org.springframework.web.reactive.*
- 대표적인 예외 클래스
- MethodNotAllowedException: 지원하지 않는 HTTP 메소드 요청 시 발생
- MVC의 HttpRequestMethodNotSupportedException
- ServerWebInputException: 요청 본문을 읽을 수 없을 때 발생 (ex. JSON 파싱 오류)
- MVC의 HttpMessageNotReadableException
- NoResourceFoundException: 존재하지 않는 엔드포인트 요청 시 발생
- WebExchangeBindException: Bean Validation (@Valid)
- MethodNotAllowedException: 지원하지 않는 HTTP 메소드 요청 시 발생
- 주요 패키지
'Spring WebFlux' 카테고리의 다른 글
[Spring WebFlux] Spring WebFlux (0) | 2025.02.27 |
---|---|
[Spring WebFlux] WebClient (0) | 2025.02.26 |
[Spring WebFlux] Reactive Streams (0) | 2025.02.26 |