pile·
백엔드·oliveyoung올리브영 테크블로그·

올리브영 결제 이야기 Part - 1

문제기존 비동기 결제 승인 구조에서는 PG 콜백 누락 시 카드는 빠졌는데 주문은 완료되지 않는 결제 불일치가 발생했고, 대규모 세일 트래픽에서 이슈가 더 자주 터졌다.
접근결제 흐름을 인증과 승인 단계로 쪼개 비동기 → 동기로 옮겼다. 인증은 PG가 사용자 인증 후 올리브영으로 리다이렉트하는 비동기 단계로 유지하고, 승인 단계에서는 올리브영이 PG에 직접 동기 요청을 보내 응답을 기다리는 방식으로 바꿨다. 일정 시간 내 응답이 없으면 무한 로딩 대신 결제 실패로 떨어뜨리는 타임아웃 처리도 명시했다. Datadog로 단계별 지표를 따로 보고 트래픽·실패율을 추적했다.
결과복잡한 비동기 트랜잭션 로직이 사라지며 코드가 단순해졌고, 2022년 3월 대규모 세일에서 결제 불일치 0건을 기록했다. PG 콜백 의존도를 낮춰 결제 신뢰성과 모니터링 가시성이 함께 올라간 사례로 정리됐다.
oliveyoung
올리브영 테크블로그 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·github-engGitHub Engineering·

    조기 종료를 없애야 벡터화된다 — 메모리 속도 소스 코드 케이스 폴딩

    GitHub의 코드 검색 엔진 Blackbird는 480TB 이상의 소스 코드를 인덱싱하기 전 모든 바이트에 case folding을 적용한다. 이 글은 Rust로 구현한 case folding을 메모리 대역폭 한계(45+ GiB/s)까지 끌어올린 두 가지 반직관적 최적화를 상세히 다룬다. 핵심은 루프 조기 종료(break) 제거로 LLVM 벡터화를 유도하고, UTF-8을 디코딩하지 않고 바이트 공간 산술만으로 fold를 수행하는 것이다.

    #rust#unicode#simd+2
  2. 백엔드·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    트랜잭션 스크립트에서 숙소 메타 + 가격 계산 모듈로 — 전시 아키텍처 개선기 (2/3)

    여기어때 전시개발팀이 숙소 상세(PDP) API를 해부한 결과, 코드상으로는 DB 호출 3번처럼 보이던 요청이 실제로는 MongoDB $lookup 체인으로 컬렉션을 19회 접근하는 구조였다. 이 트랜잭션 스크립트 방식의 핵심 문제는 "aggregation이 I/O를 가린다"는 점으로, 독립적인 쿼리 10개가 단일 파이프라인에 직렬화되어 병렬화 기회를 잃고, 가격 때문에 거의 안 바뀌는 이미지까지 매 요청마다 읽어야 하는 읽기 증폭이 발생했다. V3에서는 "조회 시점 조립"을 "쓰기 시점 사전 조립"으로 전환하고, 화면별로 복제되던 가격 계산 로직을 goodsprice 단일 모듈로 수렴했다. 4개 API(PLP/PDP/RDP/ILP)의 반복 마이그레이션은 Claude Code skill로 절차를 고정하고 쉐도잉 + 동일성 검증으로 안전망을 마련하는 방식으로 진행됐다.

    #architecture#migration#caching+2