wannaqueen
  • Initial page
  • Spring boot
    • 스프링부트의 소개
      • 8. 스프링 부트 소개 by ks
      • 9. 시스템 요구사항 by ks
      • 10. 스프링 부트 설치 by ks
      • 11. 첫 번째 Spring Boot 애플리케이션 개발하기 by ys
        • 11.1 POM 만들기
        • 11.2 클래스 패스 의존성 추가하기
        • 11.3 코드 작성하기
        • 11.4 예제 실행하기
        • 11.5 실행 가능한 jar 만들기
      • 12. 다음에 읽을 내용 by ys
      • 13. 빌드 시스템 by sh
        • 13.1 의존성 관리
        • 13.2 Maven
        • 13.3 Gradle
        • 13.4 Ant
        • 13.5 Starters
    • 스프링부트의 기능
      • 23. Spring Application by ys
        • 23.1 startup 실패
        • 23.2 배너를 내가 원하는 대로 바꾸기
        • 23.3 SpringApplication 커스터마이징하기
        • 23.4 Fluent Builder API
        • 23.5 어플리케이션 이벤트와 리스너들
        • 23.6 웹 환경
        • 23.7 Application 인자에 접근하기
        • 23.8 ApplicationRunner 또는 CommandLineRunner 사용
        • 23.9 어플리케이션 종료
        • 23.10 관리자 기능
      • 24. 외부화된 구성 by ys
        • 24.1 임의의 값 구성
        • 24.2 명령행 특성 액세스
        • 24.3 응용 프로그램 속성 파일
        • 24.4 프로파일 관련 프라퍼티들
        • 24.5 프라퍼티들에서 플레이스홀더들
        • 24.6 속성의 암호화
        • 24.7 속성대신 yaml 사용하기 - 다시
        • 24.8 Type-safe Configuration Properties
      • 25. 프로파일 by ks
        • 25.1 Active 프로파일 더하기
        • 25.2 프로그램적으로 프로파일 세팅
        • 25.3 프로파일 별 구성파일
      • 26. 로깅 by ks
        • 26.1 로그 형식
        • 26.2 콘솔 출력
        • 26.3 파일 출력
        • 26.4 로거 레벨
        • 26.5 로그 그룹
        • 26.6 사용자 정의 로그 설정
        • 26.7 로그백 확장
      • 27 국제화 by ks
      • 28. SQL 데이터베이스 작업 by sh
      • 29. NoSQL 기술 사용 by sh
      • 30. 메시징 by sh
      • 31. 이메일 전송 by sh
      • 28. JSON by sh (다시 시작!)
        • 28.1 Jackson
        • 28.2 Gson
        • 28.3 JSON-B
      • 29. 웹 응용 프로그램 개발 by sh
        • 29.1 The “Spring Web MVC Framework”
        • 29.2 The “Spring WebFlux Framework”
        • 29.3 JAX-RS and Jersey
        • 29.4 내장된 서블릿 컨테이너 지원
        • 29.5 내장된 반응형 서버 지원
        • 29.6 반응형 서버 리소스 구성
      • 30. Security by ys
        • 30.1 MVC 보안
        • 30.2 WebFlux 보안
        • 30.3 OAuth2
        • 30.4 Actuator 보안
      • 31. SQL 데이터베이스 작업 by ys
        • 31.1 Configure a DataSource
        • 31.2 JdbcTemplate 사용
        • 31.3 JPA와 스프링 데이터 JPA
        • 31.4 스프링 데이터 JDBC
        • 31.5 H2의 웹 콘솔 사용
        • 31.6 jOOQ 사용하기
      • 32. NoSQL 기술로 작업하기 by ks
      • 33 Caching by ks
      • 34. 메시징
        • 34.1 JMS by sh
        • 34.2 AMQP by sh
        • 34.3 Apache Kafka Support by ys
      • 35.REST 서비스 호출 RestTemplate
        • 35.1 RestTemplate 사용자 정의
      • 36. REST 서비스 호출 WebClient by ys
      • 37. 유효성 확인 by ys
      • 38. 이메일 보내기 by ys
      • 39. JTA를 이용한 분산 트랜잭션 by ys
      • 40.하젤캐스트(Hazelcast) by ys
      • 41. Quartz Scheduler by ys
      • 42. 작업 실행 및 스케줄링 by ys
      • 43. 스프링 통합 by ys
      • 44. Spring 세션 by ys
      • 45. JMX를 통한 모니터링 및 관리 by ys
      • 46. Testing by sh
        • 46.3 Testing Spring Boot Applications
          • 46.1~46.3.10
          • 46.3.11 자동 구성된 Spring WebFlux 테스트
          • 46.3.12 자동 구성된 Data JPA 테스트들
          • 46.3.13 자동 구성된 JDBC 테스트들
          • 46.3.14 자동 구성된 Data JDBC 테스트들
          • 46.3.15 자동 구성된 JOOQ 테스트들
          • 46.3.16 자동 구성된 Data MongoDB 테스트들
          • 46.3.17 자동 구성된 Data Neo4j 테스트
          • 46.3.18 자동 구성된 Data Redis 테스트들
          • 46.3.19 자동 구성된 Data LDAP 테스트들
          • 46.3.20 자동 구성된 REST 클라이언트
          • 46.3.21자동 구성된 Spring REST Docs 테스트
          • 46.3.22 추가적인 자동 구성 및 슬라이스
          • 46.3.23 사용자 구성 및 분할
          • 46.3.24 Spock을 사용하여 스프링 부팅 응용 프로그램 테스트
      • 47. 웹 소켓 by sh
      • 48. 웹 서비스 by sh
        • 48.1WebServiceTemplate로 웹 서비스 호출하기
      • 49. 자신만의 자동 구성 생성
        • 49.1 자동 구성된 빈 이해하기 by sh
        • 49.2 자동 구성 후보 찾기 by sh
        • 49.3 Condition 어노테이션들 by sh
        • 49.4 자동구성 테스팅 by ks
        • 49.5 자신만의 스타터 생성하기 by ks
      • 50. Kotlin support by ys
      • 51. What to Read Next by ys
      • 52. Production-ready 기능 활성화 by ys
      • 53. Endpoints
        • 53.1 엔드 포인트 활성화 by ys
        • 53.2 엔드 포인트 노출 by ys
        • 53.3 HTTP endpoints 보안 by ys
        • 53.4 Endpoints 구성
        • 53.5 액츄에이터 웹 엔드 포인트 용 하이퍼 미디어 by ys
        • 53.6 CORS 지원 by ys
        • 53.7 커스텀 엔드포인트 확장 by ks
        • 53.8 Health 정보 by ks
        • 53.9 어플리케이션 정보 by sh
      • 54. HTTP를 통한 모니터링 및 관리 by sh
        • 54.1 관리 엔드 포인트 경로 사용자 정의
        • 54.2 관리 서버 포트 사용자 정의
        • 54.3 관리 관련 SSL 구성
        • 54.4 관리 서버 주소 사용자 정의
        • 54.5 HTTP 끝점 사용안하기
  • spring 5.0
    • 1. IoC 컨테이너
      • 1.1 스프링 IoC 컨테이너와 빈의 도입 by sh
      • 1.2 컨테이너 by ys
      • 1.3 빈 개요 by ks
      • 1.4 의존성 by ks, ys, sh
        • 1.4.1 의존성 주입 by ks
        • 1.4.2 의존성과 configuration by ks
        • 1.4.3 depends-on 사용 by ys
        • 1.4.4 게으른-초기화된 bean by ys
        • 1.4.5 Autowiring Collaborators by ys
        • 1.4.6 메소드 주입 by sh
      • 1.5. 빈의 범위 by sh
      • 1.6 빈의 특성 커스터마이징하기 by ys
        • 1.6.1 라이프 사이클 콜백
        • 1.6.2 ApplicationContextAware과BeanNameAware
        • 1.6.3 기타 Aware인터페이스
      • 1.7 빈 정의 상속by ys
        • 1.7.1 빈 정의 상속
      • 1.8 컨테이너 확장 포인트 by ks
      • 1.9 어노테이션 기반의 컨테이너 구성 by sh
      • 1.10 클래스패스 스캔 및 관리 by ys
        • 1.10.1 @Component 및 추가 스테레오 타입 어노테이션
        • 1.10.2 meta-annotation 및 composed annotation 사용
        • 1.10.3 자동으로 클래스 검색 및 Bean 정의 등록
        • 1.10.4 스캐닝을 커스터마이징 하기위해 필터를 사용
        • 1.10.5 component 내에 Bean 메타 데이터 정의
        • 1.10.6 이름으로 자동탐지되는 컴포넌트
        • 1.10.7 범위로 자동 감지되는 컴포넌트
        • 1.10.8 annotation과 함께 한정된 메타데이터 제공
        • 1.10.9 후보 component의 index 생성
      • 1.11 JSR 330 표준 어노테이션 사용하기 by sh
      • 1.12 자바 기반의 컨테이너 구성 by sh, ks
        • 1.12.1 기본 개념: @Bean 및 @Configuration by sh
        • 1.12.2 AnnotationConfigApplicationContext를 사용한 스프링 컨테이너 인스턴스화 by sh
        • 1.12.3 @Bean 사용 by ks
        • 1.12.4 @Configuration 어노테이션 by ks
        • 1.12.5 자바 기반 Configuration구성 by ks
      • 1.13 환경 추상화 by ys
        • 1.13.1 빈 정의 프로파일
        • 1.13.2 PropertySource추출
        • 1.13.3 @PropertySource 사용
        • 1.13.4 Placeholder Resolution in Statements
      • 1.14 LoadTimeWeaver 등록 by ks
      • 1.15 ApplicationContext의 부가 수용가능성들 by ks, sh
        • 1.15.1 MesageSource를 사용한 국제화 by ks
        • 1.15.2 표준과 커스텀 이벤트 by ks
        • 1.15.3 로우 레벨 리소스에 대한 편리한 접근 by sh
        • 1.15.4 웹 어플리케이션에 대한 간편한 Application 인스턴스화 by sh
        • 1.15.5 스프링 ApplicationContext를 Java EE RAR 파일로 배포하가ㅣ by sh
        • 1.15.3 Low-level 리소스로 편리한 접근
        • 1.15.4 웹 어플리케이션을 위한 편리한 ApplicationContext 인스턴스화
      • 1.16 BeanFactory by sh
    • 2. Resource by ks
      • 2.1 소개
      • 2.2 Resource interface
      • 2.3 내장 리소스 확장
      • 2.4 ResourceReader
      • 2.5 ResourceLoaderAware 인터페이스
      • 2.6 Resources 의존성
      • 2.7 어플리케이션 컨텍스트와 리소스 경로
    • 3. 유효성 검사, 데이터 바인딩 및 유형 변환 by ys, sh
      • 3.1. Spring의 Validator 인터페이스를 사용하여 유효성 검사 by ys
      • 3.2. 오류 메시지로 코드 해결 by ys
      • 3.3. bean 조작과 BeanWrapper by ys
        • 3.3.1. 기본 및 중첩 된 프로퍼티를 설정 및 가져 오기
        • 3.3.2. 내장 된 PropertyEditor구현
      • 3.4 스프링 타입 변환 by sh
        • 3.4.1 Converter SPI
        • 3.4.2 ConverterFactory 사용하기
        • 3.4.3 GenericConverter 사용하기
        • 3.4.4 ConversionService API
        • 3.4.5 ConversionService 구성
        • 3.4.6 프로그래밍 방식으로 ConversionService 사용하기
      • 3.5 스프링 필드 포맷팅 by sh
        • 3.5.1 Formatter SPI
        • 3.5.2 Annotation 기반의 포맷팅
        • 3.5.3 FormatterRegistry SPI
        • 3.5.4 FormatterRegistrar SPI
        • 3.5.5 스프링 MVC에서 포맷팅 구성하기
      • 3.6 전역 Date and Time 포맷 구성 by sh
      • 3.7 스프링 유효성 검사 by sh
        • 3.7.1 by sh
        • 3.7.2 by sh
        • 3.7.3 by sh
    • 4 스프링 표현식 언어 (SpEL)
      • 4.1 평가 by sh
      • 4.2 빈 정의에 있는 표현식 by sh
      • 4.3 Language Reference
        • 4.3.1 리터럴 표현식 by ys
        • 4.3.2 프로퍼티,배열,목록,지도 및 인덱서 by ys
        • 4.3.3 인라인 목록 by ys
        • 4.3.4 인라인 Maps by ys
        • 4.3.5 배열 구성 by ys
        • 4.3.6 행동 양식 by ys
        • 4.3.7 연산자 by ys
        • 4.3.8 유형 by ys
        • 4.3.9 생성자 by ys
        • 4.3.10 변수 by ks
        • 4.3.11 함수 by ks
        • 4.3.12 빈 참조 by ks
        • 4.3.13 삼항 연산자 (If-Then-Else) by ks
        • 4.3.14 엘비스 연산자 by ks
        • 4.3.15 안전한 네비게이션 연산자 by ks
        • 4.3.16 컬렉션 셀렉션 by ks
        • 4.3.17 컬렉션 프로젝션 by ks
        • 4.3.18 표현 템플릿 by ks
    • 5 spring을 이용한 aspect 지향 프로그래밍
      • 5.1 AOP 개념 by ys
      • 5.2 Spring AOP 기능 및 목표 by ys
      • 5.3 AOP 프록시 by ys
      • 5.4 @AspectJ 지원 by ys,ks
        • 5.4.1 @AspectJ 지원 활성화 by ys
        • 5.4.2 Aspect 선언하기 by ys
        • 5.4.3 Pointcut 선언하기 by ys
        • 5.4.4 Advice 선언 by ks
        • 5.4.5 소개 by ks
        • 5.4.6 Aspect 초기화 모델 by ks
        • 5.4.7 AOP 예제 by ks
      • 5.5 스키마 기반 AOP 지원 by sh
        • 5.5.1 Aspect 선언 by sh
        • 5.5.2 Pointcut 선언 by sh
        • 5.5.3 Advice 선언 by sh
        • 5.5.4 인트로덕션 by sh
        • 5.5.5 Aspect 인스턴스화 모델 by sh
        • 5.5.6 Advisors by sh
        • 5.5.7 AOP 스키마 예제 by sh
    • 6 Spring AOP API
      • 6.1 Spring의 Pointcut API
        • 6.1.1 개념들 by ys
        • 6.1.2 Pointcuts에 대한 작업 by ys
        • 6.1.3 AspectJ Expression Pointcuts by ys
        • 6.1.4 편리한 Pointcut 구현 by ys
        • 6.1.5 포인트 컷 수퍼 클래스 by ys
        • 6.1.6. 사용자 정의 Pointcut by ys
      • 6.2 Spring의 Advice API
        • 6.2.1. 조언 라이프 사이클 by ys
        • 6.2.2 Spring의 advice 유형 by ys
      • 6.3 Spring의 Advisor API by ks
      • 6.4 ProxyFactoryBean을 사용해서 AOP 프록시 생성 by ks
        • 6.4.1 기본
        • 6.4.2 자바빈 프로퍼티
        • 6.4.3 JDK 및 CGLIB 기반 프록시
        • 6.4.4 프록시 인터페이스
        • 6.4 5 프록시 클래스
        • 6.4.6 "Global" advisor 사용
      • 6.5 간결한 프록시 정의 by sh
      • 6.6 ProxyFactory를 사용하여 프로그래밍 방식으로 AOP 프록시 만들기 by sh
      • 6.7 Advised 객체들 조작하기 by sh
      • 6.8 "자동 프록시" 기능 사용 by sh
      • 6.9 TargetSource구현체 사용하기 by sh
      • 6.10 새로운 Advice 타입 정의하기 by sh
    • 7. 데이터 버퍼와 코덱 by ks
