본문으로 이동
가맹점은 변함없이, 결제창 시스템 전면 재작성하기
문서

가맹점은 변함없이, 결제창 시스템 전면 재작성하기

황성우 · 토스 · 토스 기술 블로그

원본 보기

소개

20년간 유지되어 온 PG의 레거시 결제창 시스템을, 변화에 유연하게 진화할 수 있는 새로운 결제 시스템으로 재탄생시킨 여정을 공유합니다.

AI 핵심 요약

20년 된 결제창은 수천 줄의 분기문, 오래된 Struts·WebLogic, JSP에 섞인 DB 접근과 FE·BE 강결합 때문에 기능 추가와 변경이 어려웠습니다. 이를 개선하기 위해 값과 기능 파라미터를 분리한 불변 `SessionCreationRequest`와 `Feature` 객체를 도입하고, OpenAPI와 레거시 입력을 각각 독립적인 Converter로 변환해 코어 로직을 외부 인터페이스 변화로부터 분리했습니다. 결제 흐름은 ENTRY·PREPARE·CONFIRM으로 표준화하고, 서버가 목적지·전송 방식·데이터를 지정하는 Bridge 인터페이스로 FE의 비즈니스 판단을 줄였으며, Canary 배포와 단계별 모니터링·자동 롤백으로 가맹점 연동을 유지하며 전환했습니다. 그 결과 기존 연동을 깨뜨리지 않고 새 기능을 빠르게 개발할 기반을 마련했으며, 첫 화면의 Preflight 제거와 Multi-Layer Cache도 성능 및 트래픽 대응을 위한 설계에 포함했습니다.

  • 외부 연동 파라미터는 Converter에서 검증·변환하고, 내부 도메인 로직은 안정적인 요청 객체만 다루게 하세요.
  • 여러 파라미터에 흩어진 기능 조건은 Feature 객체로 묶어 응집도를 높이고 중복 처리를 줄일 수 있습니다.
  • FE가 결제처나 전송 방식을 판단하지 않도록 서버가 목적지·HTTP 방식·payload를 담은 Bridge 응답을 제공하세요.
  • 대규모 전환은 가맹점과 기능 단위 Canary 배포, 단계별 지표 모니터링, 자동 롤백으로 위험을 제한할 수 있습니다.
  • 첫 화면처럼 지연에 민감한 요청은 CORS Preflight를 피하는 Simple Request와 캐시 계층을 함께 검토하세요.