Spring에서 Reactive Stack과 Servlet Stack의 차이점과 장단점은 다음과 같다.
Servlet Stack:
Servlet Stack은 전통적인 방식으로 웹 애플리케이션을 처리하는 기술 스택이다. Servlet 컨테이너를 기반으로 동작하며, 요청마다 쓰레드를 생성하여 처리한다. 각 쓰레드는 독립적으로 요청을 처리하고 응답을 반환한다.
장점:
- 잘 알려진 기술 스택: Servlet은 오랜 기간 동안 사용되어온 기술로, 많은 개발자들이 익숙하다.
- 간편한 개발: Servlet API를 사용하여 간단한 웹 애플리케이션을 구축할 수 있다.
- 기존 라이브러리와의 호환성: 많은 서드파티 라이브러리들이 Servlet 기반으로 개발되어 있으며, 기존에 작성된 코드를 쉽게 통합할 수 있다.
단점:
- 확장성과 성능: 쓰레드 기반 동작으로 인해 많은 요청이 동시에 발생하면 쓰레드 수도 증가하여 성능 저하 및 자원 소모가 발생할 수 있다.
- 블로킹 I/O: Servlet은 I/O 작업을 블로킹 방식으로 처리하므로, 대기 시간이 발생할 수 있다.
- 리소스 관리: 쓰레드 단위로 처리되므로, 쓰레드의 생성 및 관리에 대한 부담이 있을 수 있다.
Reactive Stack:
Reactive Stack은 반응형 프로그래밍 개념에 기반한 기술 스택으로, Non-blocking I/O와 이벤트 기반 아키텍처를 사용하여 웹 애플리케이션을 처리한다. Spring WebFlux 모듈을 사용하여 구현할 수 있다.
장점:
- 확장성과 성능: Non-blocking I/O와 이벤트 기반 아키텍처로 인해 높은 확장성과 성능을 제공한다. 적은 수의 쓰레드로 많은 요청을 처리할 수 있다.
- 비동기 처리: 비동기 방식으로 I/O 작업을 처리하므로, 대기 시간이 최소화되고 자원을 효율적으로 활용할 수 있다.
- 반응형 프로그래밍: Reactive Streams와 같은 반응형 프로그래밍 개념을 활용하여 복잡한 비동기 코드를 더욱 간결하고 유연하게 작성할 수 있다.
단점:
- 학습 곡선: Reactive Stack은 기존의 동기적인 방식과는 다른 개념과 패턴을 사용하므로, 개발자들이 새로운 개념을 익히고 적용하는 데 시간이 걸릴 수 있다.
- 호환성: 모든 라이브러리가 Reactive Stack을 지원하지는 않으며, 기존의 Servlet 기반 라이브러리와의 호환성에 제한이 있을 수 있다.
how to choose?
만약 높은 확장성과 성능, 비동기 처리가 필요하다면 Reactive Stack을 고려할 수 있다.
반면에 기존 코드와의 호환성이 중요하거나 작은 규모의 애플리케이션을 개발한다면 Servlet Stack을 선택할 수 있다.
아래는 각각에 필요한 기술 스택에 대한 정보입니다.
**Spring의 Reactive Stack에 대해 학습하며, 결국 둘 모두 "single thread, async, non-blocking" 를 통한 빠르고 효율적인 작업 처리에 중점을 두었다는 것에서 같은 지향점을 가지고 있다고 생각했다.
그래서 이제 막 사용되는 Spring webflux를 사용할바에는, 이미 해당 방식으로 널리 사용 중인 express 기반의 Node.js를 사용하는 것이 호환성 측면에서 훨씬 좋지 않을까? 라는 생각을 하게 되었다.
그리하여 Spring webflux와 Node.js에 대한 비교 분석 글을 적으며 이에 대해 분석해보겠다.
'MSA, EDA, Reactive 패러다임' 카테고리의 다른 글
Reactive System과 event-driven Architecture (0) | 2023.07.06 |
---|---|
Request-Respone(Rest 통신) VS 비동기 메세지 통신(Pub-Sub) (0) | 2023.07.06 |
reactive programing [이론 정리] (0) | 2023.07.06 |
WebFlux VS Spring MVC (0) | 2023.07.05 |
Spring mvc VS Node.js 비교분석 (0) | 2023.04.20 |