Powered by GitBook
On this page

Was this helpful?

  1. Spring boot
  2. 스프링부트의 기능
  3. 29. 웹 응용 프로그램 개발 by sh

29.2 The “Spring WebFlux Framework”

Previous29.1 The “Spring Web MVC Framework”Next29.3 JAX-RS and Jersey

Last updated 5 years ago

Was this helpful?

Spring WebFlux는 Spring Framework 5.0에서 소개된 새로운 사후 대응 웹 프레임 워크입니다. Spring MVC와 달리 서블릿 API를 필요로하지 않으며, 완전히 비동기적이고 비 블로킹이며, 를 통해 사양을 구현합니다.

스프링 5부터 spring-wewbflux 등장.

spring-webflux 와 spring-mvc 중 어느 것을 사용 할 지 결정하려면?

  • non-blocking I/O가 어떻게 동작하며, 어떠한 효과를볼 수 있는 지 배워야한다

프레임워크를 고르는 기준 중 하나!

  • 의존성을 확인하는 것

    • 블로킹 방식의 persistence API(JPA, JDBC)나 network API를 사용한다면 spring-mvc가 적합

    • Spring MVC 어플리케이션에 원격 서비스를 호출하는 일이 있다면, Reactive WebClient를 사용하는 것을 권장한다. 스프링 MVC 컨트롤러 메서드에서 Reactive 타입(Reactor, RxJava 등)을 직접 반환 가능. 호출 당 지연이 길수록, 호출 간 상호 의존이 클수록, 더 큰 이득을 볼 수 있음

