Articlestripe.com·2025년 7월 10일·0

How we built it: Jurisdiction resolution for Stripe Tax

Quick Summary

스트라이프는 복잡하고 계속 변하는 미국의 과세 관할권을 수 밀리초 안에 정확히 판정하기 위해, 과세 지역을 사전 계산하고 계층형 공간 검색으로 후보를 좁히는 관할권 판정 시스템을 구축했다.

How we built it: Jurisdiction resolution for Stripe Tax 관련 대표 이미지

🖼️ 인포그래픽

How we built it: Jurisdiction resolution for Stripe Tax 내용을 설명하는 본문 이미지

🖼️ 4컷 인포그래픽

How we built it: Jurisdiction resolution for Stripe Tax 내용을 설명하는 본문 이미지

💡 한 줄 요약

스트라이프는 복잡하고 계속 변하는 미국의 과세 관할권을 수 밀리초 안에 정확히 판정하기 위해, 과세 지역을 사전 계산하고 계층형 공간 검색으로 후보를 좁히는 관할권 판정 시스템을 구축했다.

📌 핵심 요약

  • 미국에서는 인터넷 구매에 적용될 수 있는 판매세율과 규칙의 조합이 1만 6천 개를 넘고, 과세 경계도 복잡하게 변하기 때문에 거래별 관할권 판정이 어려운 데이터·알고리즘 문제다.
  • 관할권 판정 시스템은 오프라인에서 동일한 주·카운티·도시·지구세가 적용되는 비중첩 지역인 과세 장소를 계산하고, 온라인에서는 거래 주소에 해당하는 지역을 조회한다.
  • 스트라이프는 품질과 형식이 제각각인 공공 경계 데이터를 정제·중앙화·표준화하는 지리정보시스템을 구축하고, 주·카운티·도시·지구 경계를 순서대로 중첩해 과세 장소를 생성했다.
  • 온라인 판정에서는 복잡한 다각형을 경계 상자로 단순화하고 균형 공간 트리로 후보 지역을 빠르게 축소한 뒤, 마지막 소수 후보에만 점-다각형 판정 알고리즘을 적용한다.
  • 대부분의 지역에서 주소를 수 밀리초 안에 판정하며 95백분위 지연시간도 사우스캐롤라이나를 제외하면 10밀리초 미만이지만, 과거 계산을 위해 이전 경계를 계속 보존하면서 메모리 사용량이 누적되는 문제가 남아 있다.

🧩 주요 포인트

  1. 우편 주소 체계와 과세 관할권 경계가 일치하지 않으므로, 주소 문자열만으로 세금을 결정하는 대신 좌표와 법적 경계 데이터를 결합해야 한다.
  2. 복잡한 공간 연산을 오프라인 사전 계산과 계층형 후보 검색으로 분리함으로써, 정확한 다각형 판정을 유지하면서도 거래 처리 지연을 줄였다.
  3. 관할권 경계에 적용 시점을 함께 기록해 현재 거래와 과거 거래를 모두 재현할 수 있게 했지만, 오래된 공간 데이터까지 보존해야 하는 저장 비용이 뒤따른다.

🧠 상세 정리

1. 미국 판매세 판정의 구조적 복잡성

스트라이프 사용자는 100개가 넘는 지원 국가에서 거래 위치와 관계없이 세금이 빠르고 정확하게 계산되기를 기대한다. 특히 미국에서는 인터넷 구매 한 건에 적용될 수 있는 판매세율과 규칙의 조합이 1만 6천 개를 넘으며, 어느 조합이 적용되는지는 결제 지점의 정확한 위치에 따라 달라진다. 과세 관할권의 지리적 경계는 형태가 복잡할 뿐 아니라 계속 변경되므로, 관할권 판정은 단순한 세율표 조회가 아니라 데이터 공학과 공간 알고리즘의 문제다. 같은 도시와 우편번호를 사용하고 번지 수도 가까운 미주리주 드렉셀의 두 주택이 서로 다른 카운티에 속해 다른 판매세를 적용받는 사례는, 일반적인 주소 정보만으로는 필요한 구분을 안정적으로 포착할 수 없음을 보여준다.

2. 오프라인과 온라인으로 분리한 판정 구조

스트라이프가 도입한 특허 출원 중인 관할권 판정 시스템은 미국 거래가 들어오면 수천분의 1초 수준에서 적절한 과세 관할권을 찾도록 설계됐다. 이 시스템은 외부 판정 절차에 의존하지 않고 내부에서 운영되기 때문에, 세율과 경계가 바뀌더라도 스트라이프 택스가 신뢰성과 정확성을 직접 통제할 수 있다. 오프라인 구성 요소는 미국 전역을 동일한 주세·카운티세·지방세 조합이 적용되는 비중첩 지역으로 나누며, 스트라이프는 이 지역을 과세 장소라고 부른다. 과세 장소의 경계는 미리 계산해 저장하고, 온라인 구성 요소는 실제 거래 시 해당 데이터를 조회해 주소가 속한 과세 장소를 결정한다. 계산량이 큰 공간 정리는 오프라인으로 옮기고 거래 시점에는 필요한 조회만 수행함으로써 온라인 지연시간을 최소화했다.

