액터 연속 전달로 구현하는 효율적인 요청 라우팅
초록
본 논문은 스테이지 기반 이벤트‑드리븐 시스템에서 요청 처리 로직을 단계별 로직과 분리하기 위해, 요청 스크립트를 연속된 continuation 형태로 전송하는 “Actor Continuation Passing”(ACP) 방식을 제안한다. Scala Actor 라이브러리 위에 DSL을 구현하고, 실험을 통해 3단계 이상 요청에 대해 기존 코디네이터 스테이지 방식과 동등하거나 더 나은 성능을 보임을 입증한다.
상세 분석
스테이지드 아키텍처는 각 스테이지가 독립적인 스레드와 전용 이벤트 큐를 갖고, 메시지 전달만으로 동작한다는 장점이 있다. 그러나 실제 서비스에서는 요청 흐름이 여러 스테이지에 걸쳐 흩어져 있어, 로직 파악과 유지보수가 어려워진다. 기존 해결책은 코디네이터 스테이지를 두어 요청 로직을 중앙집중식으로 관리하는 것이었지만, 이는 추가 메시지 오버헤드와 컨텍스트 스위치를 초래한다.
본 논문은 continuation을 활용해 요청의 현재 실행 상태를 함수 형태로 캡처하고, 이를 다음 스테이지에 메시지로 전달한다. 이렇게 하면 중간 상태를 별도 이벤트 구조에 담을 필요가 없으며, 스테이지 간에 실제로 전송되는 것은 단일 함수 객체뿐이다. Scala의 for‑comprehension이 내부적으로 CPS 변환을 수행한다는 점을 이용해, goto, compute, remember 등 DSL 명령을 구현한다. goto는 현재 continuation을 캡처하고 목표 스테이지에 전송하며, compute는 로컬 스테이지에서 비동기 연산을 수행하고 결과를 바인딩한다.
핵심 기술은 Responder 추상 클래스를 활용해 각 스테이지가 받은 continuation을 자체 actor에게 send함으로써 실행하도록 하는 것이다. 이 방식은 기존의 중첩 콜백을 피하고, 코드 가독성을 크게 향상시킨다. 또한, 연속적인 단계가 3개 이상일 경우 메시지 수가 절반으로 감소하므로, 실험 결과에서 평균 응답 시간이 크게 개선된다.
제한점으로는 현재 DSL이 선형 흐름에 최적화돼 있어 조건 분기나 루프와 같은 비선형 제어 흐름을 표현하기 어렵고, 스테이지 경계에서 예외 전파가 지원되지 않는다. 향후 작업으로는 비선형 스크립트 지원, 예외 전파 메커니즘, 그리고 동기화 프리미티브 도입이 제시된다.
댓글 및 학술 토론
Loading comments...
의견 남기기