Spring WebFlux에는 기능적인 & 어노테이션 기반의 두 가지가 있습니다.

Spring-web 모듈은 스프링 웹플럭스의 기초가 되는 리액티브 기반을 포함한다.

스프링 웹 플럭스에서 제공하는 프로그래밍 모델?

1) 웹 플럭스 컨트롤러 (어노테이션 기반)

스프링 MVC와 일치(spring-web 모듈과 동일한 어노테이션 기반 컨트롤러)

스프링 MVC와 WebFlux 컨트롤러는 반환 타입으로 리액티브(Reactor, RX java)를 지원

스프링 MVC와 WebFlux 구별 어려움

2) 웹 플럿프 fn

가볍고, Java 8의 람다 기반의 함수형 프로그래밍 모델.

라우팅과 Request 처리를 할 수 있는 작은 라이브러리 또는 유틸리티의 셋.

어노테이션 기반은 다음 예제와 같이 Spring MVC 모델에 매우 가깝습니다.

Mono는 0-1개의 결과만을 처리하기 위한 Reactor의 객체이고, Flux는 0-N개인 여러 개의 결과를 처리하는 객체임.

@RestController
@RequestMapping("/users")
public class MyRestController {

	@GetMapping("/{user}")
	public Mono<User> getUser(@PathVariable Long user) {
		// ...
	}