3. 공공 공간 데이터와 복잡한 다각형의 한계

정확한 판정을 위해 스트라이프는 주·카운티·도시·지구 등 관할권 경계를 나타내는 공공 데이터를 수집하고, 주소 좌표가 어느 경계 다각형 안에 있는지 판단하는 방식을 택했다. 그러나 공공 공간 데이터의 품질과 일관성은 주정부와 지방정부마다 달랐으며, 불과 몇 인치의 위치 편차도 주소를 잘못된 관할권에 배정해 틀린 판매세를 부과하는 결과로 이어질 수 있었다. 이웃한 관할권은 빈틈이나 중첩 없이 맞닿아야 하지만, 서로 다른 기관이 관리하는 원천 데이터가 항상 그 조건을 충족하는 것도 아니었다. 법적 경계를 반영한 다각형은 수백 개에서 수천 개의 변을 가질 만큼 복잡하고, 내부에 해당 지역에서 제외되는 섬 모양의 공간까지 포함할 수 있다. 이런 다각형을 거래마다 직접 계산하면 특히 경계 부근 판정에서 연산량이 커져 결제 처리 지연을 유발할 위험이 있었다.

4. 지리정보시스템을 통한 경계 정제와 과세 장소 생성

낮은 품질의 관할권 정의를 바로잡기 위해 스트라이프는 경계 데이터를 정제하고 중앙화하며 표준 형식으로 관리하는 지리정보시스템을 개발했다. 이 시스템은 편의상 푸에르토리코·미국령 버진아일랜드·워싱턴 디시를 주로 취급해 총 53개 주 단위 경계, 3,225개 카운티, 약 1만 개 도시, 약 3천 개 지구의 경계를 저장하며, 과세 지역의 신설과 폐지에 따라 수치는 달라진다. 정제된 데이터는 먼저 서로 겹치지 않는 주 경계부터 중앙 지도에 올리고, 다음으로 주 경계를 넘지 않는 카운티 경계를 중첩하는 순서로 처리했다. 이후 카운티를 가로지를 수 있는 도시와 도시·카운티·다른 지구까지 가로지를 수 있는 지구 경계를 추가했다. 최종적으로 특정한 관할권 조합이 겹치는 각각의 영역을 하나의 과세 장소로 식별함으로써, 실제 세금 규칙과 연결할 수 있는 공간 단위를 만들었다.

5. 변경 시점까지 보존하는 시간 인식형 경계

경계를 한 번 정확히 계산하는 것만으로는 충분하지 않은데, 과세 관할권은 계속 변경되어 특정 시점의 지도도 곧 과거 상태가 되기 때문이다. 스트라이프 택스 팀은 과세 장소 경계에 영향을 주는 변화를 추적하고, 관할권 경계가 바뀔 때마다 해당 주의 과세 장소를 다시 계산한다. 새로 생성되거나 수정된 경계에는 변경이 발생한 시점을 표시해 지리정보시스템에 추가하며, 이전 경계도 삭제하지 않고 동일하게 유효 시점 정보를 붙여 보존한다. 이 구조 덕분에 현재 발생하는 거래에 당시의 올바른 경계를 적용할 수 있을 뿐 아니라, 과거 거래를 다시 계산할 때도 그 거래 시점에 유효했던 과세 장소를 불러올 수 있다. 특정 시간대의 자정에 세금 변경이 발효되는 경우에도 관련 시간대와 적용 시점을 구분해 규칙을 알맞은 순간에 갱신할 수 있다.

6. 거래 시점 주소 판정의 규모와 연산 문제

거래 시점에는 고객의 우편 주소를 좌표로 변환한 뒤 그 지점이 어느 과세 장소 다각형에 속하는지 빠르고 정확하게 판정해야 한다. 미국에는 1억 6,600만 개가 넘는 우편 주소와 1만 6천 개의 과세 장소가 있으므로, 모든 주소와 과세 장소의 대응 관계를 사전에 만들어 데이터베이스로 저장하는 방식은 현실적이지 않았다. 일반적인 점-다각형 판정은 대상 좌표와 다각형을 구성하는 꼭짓점 좌표를 비교하며, 꼭짓점이 많아질수록 필요한 계산도 빠르게 증가한다. 수천 개의 꼭짓점을 가진 복잡한 과세 장소와 다수의 후보를 동시에 검사하면 계산 횟수가 수백만 회까지 늘어날 수 있어, 고객이 결제 완료를 기다리는 동안 수행하기에는 부담이 컸다. 따라서 스트라이프는 정확한 다각형 판정 자체를 버리는 대신, 그 판정을 적용할 후보 수를 먼저 대폭 줄이는 방법을 선택했다.

