본문 바로가기
부트캠프 개발일기/Spring Webflux

71일차: Spring WebFlux

by shyun00 2023. 5. 24.

❯ Spring WebFlux

이름에서 보는것과 같이 Web+Flux로, Reactor 타입인 Flux가 Web 기술에 사용되는 것을 말한다.

Spring 5부터 지원하는 프레임워크이다.

Spring MVC와 Spring WebFlux 비교

Spring WebFlux Spring MVC
* Non-Blocking 지원
* Reactive Adaptor로 다양한 리액티브 라이브러리 사용 가능
* WebFilter 방식
* Reactive 스택을 데이터 액세스 계층까지 확장(R2DBC)
* Blocking 통신방식 지원
* Servlet API 스펙에 의존적
* Servlet Filter 방식
* Spring Data Repository 사용

Spring MVC 애플리케이션에 Spring WebFlux 적용하기

기존에 작성해두었던 Spring MVC 애플리케이션을 일부 수정하여 Spring WebFlux 기반의 애플리케이션으로 바꾸어보는 실습을 했다.

 

1. 의존 라이브러리 설정: WebFlux, R2DBC를 사용할 수 있도록 의존성을 추가하고 WebFlux 기반으로 H2를 사용할 수 있도록 관련

    라이브러리 설정을 수정한다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-webflux'
	implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
    ...
	runtimeOnly 'io.r2dbc:r2dbc-h2'
}

2. 애플리케이션 설정: R2DBC Repository를 사용하기 위해 관련 애너테이션을 애플리케이션 코드에 추가해준다.

@EnableR2dbcRepositories // 추가
@EnableR2dbcAuditing // 추가
@SpringBootApplication
public class SampleApplication {
	public static void main(String[] args) {
		SpringApplication.run(SampleApplication.class, args);
	}
}

3. 컨트롤러 수정: 파라미터, 리턴 객체 들을 Reactor 타입으로 감싸준다.

    -> Mono<>로 객체를 감싸주면 Non-Blocking으로 동작하도록 Operator 체인을 바로 연결해서 사용 가능하다.

4. Entity 수정: R2DBC에서는 애너테이션이나 컬렉션을 사용한 연관관계 매핑은 지원하지 않는다.

    따라서 외래키를 통한 연관관계 매핑을 진행한다. (연관관계 매핑은 데이터베이스 쿼리와 관련된 추가 작업을 필요로 하며, 이는 블로킹 작업일 수 있으므로 논블로킹 작업에 적합한 형태를 유지하기 위해 해당 기능은 지원하지 않는다. R2DBC는 ORM 라이브러리가 아님.)

5. Service 수정: Repository나 R2DBCEntityTemplate를 사용해 데이터베이스에 접근한다.

6. Repository 수정: R2dbcRepository를 상속받은 레포지토리를 정의하여 사용한다.

 

참고자료

https://itvillage.tistory.com/53

http://spring.io/reactive


아직 함수형 프로그래밍 방식과 WebFlux, Reactor에 대한 이해가 부족하다.

내일부터는 이제 클라우드 관련 학습에 들어가는데 그 전에 이때까지 배운 내용을 한번 쭉 복습해보고 들어가야할것같다.