	@GetMapping("/{user}/customers")
	public Flux<Customer> getUserCustomers(@PathVariable Long user) {
		// ...
	}

	@DeleteMapping("/{user}")
	public Mono<User> deleteUser(@PathVariable Long user) {
		// ...
	}

}

기능 변형인 "WebFlux.fn"은 다음 예와 같이 라우팅 구성을 실제 요청 처리와 분리합니다.

@Configuration
public class RoutingConfiguration {

	@Bean
	public RouterFunction<ServerResponse> monoRouterFunction(UserHandler userHandler) {
		return route(GET("/{user}").and(accept(APPLICATION_JSON)), userHandler::getUser)
				.andRoute(GET("/{user}/customers").and(accept(APPLICATION_JSON)), userHandler::getUserCustomers)
				.andRoute(DELETE("/{user}").and(accept(APPLICATION_JSON)), userHandler::deleteUser);
	}

}

@Component
public class UserHandler {

	public Mono<ServerResponse> getUser(ServerRequest request) {
		// ...
	}

	public Mono<ServerResponse> getUserCustomers(ServerRequest request) {
		// ...
	}

	public Mono<ServerResponse> deleteUser(ServerRequest request) {
		// ...
	}
}

라우터 정의를 모듈화 할 때 원하는 만큼의 RouterFunctionBean을 정의 할 수 있습니다. 우선 순위를 적용해야 할 경우 bean에 순서를 매길 수 있습니다.

