Changsoon's Note Backend Developer

Non-Blocking 코드 만들기

모던 자바 인 액션을 공부하면서 만난 예제 코드를 연습겸 정리해보자.

모든 상점의 정보를 순차적으로 요청하는 메서드를 성능을 고려하여 개선하며 구현해보았다.

예시로 상점 리스트를 먼저 만들어보자.

단순 스트림

병렬 스트림

CompletableFuture로 비동기 호출

CompletableFuture를 이용하여 구현

비동기 처리를 했는데 만족할만한 결과가 아니다.

만약에 상점이 4개에서 5개로 늘어난다면 병렬 스트림보다 CompletableFuture가 아주 조금 빠르다.

CompletableFuture는 병렬 스트림으로 구현한 버전에 비해 작업에 이용할 수 있는 다양한 커스텀 Executor를 지정할 수 있다는 장점이 있다.

커스텀 Executor를 이용한 CompletableFuture

다섯 개의 상점을 검색할 때는 1022ms, 아홉 개의 상점을 검색할 때는 1022ms가 소요된다.

400개의 상점까지 이 같은 성능을 유지할 수 있다.

결국 애플리케이션 특성에 맞는 Executor를 만들어 CompletabelFuture를 활용하는 것이 바람직하다.

비동기 동작을 많이 사용하는 상황에서는 이 기법이 제일 효과적이다.