1. 전통적인 REST API Design
- 명령형 코딩 스타일이며, 하향 접근방식으로 진행됨
- 각 단계에서 응답이 오기 까지 Block 되며, 동기적으로 로직이 수행됨
- 이러한 명령형 코딩 스타일로 인해 스레드가 완전히 처리되기 전까지 Blocking 이 일어나고 리소스가 비효율적으로 사용되고 있음
1.1 전통적인 REST API Design 개선
- 호출을 비동기식으로 하며, 기본적으로 Non blocking 여야 합니다.
- 자바에서는 Callback 과 Futures 방식이 있습니다.
1.1.1 Callback
- 기본적으로 복잡하고 좋은 옵션이 아닙니다.
- 콜백은 어떤 값도 반환하지 않지만, 콜백 인스턴스를 매개변수로 사용합니다.
- 콜백 코드는 각 수준에서 예외를 처리하는 특성을 갖고 있으며, 코드를 읽기, 유지보수가 어렵습니다.
1.1.2 Future
- Futrue는 Future 인스턴스를 반환하고, Future 인스턴스를 사용하여 데이터가 사용 가능한지 확인할 수 있습니다.
- 하지만 여러 비동기 작업을 구성하기는 어렵습니다.
1.1.3 Completable Future
- 함수형 스타일을 지원하는 API
- 여러 비동기 작업을 구성하기에 쉬움
- 하지만 응답에 여러항목이 포함되고 오류처리가 포함된 비동기 메서드에는 적합하지 않음. 제대로 작동하려면 많은 파이프라인 코드가 필요
1.2 한계
- 과도하게 로드 되는 경우 어플리케이션은 OOM이 발생할 수 있습니다.
- 클라이언트 측면에서도 과도한 데이터처리로 인해 문제가 될 수 있습니다.
- 또한 전통적인 방식에서는 클라이언트가 DB 측에 백프레셔를 할 수 있는 방법이 없어서 한계상황을 극복할 수 없습니다.
2. 더 나은 디자인을 위해선?
- 비동기 처리와 Non-Blocking 을 이용
- Thread per request model 에서 벗어나 적은 수의 스레드로 요청을 효과적으로 처리하기
- Backpressure 기능 갖추기
'Spring > Webflux' 카테고리의 다른 글
Creating a new sequence (0) | 2024.03.04 |
---|---|
R2DBC (0) | 2024.03.02 |
Reactive Programming (0) | 2024.03.01 |
Context (0) | 2024.03.01 |
Scheduler의 종류 (0) | 2024.02.29 |