시작하려면 응용 프로그램에 spring-boot-starter-webflux 모듈을 추가하십시오.

응용 프로그램에서 spring-boot-starter-web과 spring-boot-starter-webflux 모듈을 모두 추가하면 SpringBoot은 WebFlux가 아닌 Spring MVC를 자동 구성합니다. 이 동작은 많은 Spring 개발자가 반응적인 WebClient를 사용하기 위해 Spring-MVC 애플리케이션에 spring-boot-starter-webflux를 추가하기 때문에 선택되었습니다. 선택한 응용 프로그램 유형을 SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE)으로 설정하여 선택 사항을 적용 할 수 있습니다.

29.2.1 Spring WebFlux 자동 구성

Spring Boot는 대부분의 응용 프로그램에서 잘 작동하는 Spring WebFlux의 자동 구성 기능을 제공합니다.

자동 설정은 Spring의 기본값 위에 다음과 같은 기능을 추가합니다.

  • HttpMessageReader및 HttpMessageWriter인스턴스 용 코덱 구성 (이 문서의 뒷부분에서 설명 함)

  • WebJars에 대한 지원을 포함하여 정적 리소스 제공 지원 (이 문서의 뒷부분에서 설명)

Spring WebFlux를 완벽하게 제어하려면 @EnableWebFlux로 주석이 달린 @Configuration을 추가하면됩니다.

