소프트웨어 개발사 exe가 자사 제품의 결제 시스템을 재설계하며, 복잡한 결제 로직을 제품의 핵심 비즈니스 흐름에서 효과적으로 분리하는 새로운 접근 방식을 발표했습니다. 기존에는 팀 좌석 추가와 같은 제품 로직이 데이터베이스 트랜잭션 및 결제 API 호출과 직접 얽혀 있어, 부분적인 실패나 비정상적인 구독 상태 발생 시 전체 시스템에 영향을 미치는 문제가 있었습니다. exe는 이러한 문제를 해결하기 위해 '청구 가능 사실(billable facts)'이라는 개념을 도입, 제품의 상태 변화를 기록하고 이를 바탕으로 결제 제공자(예: Stripe)의 상태를 사후에 조정하는 방식을 채택했습니다.
이 새로운 아키텍처의 핵심은 제품 로직이 결제 API를 직접 호출하는 대신, '특정 상태가 바뀌었다'는 원자적 작업인 '청구 가능 사실'을 기록하는 것입니다. 예를 들어, 팀 좌석이 추가되면 단순히 해당 상태를 'dirty'로 표시하고, 이후 별도의 워커(worker)가 이 'dirty' 상태를 감지하여 비즈니스 규칙에 따라 실제 좌석 증감분을 계산합니다. 그리고 이 계산된 수량이 기존과 달라진 경우에만 Stripe의 구독 수량을 갱신하는 식입니다. Stripe는 최종 수량만 필요로 하므로, 이 과정에서 어떤 일이 일어났는지는 중요하지 않습니다. 이러한 분리 덕분에 팀원 온보딩 과정이 결제 코드에 의존하지 않게 되며, 좌석 계산 규칙을 변경해도 초대 및 가입 흐름에 영향을 주지 않습니다. 이 방식은 활성 VM 및 디스크 사용량 같은 종량제 청구와 iOS 인앱 구매에도 동일하게 적용될 수 있습니다.
이러한 결제 로직 분리는 여러 중요한 의미를 가집니다. 첫째, 제품 개발 속도를 높이고 안정성을 확보할 수 있습니다. 결제 시스템의 복잡한 예외 처리나 외부 API 호출 실패가 제품의 핵심 기능에 직접적인 영향을 미 주지 않기 때문입니다. 둘째, 결제 시스템의 유연성이 크게 향상됩니다. 새로운 결제 방식을 추가하거나 기존 결제 제공자를 변경하더라도 제품의 핵심 로직을 건드리지 않고, 각 결제 제공자별 연동 방식만 수정하면 됩니다. 셋째, 결제 관련 지식이 특정 개발자에게만 집중되는 것을 방지하고, 팀 전체가 결제 시스템을 더 쉽게 이해하고 관리할 수 있게 됩니다. 이는 장기적으로 유지보수 비용을 절감하고 개발 효율성을 높이는 데 기여할 것입니다.