7. 경계 상자와 균형 공간 트리를 이용한 후보 축소

실행시간을 좌우하는 과세 장소의 복잡성을 낮추기 위해 스트라이프는 각 다각형의 가로·세로 좌표 최솟값과 최댓값을 연결한 직사각형 경계 상자를 사용했다. 수천 개의 꼭짓점을 직접 비교하는 대신 네 변으로 된 상자를 먼저 검사하면 공간 탐색을 훨씬 단순하게 만들 수 있지만, 하나의 큰 상자에는 서로 다른 과세 관할권이 함께 포함될 수 있다. 이를 해결하기 위해 상자 안에 더 작은 상자를 계층적으로 구성하고, 데이터가 갱신될 때마다 정렬·타일·재귀 알고리즘으로 다시 만드는 균형 공간 트리에 저장했다. 온라인 조회는 주 전체를 감싸는 큰 상자에서 시작해 주소 좌표를 포함하는 더 작은 상자로 단계적으로 이동하며 후보 범위를 좁힌다. 마지막에는 소수의 과세 장소 후보만 남기고 이 후보들에 점-다각형 알고리즘을 적용하므로, 초기 단계에서 감당하기 어려웠던 정확한 공간 판정을 실용적인 비용으로 수행할 수 있다.

8. 추가 최적화와 성능, 남아 있는 메모리 과제

기본적인 계층 검색으로 지연시간이 크게 줄었지만 일부 복잡한 지역의 이상치를 개선하기 위해 추가 최적화도 적용했다. 각 트리 단계에서는 인구 밀도가 높아 요청 가능성이 큰 지역과 연결되는 경우가 많은 작은 경계 상자를 우선 탐색했고, 서로 떨어진 여러 섬으로 구성된 과세 장소는 하나의 큰 상자로 묶지 않고 각각의 연속된 구성 요소로 분리했다. 그 결과 대부분의 주에서 주소를 과세 장소에 연결하는 데 수 밀리초만 걸렸으며, 53개 주·지역·워싱턴 디시의 95백분위 지연시간은 사우스캐롤라이나를 제외하고 모두 10밀리초 미만이었다. 사우스캐롤라이나의 예외적인 지연은 찰스턴 지역의 관할권이 특히 복잡하고, 찰스턴 하나만 해도 서로 떨어진 영역 73개로 구성돼 있기 때문이다. 현재 남은 주요 문제는 과거 거래의 재계산을 위해 폐기된 과세 장소 경계를 계속 보관하면서 메모리 부하가 누적된다는 점이며, 스트라이프는 과거 정확성을 유지하면서 이 부담을 줄이는 기법을 개발하고 있다.

🧾 핵심 주장 / 시사점

  • 주소 체계는 우편물 전달을 위한 분류이고 과세 경계는 법적 관할을 위한 분류이므로, 두 체계가 비슷해 보여도 정확한 세금 판정에서는 서로 대체할 수 없다.
  • 경계 상자는 최종 판정의 정확성을 담당하는 것이 아니라 비싼 다각형 연산의 후보를 줄이는 역할을 하며, 마지막 단계의 정밀 판정과 결합될 때 속도와 정확성을 함께 확보한다.
  • 과세 경계를 시간에 따라 버전 관리하면 현재 계산뿐 아니라 과거 거래의 재현성도 얻을 수 있지만, 정확한 이력 보존과 메모리 효율 사이의 지속적인 관리가 필요하다.

✅ 액션 아이템

  • 주소 문자열 단독 판정을 피하고, 좌표와 주·카운티·도시·지구 법적 경계를 결합해 관할권을 조회한다.
  • 동일 세율이 적용되는 비중첩 과세 장소를 오프라인 사전 계산하고, 온라인은 계층형 공간 검색으로 후보만 좁힌다.
  • 경계 적용 시점을 함께 보존해 과거 거래를 재현하되, 누적 공간 데이터가 메모리에 미치는 비용을 점검한다.

❓ 열린 질문

  • 사우스캐롤라이나만 95백분위 지연시간이 10밀리초를 넘는 공간 구조·경계 복잡성의 원인은 무엇인가?
  • 이전 관할권 경계를 계속 보존할 때 허용 가능한 메모리 증가와 보존 기간의 기준은 무엇인가?
  • 품질이 제각각인 공공 경계 데이터를 중첩해 과세 장소를 만들 때 오류를 어떤 기준으로 걸러낼 것인가?

관련 문서

공통 태그와 주제 흐름을 기준으로 같이 보면 좋은 문서를 이어서 제안합니다.