개요

  • 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와 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.servletorg.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)

'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