개요
적은 리소스로도 대량의 I/O 요청을 처리할 수 있는 방법이 뭐가 있을까?
- Spring Webflux를 통해 이런 문제를 어느정도 해결할 수 있다.
- Reactor라는 라이브러리를 통해서 적은 리소스로도 대량의 I/O 요청을 처리할 수 있는 구조를 제공하고 있다.
- Reactor는 React라는 표준에 대한 구현체로써, non-blocking 애플리케이션을 만들 수 있게 도와주는 라이브러리이다.
- Netty 기반으로 네트워크 비동기 I/O를 처리한 이후에, 이벤트 루프 기반을 활용해서 작업들을 빠르게 처리할 수 있다.
- 이벤트 루프를 위해서 적절한 규모의 쓰레드도 사용하게 되는데, CPU 코어 개수가 너무 적지 않다면 일반적으로 CPU 코어 수만큼 쓰레드를 만들고 활용하게 된다.
- 요청 개수에 맞춰 쓰레드를 생성해둬야하는 Spring MVC와 대조적
- 마이크로 서비스와 같이 많은 요청이 처리되는 앞단의 게이트웨이에서 활용이 많이 된다.
아이돌 티켓팅은 짧은 시간에 많은 트래픽이 몰린다는 점!! 짧은 시간에 많은 트래픽을 처리하기 위해서는 인입된 클라이언트들에 대해서 순차적으로 이벤트 페이지로 진입시켜주는 흐름을 가진다.
개발 환경 준비
idol을 루트 프로젝트로 해서 내부에 flow, web 모듈을 추가한다.
- flow: 동시에 처리할 수 있는 요청 수를 제한하고, 초과된 요청은 대기열에 저장한 후 순차적으로 처리할 수 있도록 하는 기능 구현
- web: 사용자가 실제로 접근하려고하는 타겟 페이지 구현
반응형