Proactor Pattern 지난 포스팅에서 Selector와 Reactor 패턴에 대해 다뤘습니다.또한, Reactor 패턴을 활용하여 I/O Multiplexing이 가능한 EventLoop를 구현해 보았습니다. 하지만 Reactor 패턴에는 몇 가지 한계점이 존재합니다. 이번 글에서는 이러한 한계점과 그것을 극복한 Proactor 패턴에 대해 살펴보겠습니다. Reactor vs Proactor Reactor 패턴은 단일 쓰레드로 동기적으로 이벤트가 발생할 때마다 Selector가 이를 처리해야 합니다. 이로 인해, 트래픽이 과도하거나 이벤트 처리에 시간이 오래 걸리는 경우, 전체 시스템에 영향을 줄 수 있는 문제가 발생할 수 있습니다. 반면에, Proactor 패턴은 비동기적으로 I/O 작업을..
I/O Multiplexing 이란? I/O Multiplexing이라는 기술은 여러 개의 입출력 작업을 동시에 처리하는 기법을 의미합니다. 일반적으로 하나의 프로세스(혹은 싱글 스레드)가 여러 개의 I/O 요청을 처리해야 할 때 사용됩니다. 대표적인 예로는 Netty와 Redis와 같은 고성능 네트워크 애플리케이션이 있습니다. 그렇다면 Java에서는 I/O Multiplexing을 어떻게 구현할 수 있을까요? Java에서는 I/O Multiplexing을 구현하기 위한 핵심 컴포넌트로 Java NIO의 Selector를 사용합니다. 또한 운영체제에 따라 Selector의 여러 가지 구현체를 제공합니다. 이 Selector를 사용하면 Java에서도 I/O Multiplexing이 가능한 EventLoop..
자바에서의 비동기 처리 저번 글에서 동기 / 비동기, 블로킹 / 논블로킹에 대해 알아보았는데, 이번 글에서는 Java에서 비동기 작업을 처리하기 위한 강력한 클래스인 CompletableFutue에 대해 알아보겠습니다.CompletableFuture는 java.util.concurrent 패키지에 포함되어 있으며, Future 인터페이스와 CompletionStage 인터페이스를 구현하고 있는 클래스로 Java 8에서 추가된 기능입니다. 이로 인해 Lambda, Method reference 등 다양한 기능을 지원합니다. 이 글에서는 기존의 비동기 처리를 위해 사용하던 Future 인터페이스가 가지는 한계와 CompletableFuture가 그것을 어떻게 해결했는지, 그리고 CompletableFutur..
동기와 블로킹은 다른건가요? 동기(Synchronous)와 블로킹(Blocking)은 개발을 하다 보면 흔히 접할 수 있는 개념들입니다.하지만 예전에는 이런 개념들을 막연히 알고 있었고, 그 차이점도 명확하게 이해하지 못했습니다.특히, '동기'와 '블로킹'이라는 개념을 혼동하며, 아래와 같이 생각했던 적도 있었습니다.동기(Synchronous)면 블로킹(Blocking) 아닌가? 동기/비동기, 블로킹/논블로킹은 애플리케이션의 성능과 효율성에 직결되기 때문에, 올바르게 이해하고 활용하기 위해서2가지 관점에서 자세히 살펴보겠습니다. 동기, 비동기란? 우선 동기,비동기, 블로킹, 논블로킹을 설명할 때 사용되는 단어들의 의미와동기, 비동기란 무엇인지 간단하게 확인하고 넘어가겠습니다. Caller : 작업을 ..