71DAYS) [Spring WebFlux] Spring WebFlux 개요 - Spring WebFlux

nacSeo (낙서)·2023년 1월 30일
0

◉ 학습목표

1. Spring WebFlux에 대해 알 수 있다.
2. Spring MVC와 비교하여 이해할 수 있다.
3. 리액티브한 샘플 애플리케이션을 구현해보며 이해할 수 있다.
  1. Spring WebFlux

⦿ 학습내용

☞ Spring WebFlux

✔︎ Spring 5부터 지원하는 리액티브 웹 애플리케이션을 위한 웹 프레임워크

☞ Spring WebFlux 🆚 Spring MVC

✅ 기술 스택 비교

✔︎ Spring WebFlux : Non-Blocking 통신 지원
✔︎ Spring MVC : Blocking 통신 사용

✔︎ Spring WebFlux
: Reative Adapter를 사용해 Reactor뿐 아니라 RxJava 등 다른 리액티브 라이브러리 사용 ⭕️ (유연함 제공)
✔︎ Spring MVC : Servlet API의 스펙에 의존적

✔︎ Spring WebFlux : Spring Security ➕ WebFilter 사용
(리액티브 특성에 맞게 인증/권한 등 보안 적용)
✔︎ Spring MVC : Spring Security ➕ 서블릿 필터 방식 사용

✔︎ Spring WebFlux : Reactive Stack 웹 계층에서 사용
✔︎ Spring MVC : Servlet Stack 웹 계층에서 사용

✔︎ Spring WebFlux : 완전한 Non-Blocking 통신을 위해 리액티브 스택을 데이터 액세스 계층까지 확장
R2DBC (Reactive Relation Database Connectivity)

  • 관계형 데이터베이스에 Non-Blocking 통신 적용을 위한 표준 사양(Specification)
  • MySQL, Oracle 등 데이터베이스 벤더에서는 R2DBC 사양에 맞는 드라이버를 구현해 공급

✔︎ Spring MVC : JDBC API의 경우 Non-Blocking 통신 지원 ❌

✅ 밴다이어그램을 통한 비교

✔︎ Spring MVC 방식의 @Controller, @RestController, @ReqeustMapping 등과 같은 애너테이션 동일하게 지원

✅ 샘플 코드를 통한 비교 (실습 완료 😉✔️)
✔︎ Spring MVC 기반의 메인 애플리케이션이 외부 애플리케이션 서버와 통신할 때 요청 처리 스레드가 Blocking 됨❗️

✔︎ 1차로 요청을 수신한 애플리케이션에서 외부 애플리케이션에 요청을 추가적으로 전달할 때 1차로 요청을 수신한 애플리케이션의 요청 처리 스레드가 Blocking 되지 않음❗️

  1. 리액티브한 샘플 애플리케이션 구현

⦿ 학습내용

☞ 구현 간 핵심포인트

✔︎ Spring 리액티브 스택의 경우, H2 웹 콘솔을 정상적으로 지원 ❌
✔︎ Spring Data R2DBC는 Auto DDL 기능을 제공하지 않기 때문에 직접 SQL 스크립트 설정을 추가해야함
✔︎ R2DBC의 Repository를 사용하기 위해서는 Configuration 클래스EnableR2dbcRepositories 애너테이션을 추가해야함
✔︎ Auditing 기능을 사용하기 위해서는 Configuration 클래스@EnableR2dbcAuditing 애너테이션을 추가해야함
✔︎ request body를 Mono 타입으로 전달받을 경우, Blocking 요소가 포함되지 않도록 request body를 전달 받는 순간부터 Non-Blocking으로 동작하도록 Operator 체인을 바로 연결해서 다음 처리 시작 가능
✔︎ Spring WebFlux 기반 클래스는 Mono와 같이 Mono로 래핑한 값을 리턴 🌟
✔︎ Spring WebFlux에서는 모든 데이터가 MonoFlux로 래핑되어 전달 🌟

◉ 느낀 점

☞ 이번 시간에는 앞서 쭉 학습해오던 Spring MVC 기반 커피주문 애플리케이션을 Spring WebFlux로 바꿔보면서 학습을 진행하였다. 기존 1개의 백엔드 서버로 학습하다 외부 백엔드 서버를 추가하여 사용하는 법도 익혀봤고, 복잡한 Spring WebFlux의 Operator를 활용해 Service 클래스와 Controller 클래스를 변경해봤다. 학습 내용들이 알려주는 내용대로 코드를 작성해보며 이해해보려 했는데 아직 완벽히 내 것으로 만들지 못한 기분이다. 현업에는 아직까지 Spring MVC를 통해 개발하는 경우가 잦아 큰 부담감을 가지진 않았지만, 이후 보다 현대적인 기술 트렌드를 경험하기 위해 적극적으로 실습을 진행해보았다. 언젠가 좀 더 공부할 수 있는 기반을 오늘 시간을 통해 마련한 것 같다.

◉ 내일의 키워드

・ Cloud
・ Amazon Web Service
・ 서버 배포
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글