토스페이먼츠 기술 블로그에 11편짜리 시리즈가 올라왔다. 제목은 "레거시 개편 이야기". 읽기 전에는 흔한 마이그레이션 회고록이겠거니 했는데, 읽고 나니 이건 한국 PG 업계의 기술 부채 고백서에 가깝다.
출발점: 20년 된 시스템을 통째로 인수하다
이 회사는 2020년 8월에 출범했지만 결제 인프라를 밑바닥부터 짠 게 아니다. 20년 이상 운영된 기존 PG 사업을 통째로 인수하면서 시작했다. 시리즈 첫 편에서 밝힌 인수 시점의 상태가 꽤 충격적이다. 라우팅 규칙 1,997개, DNS 없음. 서버 간 통신이 IP 하드코딩으로 엮여 있었다는 뜻이다. "돌아가니까 건드리지 마"가 20년간 퇴적된 결과물이다.
왜 이런 시스템을 사들였을까? 답은 단순하다 — 가맹점 네트워크다. PG사의 가치는 기술 스택이 아니라 연동된 가맹점 수에 있다. 수만 개 가맹점과의 연동을 새로 따내는 것보다 기존 네트워크째 가져오는 게 훨씬 현실적이다. 기술 부채를 떠안는 대가로 시장 접근성을 산 것이고, 이후 5년의 여정은 그 빚을 갚는 과정이었다.
여기서 짚고 싶은 건, 이런 인수 전략이 토스만의 특수 사례가 아니라는 점이다. 한국 핀테크 대부분이 비슷한 경로를 거쳤거나 거치고 있다. 기존 금융 인프라를 물려받아 현대화하는 건 한국 금융 IT의 구조적 숙제다.
가맹점 몰래 결제창을 갈아끼우는 기술
시리즈에서 기술적으로 가장 흥미로운 파트는 결제창 전면 재작성이다. 결제창은 PG의 얼굴이다. 수만 가맹점이 이 인터페이스를 통해 카드 결제, 계좌이체, 간편결제를 처리한다. 건드리면 가맹점 코드가 깨진다. 안 건드리면 영원히 20년 전 코드 위에서 사는 수밖에 없다.
해법은 가맹점별 × 기능별 카나리 배포 시스템이다. A 가맹점의 카드 결제만 새 시스템으로 돌리고, 같은 가맹점의 계좌이체는 기존 시스템에 둔다. B 가맹점은 아예 전부 기존 시스템에 남겨둔다. 이 granularity가 핵심이다.
일반적인 웹 서비스의 카나리는 트래픽 비율 기반이다. "신규 버전에 5% 트래픽 보내기" 같은 식이다. 그런데 결제 도메인에서는 가맹점과 세부 기능 단위까지 제어가 내려가야 한다. 어떤 가맹점은 하루 결제 건수가 수십만이고 어떤 곳은 수십 건이다. 비율 기반 카나리로는 리스크 관리가 불가능하다.
이걸 과잉 엔지니어링이라고 볼 수도 있겠지만, 결제에서 한 번의 장애는 곧 가맹점 이탈이고 뉴스 헤드라인이다. 금융 인프라에서는 이 정도가 합리적 방어 수준이다.
SQL 수천 줄을 코드로 끌어내다
정산 파트는 짧지만 임팩트가 크다. 기존 정산은 수천 줄짜리 SQL 배치로 가맹점에 정산금을 지급하고 있었다. 테스트 불가, 디버깅은 운에 맡기는 수준, 규칙 하나 추가하려면 기존 쿼리 전체와의 의존성을 눈으로 확인해야 했다. 코드 기반 배치 시스템으로 전환하면서 단위 테스트와 git 기반 변경 추적이 가능해졌다. 당연한 거 아니냐고? 그 "당연한 것"이 20년간 안 되고 있었다는 게 포인트다.
2명이 돌리는 금융급 하이브리드 클라우드
인프라 편이 시리즈의 하이라이트다. DNS도 없던 환경에서 출발해 OpenStack 기반 프라이빗 클라우드를 구축했다. 수십 번 설치를 반복하고 소스코드까지 직접 수정했다고 한다. 그리고 이것을 AWS와 Active-Active로 엮어 하이브리드 환경을 만들었다. 어느 쪽에서든 배포 가능한 구조다.
진짜 눈길을 끄는 건 운영 인원이다. 이 대규모 금융 인프라를 단 2명이 돌린다. 모니터링, 프로비저닝, 배포 파이프라인 전체를 자동화한 결과다. 물론 "2명이 운영"이라는 표현에는 맥락이 있다. 이 시스템을 설계하고 구축하는 데 투입된 인력은 별개다. 만드는 것과 돌리는 것은 다른 문제니까. 그래도 금융급 서비스의 운영 효율성으로는 인상적인 수치다.
한 가지 더. 2020년대 중반에 OpenStack을 새로 깔겠다는 결정은 논쟁의 여지가 있다. 커뮤니티 활력이 예전 같지 않고 인력 풀도 줄었다. 하지만 금융권의 데이터 주권 요구와 퍼블릭 클라우드의 비용 구조를 감안하면 이해가 된다. 규제와 비용, 양쪽의 압박 사이에서 택한 현실적 절충안이다.
이런 기록이 더 나와야 한다
한국 테크 블로그 대부분은 "우리가 이런 멋진 걸 만들었다" 톤이다. 새 프레임워크, 새 아키텍처, 새 도구. 화려하다. 하지만 현실에서 개발자 대부분이 마주하는 건 남이 짠 코드, 10년 된 배치 스크립트, 이유를 아무도 모르는 설정값이다.
이 시리즈가 가치 있는 건 바로 그 지점이다. "물려받은 건 이렇게 엉망이었고, 이렇게 고쳤다"는 이야기를 11편에 걸쳐 결제창, 정산, 인프라, API, 보안까지 독립적으로 파고들었다. 단발성 회고가 아니라 아카이브에 가깝다.
한국 금융 IT에서 레거시를 안고 있지 않은 곳은 없다. PG든, 은행이든, 보험이든. 누군가는 이런 삽질의 과정을 기록으로 남겨야 한다. 그래야 다음 팀이 같은 구덩이를 피할 수 있다. toss.tech의 레거시 개편 시리즈 — 올해 읽은 한국어 기술 콘텐츠 중 가장 실용적인 시리즈로 꼽겠다.