29.2.2 HTTP Codecs with HttpMessageReaders and HttpMessageWriters

Spring WebFlux는 HTTP 요청과 응답을 변환하기 위해 HttpMessageReader와 HttpMessageWriter 인터페이스를 사용한다. 클래스 경로에서 사용할 수 있는 라이브러리를 보고 합리적인 기본값을 갖도록 CodecConfigurer로 구성됩니다.

Spring Boot는 CodecCustomizer인스턴스를 사용하여 추가 사용자 정의를 적용합니다. 예를 들어, spring.jackson.*구성 키는 Jackson 코덱에 적용됩니다.

코덱을 추가하거나 사용자 정의해야하는 경우 다음 예제와 같이 사용자 정의 CodecCustomizer구성 요소를 만들 수 있습니다.

import org.springframework.boot.web.codec.CodecCustomizer;

@Configuration
public class MyConfiguration {

	@Bean
	public CodecCustomizer myCodecCustomizer() {
		return codecConfigurer -> {
			// ...
		}
	}

}

29.2.3 정적 콘텐츠

기본적으로 스프링 부트는 classpath에있는 /static (또는 /public 또는/resources또는 /META-INF/resources) 디렉토리의 정적 컨텐츠를 제공합니다. Spring WebFlux의 ResourceWebHandler를 사용하므로 WebFluxConfigurer를 추가하고 addResourceHandlers메소드를 재정 의하여 해당 동작을 수정할 수 있습니다.

