반응자 패턴

반응자 패턴(Reactor pattern)은 동시에 들어오는 서비스 처리 요청을 관리하는 이벤트 처리 패턴이다.

구조 
 Resources : 시스템에 입력을 제공하거나 시스템에서 나온 결과를 소비하는 모든 자원이다.
 Synchronous Event Demultiplexer : 모든 자원을 블록하기 위해 이벤트 루프를 사용한다. 자원에서 블록킹없이 동기화 연산을 시작할 수 있게 됐을 때, 디멀티플렉서(Demultiplexer)가 자원을 디스패처에 보낸다.
 Dispatcher : 요청 핸들러의 등록과 해제를 처리한다. 디멀티플레서에서 연결된 요청 핸들러에 자원을 할당한다.
 Request Handler : 요청 핸들러와 연결된 자원이 정의된 애플리케이션이다.

특징 
모든 리엑터 시스템은 싱글 스레드이다.

장점 
리엑터 패턴은 리엑터 구현에서 애플리케이션에 관련된 코드가 완벽하게 분리된다. 그러므로 애플리케이션 컴포넌트들이 모듈화되고 재사용 가능한 부분들로 분리될 수 있다. 시스템을 멀티스레드로 인한 복잡성에서 보호해 준다.

단점 
디버깅하기 어렵다. 요청 핸들러를 동기적으로 호출하기 때문에 최대 동시성에 제한이 있다. 요청 핸들러 뿐만 아니라 디멀티플렉서에 의해서도 확장성이 제한된다.

적용사례 
 Node.JS
 Ruby EventMachine
 Scala Akka’s IO 모듈

소프트웨어 디자인 패턴