업데이트: 사용자 추적에 관한 Stripe의 답변
지난주에 저는 Stripe가 고객사의 웹사이트 방문자 행동을 기록한 방식을 설명하는 블로그 글을 게시했습니다. 요약하면, Stripe의 JavaScript 라이브러리는 해당 사이트에 Stripe 결제 양식이 한 번도 표시되지 않았더라도 사용자가 방문한 URL 정보와 마우스 움직임에 관한 텔레메트리를 수집했습니다. 저는 대부분의 Stripe 고객이 이 사실을 모르고 있을 것이라고 생각했고, Stripe가 데이터 수집 관행을 더 눈에 잘 띄고 자세하게 공개해야 한다고 주장했습니다.
이 글은 Hacker News에서 활발한 토론을 불러일으켰고, 여기에는 Stripe의 공동 창업자이자 CEO인 Patrick Collison의 댓글도 여러 개 포함되어 있었습니다. 그는 최고 인기 댓글에서 다음과 같이 말했습니다.
제기된 질문(“Stripe는 이 데이터를 광고에 이용하는가?”)에는 분명히 아니라고 답할 수 있습니다. 이 데이터는 지금까지 광고주에게 판매·대여된 적이 없고, 앞으로도 그러지 않을 것이며, 그 밖의 어떤 방식으로도 제공되지 않을 것입니다.
몇몇 댓글 작성자는 그의 확약을 반갑게 받아들이면서도, Stripe의 서비스 약관과 개인정보 처리방침에 공식적이고 구속력 있는 문구가 담기기를 바란다고 답했습니다.
제 글이 게시된 지 일주일도 지나지 않아 Stripe는 데이터 수집 관행과 사용자 개인정보 보호에 관한 보장을 더 잘 공개하기 위해 어떤 변경을 했는지 설명하는 블로그 글을 게시했습니다.
저는 새 문서를 검토했고, 이번 Stripe의 변경 사항이 제가 제기한 문제를 얼마나 잘 해결했는지 살펴보겠습니다.
Stripe가 변경한 내용
개발자 문서에서 추적 기능을 명시적으로 공개하다
제가 보기에 가장 중요한 변화는 이제 Stripe의 개발자 문서에서 JavaScript 라이브러리의 추적 동작을 공개한다는 점입니다. 어제 변경되기 전까지는 다음 두 문장이 유일한 단서였습니다.
Stripe의 고급 사기 방지 기능을 최대한 활용하려면 결제 페이지뿐 아니라 모든 페이지에서 Stripe.js가 로드되도록 하세요. 그러면 Stripe가 고객이 웹사이트를 둘러보는 동안 사기를 나타낼 수 있는 비정상적인 행동을 감지할 수 있습니다.
이 설명에는 중요한 정보가 빠져 있었고, 라이브러리가 어떤 정보를 수집하며 그 데이터를 Stripe 서버와 어떻게 공유하는지도 전달하지 못했습니다.
현재 Stripe 문서에는 라이브러리 사용 안내에 “고급 사기 탐지 신호 비활성화”라는 섹션이 있으며, 이 섹션에서는 사기 방지를 위해 Stripe가 수집하는 정보의 유형을 명시적으로 정의한 웹페이지로 연결합니다.

