디지털 유배 속 데이터 인프라

발행: (2026년 5월 22일 AM 10:31 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

우리가 실제로 해결하고 있던 문제

데이터 엔지니어로서 나는 고성장 비즈니스를 지원하기 위한 데이터 인프라를 수년간 구축해 왔다. 하지만 이번 최신 프로젝트는 달랐다: 제한된 국가에서 고객에게 스톡 사진을 판매하려고 했는데, 일반적인 결제 게이트웨이인 PayPal, Stripe, Gumroad, Payhip이 전혀 작동하지 않았다.

초기 우회 방법

  • 기프트‑카드 해킹: 고객이 지원되는 국가에서 기프트 카드를 구매하고, 우리가 수동으로 자금을 제한된 국가 계좌로 이체했다.
  • 현지 결제 프로세서: 현지 결제 프로세서와 연동을 시도했지만, API가 제한적이고 수수료가 터무니없이 높았다.

두 접근 방식 모두 총알이 박힌 상처에 밴드‑에이드를 붙이는 느낌이었다—투박하고 오류가 잦으며 확장성이 없었다.

맞춤형 결제‑게이트웨이 집계기 구축

수 주간의 조사와 프로토타이핑 끝에 우리는 제한된 국가에서 운영되는 대체 결제 프로세서를 통합하는 데 집중했다. 주요 과제는 다음과 같았다:

  • 문서가 거의 없거나 직접 만든 문서.
  • 다양한 결제 흐름과 환율을 처리할 맞춤형 집계기 개발 필요.
  • 새로운 프로세서마다 수동으로 온보딩해야 하며, 운영 복잡성이 증가.

이러한 장애물에도 불구하고 우리는 여러 현지 프로세서를 지원하는 견고한 시스템을 제공했다.

결과 및 재엔지니어링

서비스를 시작했을 때 거래량은 급증했지만, 수동 온보딩과 복잡한 흐름 때문에 결제 성공률이 급락했다. 우리는 다음과 같이 대응했다:

  • 실시간 오류 처리 구현.
  • API 모니터링 추가.
  • 온보딩 프로세스 자동화.

여러 차례 반복 후:

  • 결제 성공률이 **95 %**로 향상.
  • 평균 거래 시간30 분에서 5 분으로 단축.
  • 운영 비용30 % 감소하여 제한된 국가에서 지속 가능한 비즈니스를 구축하는 데 자원을 집중할 수 있게 됨.

교훈

  • 처음부터 결제‑게이트웨이 집계기 개발을 우선시했더라면 수 주간의 노력을 절감하고 운영 복잡성을 크게 줄일 수 있었을 것이다.
  • 강력하고 다중 프로세서 결제 API를 조기에 탐색했더라면 초기 기술적인 밴드‑에이드를 피할 수 있었을 것이다.

돌이켜 보면, 선제적인 아키텍처 결정이 첫 날부터 더 나은 결과를 가져왔을 것이다.

0 조회
Back to Blog

관련 글

더 보기 »

베네수엘라의 디지털 크리에이터는 당신의 BS 솔루션을 필요로 하지 않는다.

우리가 실제로 해결하려던 문제 초기 시도 내 플랫폼의 결제 시스템은 PayPal, Stripe, Gumroad와 같은 제3자 서비스를 이용합니다. 이 서비스들은 결제 흐름을 처리하고, 결제 성공 여부를 내 시스템에 알리는 웹훅을 보냅니다. 그러나 이 웹훅이 전송되지 않거나, 결제 상태가 정확히 반영되지 않는 경우가 발생했습니다. ### 문제 정의 1. **결제 상태 동기화 실패** - 사용자가 결제를 완료했음에도 불구하고, 내 데이터베이스에 결제 완료가 기록되지 않음. - 반대로, 결제 실패가 있었음에도 “결제 완료”로 표시되는 경우가 있음. 2. **웹훅 신뢰성 부족** - PayPal, Stripe, Gumroad 모두 재시도 메커니즘을 제공하지만, 내 서버가 일시적인 오류(예: 500 오류, 타임아웃)로 인해 웹훅을 놓치는 경우가 있음. - 웹훅이 중복 전송될 때 중복 처리를 방지하는 로직이 부재함. 3. **다중 결제 제공자 관리 복잡성** - 각 제공자는 서로 다른 API 스키마와 이벤트 타입을 사용함. - 결제 확인 로직이 제공자마다 다르게 구현돼 있어 유지보수가 어려움. ### 초기 접근 방식 1. **단일 제공자에 의존** - 처음에는 Stripe만 사용하고, Stripe의 `checkout.session.completed` 이벤트만 처리하도록 설계했습니다. - 이 접근 방식은 구현이 간단했지만, PayPal과 Gumroad 사용자를 배제하게 되었습니다. 2. **동기식 확인** - 결제 완료 직후 클라이언트에서 서버로 즉시 API 호출을 보내 결제 상태를 확인하도록 했습니다. - 그러나 네트워크 지연이나 사용자가 결제 페이지를 닫는 경우, 이 호출이 누락될 수 있었습니다. 3. **단순 재시도 로직** - 웹훅 처리 중 오류가 발생하면 5분 후에 동일한 엔드포인트로 재시도하도록 설정했습니다. - 이 방식은 재시도 간격이 고정돼 있어, 일시적인 장애가 길어질 경우 여전히 데이터가 누락될 위험이 있었습니다. ### 초기 접근 방식의 문제점 - **제공자 제한**: Stripe만 지원하면 PayPal 사용자와 Gumroad 사용자를 잃게 됩니다. - **실시간성 부족**: 클라이언트‑서버 동기 호출은 사용자의 행동에 크게 의존하므로, 결제 완료를 놓칠 가능성이 높습니다. - **재시도 한계**: 고정된 재시도 간격과 횟수는 다양한 장애 상황을 충분히 커버하지 못합니다. ### 결론 우리는 결제 상태를 **신뢰성 있게** 동기화하고, **다중 제공자**를 원활히 지원하며, **웹훅 실패**에 대한 강력한 복구 메커니즘을 갖춘 시스템이 필요합니다. 이를 위해 다음과 같은 설계 원칙을 채택했습니다.