본문 바로가기

소프트웨어-이야기/아키텍처

아고다 사례로 살펴본 예약 엔진: Dynamic Graph, Risk Profiler

아고다에서는 Multi-Product Booking Engine (MPBE)이라고 부르는 예약 엔진을 운영하고 있다. 포스팅에 언급된 Dynamic Graph, Risk Profiler 기능을 정리하고자 한다.

Multi-Product Booking Engine

아고다는 여행 상품 종류가 점점 다양해지면서, 이를 똑같은 방식으로 처리하는 기존 예약 엔진으로는 한계가 있었다고 한다. 그래서 속도나 안정성을 포기하지 않으면서도, 복잡한 흐름을 유연하게 제어할 수 있는 구조가 필요했다고 한다. 

이에 아고다는 비동기 에이전트가 동작하는 그래프 기반 아키텍처를 도입했다고 소개한다.

예약 과정에서 발생하는 재고 확인, 사기 탐지, 결제 승인 같은 절차를 작은 단계로 분리하고, 각 상품의 특성에 따라 다른 방식으로 조합할 수 있게 설계한 구조다. 이 접근 덕분에 복잡한 여행 상품도 안정적으로 처리할 수 있었으며, 새로운 흐름이나 로직을 더 빠르게 실험하고 확장할 수 있는 기반을 갖추게 되었다고 한다. 

Dynamic Graph

아고다는 예약 아키텍처를 설계하면서 정적(Static) 그래프를 사용할지, 동적(Dynamic) 그래프를 사용할지를 놓고 고민했다고 한다.
정적 그래프는 설계 단계에서 모든 상태와 전이가 고정되는 반면, 동적 그래프는 실행 시점의 입력·상황·외부 데이터에 따라 구조가 달라지는 방식이다.

결론적으로 아고다는 동적 그래프를 선택했다.


그 이유는 다음과 같다.

  • 상황, 사용자 맥락, 비즈니스 규칙에 따라 흐름을 실시간으로 조정할 수 있어 A/B 테스트와 실험을 빠르게 반복할 수 있다.
  • 호텔, 항공 등 단일 상품에 특화된 작은 그래프들을 조합해 사용할 수 있어, 거대한 단일 그래프를 관리하는 것보다 훨씬 읽기 쉽고 유지보수도 용이하다.
  • 대부분의 상품은 재고 확인, 사기 탐지, 결제 처리처럼 공통 단계가 있지만, 상품마다 필요한 순서가 달라 이를 유연하게 재배치할 수 있는 구조가 필요했다.

이러한 특성 덕분에 동적 그래프 방식이 아고다의 빠른 실험 문화와 잘 맞았다고 한다.

 

Dashboard

아고다에서는 실시간 대시보드을 통해, 운영상의 문제를 모니터링한다고 한다. 우측에 예약 로그 요약 버전과 대응안이 정리된 점이 인상깊다.

 

Risk Profiler

아고다는 호텔과 항공을 동시에 예약하는 다중 상품 예약 기능을 제공한다. 이 때, Risk Profiler을 사용하여 다중 상품 예약 가능 여부 확인 및 예약 할당 확인 최적 순서를 결정한다. 

예를 들어, Risk Profiler은 다중 상품 예약 과정에서 무료 취소가 가능한 상품을 먼저 확정하게 한다. 이후 단계에서 문제가 발생하더라도 고객에게 위약금을 부과하지 않고 전체 프로세스를 안전하게 되돌릴 수 있도록 한다.

예시)

시나리오

실행 순서

이유
호텔 예약에 무료 취소가 있는 경우 호텔 할당을 먼저 확인 나중에 항공편 할당이 불가능할 경우, 호텔 예약을 수수료 없이 롤백할 수 있음
항공편 예약에 무료 취소가 있는 경우 항공편 할당을 먼저 확인 나중에 호텔 할당이 불가능할 경우, 항공편 예약을 수수료 없이 롤백할 수 있음

 

https://medium.com/agoda-engineering/how-agodas-multi-product-booking-engine-powers-seamless-travel-bookings-61fc6e746821