기본적으로 리소스는 /**에 매핑되지만 spring.webflux.static-path-pattern 속성을 설정하여 조정할 수 있습니다. 예를 들어, 모든 리소스를 /resources/** 로 재배치하는 것은 다음과 같이 수행 할 수 있습니다.

spring.webflux.static-path-pattern=/resources/**

spring.resources.static-locations를 사용하여 정적 자원 위치를 사용자 정의 할 수도 있습니다. 이렇게하면 기본값이 디렉토리 위치 목록으로 바뀝니다. 이렇게하면 기본 시작 페이지 검색이 사용자 지정 위치로 전환됩니다. 따라서 시작시 임의의 위치에 index.html이 있으면 응용 프로그램의 홈 페이지입니다.

Spring WebFlux 응용 프로그램은 Servlet API에 엄격하게 의존하지 않으므로 war 파일로 배포 할 수 없으며 src/main/webappdirectory를 사용하지 않습니다.

29.2.4 템플릿 엔진

REST 웹 서비스뿐만 아니라 Spring WebFlux를 사용하여 동적 HTML 컨텐트를 제공 할 수도 있습니다. Spring WebFlux는 Thymeleaf, FreeMarker 및 Mustache를 포함한 다양한 템플릿 기술을 지원합니다.

Spring Boot는 다음 템플릿 엔진에 대한 자동 구성 지원을 포함합니다.

이 템플릿 엔진 중 하나를 기본 구성으로 사용하면 템플릿이 src/main/resources/templates에서 자동으로 선택됩니다.

29.2.5 Error Handling

이 기능을 사용자 지정하는 첫 번째 단계는 기존 메커니즘을 사용하지만 오류 내용을 대체하거나 보완하는 것입니다. 이를 위해ErrorAttributes 타입의 빈을 추가 할 수 있습니다.

오류 처리 동작을 변경하려면 ErrorWebExceptionHandler를 구현하고 해당 유형의 Bean 정의를 등록 할 수 있습니다. WebExceptionHandler는 꽤 낮은 수준이기 때문에 Spring Boot는 다음 예제와 같이 WebFlux 기능적 방식으로 오류를 처리 할 수있는 편리한 AbstractErrorWebExceptionHandler도 제공합니다.

public class CustomErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {

	// Define constructor here

	@Override
	protected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {

		return RouterFunctions
				.route(aPredicate, aHandler)
				.andRoute(anotherPredicate, anotherHandler);
	}

}

보다 완벽한 그림을 보기 위해 DefaultErrorWebExceptionHandler를 직접 서브 클래스 화하고 특정 메소드를 대체 할 수 있습니다.

사용자 정의 에러 페이지

주어진 상태 코드에 대한 사용자 정의 HTML 오류 페이지를 표시하려면 /error폴더에 파일을 추가하십시오. 오류 페이지는 정적 HTML (정적 리소스 폴더 아래에 추가됨)이거나 템플릿으로 빌드 될 수 있습니다. 파일의 이름은 정확한 상태 코드 또는 시리즈 마스크 여야합니다.

예를 들어 404를 정적 HTML 파일에 매핑하려면 폴더 구조가 다음과 같습니다.

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- public/
             +- error/
             |   +- 404.html
             +- <other public assets>

Mustache 템플릿을 사용하여 5xx오류를 모두 매핑하려면 폴더 구조가 다음과 같습니다.

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- templates/
             +- error/
             |   +- 5xx.mustache
             +- <other templates>

29.2.6 Web Filters

Spring WebFlux는 HTTP 요청 - 응답 교환을 필터링하기 위해 구현할 수있는 WebFilter인터페이스를 제공합니다. 응용 프로그램 컨텍스트에서 발견 된 WebFilterbean은 자동으로 각 교환을 필터링하는 데 사용됩니다.

Ex.

필터의 순서가 중요 할 경우 Ordered를 구현하거나 @Order로 주석을 달 수 있습니다. 스프링 부트 자동 구성은 웹 필터를 구성 할 수 있습니다. 그렇게하면 다음 표에 표시된 Order가 사용됩니다.

Web Filter

Order

MetricsWebFilter

Ordered.HIGHEST_PRECEDENCE + 1

WebFilterChainProxy (Spring Security)

-100

HttpTraceWebFilter

Ordered.LOWEST_PRECEDENCE - 10

WebFlux는 Spring Framework의 일부이며 자세한 정보는 에서 확인할 수 있습니다.

Spring Boot WebFlux 기능을 유지하면서 을 추가하려는 경우 @EnableWebFlux가 아닌 WebFluxConfigurer형식의 @Configuration 클래스를 추가 할 수 있습니다.

를 활용할 수도 있습니다.

앞에서 설명한 "표준"정적 리소스 위치 외에도 에 특별한 경우가 있습니다. /webjars/**에 경로가있는 자원은 Webjars 형식으로 패키지 된 경우 jar 파일에서 제공됩니다.

스프링 부트 (Spring Boot)는 합리적인 방법으로 모든 오류를 처리하는 WebExceptionHandler를 제공합니다. 처리 순서에서의 위치는 WebFlux가 제공한 핸들러 바로 직전이며 마지막으로 간주됩니다. 시스템 클라이언트의 경우, 오류, HTTP 상태 및 예외 메시지와 함께 JSON 응답을 생성합니다. 브라우저 클라이언트의 경우 동일한 데이터를 HTML 형식으로 렌더링하는 "whitelabel" 오류 핸들러가 있습니다. 오류를 표시하기 위해 자체 HTML 템플리트를 제공 할 수도 있습니다 ( 참조).

the Reactor project
Reactive Streams
reference documentation
WebFlux configuration
Boot’s custom JSON serializers and deserializers
Webjars content
FreeMarker
Thymeleaf
Mustache
next section
[Note]
[Tip]
[Tip]