Stripe의 새로운 사기 탐지 문서는 Stripe가 사용자 데이터를 수집하는 방식을 더 명확하게 설명합니다.
Stripe 고객은 추적을 비활성화할 수 있다
Stripe는 JavaScript 라이브러리를 업데이트해 고객사가 심층적인 데이터 수집을 거부할 수 있도록 했습니다. 이제 advancedFraudSignals=false 매개변수를 사용해 <script> 태그를 로드하면 이 기능을 비활성화할 수 있습니다.
<script src="https://js.stripe.com/v3/?advancedFraudSignals=false"></script>@stripe/stripe-js npm 패키지를 사용하는 고객사도 라이브러리를 초기화할 때 {advancedFraudSignals: false}를 지정해 이 기능을 이용할 수 있습니다.
import { loadStripe } from "@stripe/stripe-js/pure";
loadStripe.setLoadParameters({ advancedFraudSignals: false });
const stripe = await loadStripe("pk_test_TYooMQauvdEDq54NiTphI7jx");이는 긍정적인 변화입니다. 사기 방지를 강화하기 위해 어느 정도의 데이터를 주고받을지 웹사이트 소유자가 결정할 권한을 되돌려주기 때문입니다.
개인정보 처리방침에서 사용자 데이터 판매를 명시적으로 금지하다
수요일에 Stripe는 개인정보 처리방침을 대폭 개정했습니다. 이번 개정으로 Stripe가 사용자 데이터를 처리하고 외부 파트너와 공유하는 방식에 더 엄격한 제한이 적용되었습니다.
개인정보 처리방침의 전체 변경 사항을 보여주는 diff 화면을 만들어 두었지만, 여기서는 주요 내용을 짚어보겠습니다.
- 광고 네트워크와 사용자 데이터 판매 관련 내용이 사라졌다
원래 블로그 글에서 저는 Stripe 개인정보 처리방침의 다음과 같은 우려스러운 부분을 지적했습니다.
귀하가 당사의 사이트 또는 온라인 서비스를 방문하면 당사와 일부 제3자는 귀하의 개인적인 관심사에 맞춘 제품 및 서비스 광고를 제공하기 위해 시간의 경과에 따라, 그리고 여러 사이트에 걸쳐 귀하의 온라인 활동에 관한 정보를 수집합니다(이러한 유형의 광고를 “관심 기반 광고”라고 합니다).
Stripe에는 AdWords와 AdRoll 같은 광고 파트너와 데이터를 공유할 수 있도록 허용하는 문구도 있었습니다.
당사는 Google AdWords, Doubleclick, AdRoll 및 기타 광고 네트워크와 협력합니다.
Stripe는 이 두 부분을 모두 삭제했습니다. 새 문구는 놀랄 만큼 명확하고 직접적입니다. Stripe는 고객 데이터를 광고주에게 판매하지 않습니다.
당사는 관심 기반 광고를 위해 당사 사용자의 고객에 관한 개인정보를 사용하거나, 공유하거나, 대여하거나, 판매하지 않습니다. 당사는 당사 사용자, 그 사용자들의 고객 또는 당사 사이트 방문자의 개인정보를 판매하거나 대여하지 않습니다.
- 기업이 매각된 뒤에도 사용자 데이터는 계속 보호된다
Hacker News에서 토론이 진행되는 가운데, 한 사용자가 우려를 제기했습니다. Stripe가 현재는 선의로 행동하더라도 다른 회사가 Stripe를 인수하면 사용자 데이터가 잘못된 사람의 손에 넘어갈 수 있다는 내용이었습니다. Patrick Collison은 다음과 같이 답했습니다.
청산 등의 경우에 우리가 이 데이터를 공유하지 못하도록 계약상 제한하거나, 유용한 방식으로 우리 자신을 구속할 수 있는지 법무팀에 문의해 보겠습니다…
아마도 이 대화에 대한 직접적인 답변으로, 새 개인정보 처리방침에는 다음 조항이 포함되었습니다.
당사 또는 당사 사업의 일부를 인수하는 다른 법인은 귀하의 개인정보를 계속 사용할 권리를 갖지만, 귀하가 달리 동의하지 않는 한 본 개인정보 처리방침에 명시된 방식으로만 사용할 수 있습니다.
앞으로도 보고 싶은 변경 사항
Stripe가 신속하고 철저하게 변경한 점은 인상적입니다. 하지만 여전히 개선이 필요하다고 생각하는 부분이 남아 있습니다. 저는 이러한 우려를 Stripe에 직접 전달했고, Stripe는 앞으로 이를 해결할 계획이 있다고 밝혔습니다.
URL 수집을 더 명확하게 공개해야 한다
Stripe의 전용 사기 탐지 페이지에는 “신호 유형”이라는 섹션이 있으며, 사기 탐지의 일환으로 최종 사용자에게서 어떤 정보를 수집하는지 설명합니다.
저는 원래 블로그 글에서 Stripe가 사용자가 방문한 모든 페이지의 전체 URL을 수집한다고 지적했습니다. 여기에는 쿼리 문자열(예: example.com?userId=michael)과 URL 프래그먼트(예: example.com#key=1234)도 포함됩니다. 그런데도 Stripe는 여전히 이 정보를 수집한다는 사실을 명확히 밝히지 않습니다. 가장 가까운 설명은 다음 부분입니다(강조는 제가 추가했습니다).
고급 사기 탐지 신호에는 정상적인 쇼핑객과 사기성 구매자 및 봇을 구분하는 데 도움이 되는 쇼핑 과정의 활동 지표도 포함됩니다… 이러한 신호에는 마우스 활동 지표와 쇼핑 과정에서 사용자가 각 페이지에 머문 시간이 포함됩니다. 이 두 가지 정보는 세션 전체에서 봇과 유사한 행동을 예측하는 데 도움이 됩니다.
이 문구만 보고 합리적인 사람이 Stripe가 전체 URL을 수집한다고 추론할 수 있을까요? 저는 어렵다고 생각합니다.
쿼리 문자열에 민감한 데이터를 저장하는 웹 애플리케이션에는 공감할 수 없을지도 모릅니다. 이는 안전하지 않은 방식으로 널리 알려져 있기 때문입니다. URL 프래그먼트는 더 심각한 문제입니다. 원래 민감한 정보를 저장하기에 안전한 방식이기 때문입니다. 그런 만큼 제3자 라이브러리가 그 내용을 외부 서버로 전송하는 것은 우려스럽습니다.
Firefox Send와 Mega.nz는 URL 프래그먼트에 클라이언트 측 암호화 키를 저장하는 인기 웹 앱의 사례입니다. 사용자는 이렇게 해서 서버가 실제 데이터에 접근하지 못하는 상태로 클라우드에 종단 간 암호화 파일을 저장할 수 있습니다. 만약 Stripe의 JS 라이브러리가 비슷한 방식을 사용하는 사이트에서 실행된다면, 라이브러리가 민감한 암호화 키를 Stripe 서버로 유출할 수 있습니다.

인기 파일 공유 애플리케이션인 Mega.nz는 민감한 암호화 키를 URL 프래그먼트 필드에 저장합니다.
라이브러리 언로드를 지원해야 한다
loadStripe 함수와 /pure 임포트 경로를 사용하면 통합하는 쪽에서 Stripe를 언제 켤지 결정할 수 있지만, 여전히 Stripe를 끌 방법은 없습니다.
결제 과정에서는 Stripe의 고급 사기 탐지를 활성화하고 싶지만 거래가 완료된 뒤에는 Stripe와의 데이터 공유를 중단하고 싶다고 가정해 보겠습니다. 현재로서는 페이지를 강제로 새로 고치는 것만이 이를 수행하는 방법입니다.
앱에서 더 이상 추적이 필요하지 않을 때 동적으로 추적을 비활성화하는 unloadStripe 같은 간단한 함수를 Stripe가 제공한다면 더 좋을 것입니다.
이 모든 것이 왜 중요한가?
웹사이트 소유자는 제3자 JavaScript 패키지를 포함함으로써 해당 라이브러리를 상당히 신뢰하게 됩니다. 사용자 브라우저에서 코드를 실행할 수 있는 JavaScript 라이브러리는 왕국의 열쇠를 쥔 것이나 다름없습니다. 사용자가 볼 수 있는 모든 정보에 접근할 수 있고, 사용자의 권한으로 사이트에서 작업을 수행할 수도 있습니다.
웹사이트 소유자는 자신의 사이트가 직접 또는 제3자 라이브러리를 통해 어떤 정보를 수집하는지 파악할 책임이 있습니다(일부 관할권에서는 법적 책임이기도 합니다). Stripe가 책임감 있게 데이터를 관리하는 모습을 보이는 것은 좋은 일입니다. 하지만 웹사이트 소유자는 외부 파트너가 어떤 데이터를 수집하는지, 그리고 해당 데이터에 대해 어떤 제한을 보장하는지 알 권리를 계속해서 요구해야 합니다.
글을 무작위로 읽기
