GenEvent

GenEvent (behaviour)

이벤트 매니저와 이벤트 핸들러를 다루는 behaviour 모듈이에요. 이 behaviour는 deprecated(더 이상 사용 권장되지 않음) 상태예요. 대신 Erlang/OTP의 :gen_event 모듈을 사용하세요.

이벤트 매니저를 구현하는 데 관심이 있다면 아래 "대안(Alternatives)" 절을 읽어 보세요. Elixir의 Logger 같은 기존 시스템과 통합하기 위해 이벤트 핸들러를 구현해야 한다면, :gen_event를 사용하세요.

출처: GenEvent

본문

대안 (Alternatives)

GenEvent를 대체할 만한 적합한 선택지가 몇 가지 있어요. 어떤 것이 가장 유리한지는 사용 사례에 따라 달라져요.

감독자와 GenServer (Supervisor and GenServers)

GenEvent의 한 대안은 아주 최소한의 해법으로, 감독자 하나와 그 아래에서 시작되는 여러 GenServer를 조합하는 거예요. 감독자가 "이벤트 매니저" 역할을 하고, 자식 GenServer들이 "이벤트 핸들러" 역할을 해요. 이 방식에는 몇 가지 단점이 있지만(예: back-pressure를 제공하지 못해요) 규모가 작은 GenEvent 사용은 대체할 수 있어요. 이 방식에 대한 더 자세한 정보는 José Valim의 블로그 글에서 확인할 수 있어요.

GenStage

GenEvent를 쓰던 사용 사례가 더 복잡한 로직을 요구한다면, GenStage가 훌륭한 대안이에요. GenStage는 Elixir 팀이 유지 관리하는 외부 Elixir 라이브러리로, 수요 기반(demand-driven)으로 이벤트를 주고받는 시스템을 구현하는 도구를 제공하고 back-pressure를 기본 지원해요. 더 자세한 내용은 GenStage 문서를 참고하세요.

:gen_event

사용 사례가 GenEvent가 제공하던 것과 정확히 같거나, 기존 :gen_event 기반 시스템과 통합해야 한다면, 여전히 Erlang 모듈인 :gen_event를 사용할 수 있어요.