OpenAI가 ChatGPT를 광고 플랫폼으로 확장하면서, 사용자가 ChatGPT 밖에서 하는 행동까지 계정과 연결될 수 있는 구조가 만들어졌다는 분석이 나왔다. 한 연구자가 자신의 휴대폰에서 전 과정을 재현하고 두 가지 독립적인 캡처 방식으로 검증한 뒤, 수개월간 관찰한 트래픽(1,029개 호스트에 걸친 936개 광고주 픽셀)과 교차 확인한 결과다. 핵심은 OpenAI의 광고 수집기 bzr.openai.com이 심는 '__obi'라는 쿠키다. 이 쿠키는 .openai.com 도메인에 설정되고, ChatGPT 계정과 묶인 식별자를 담고 있다.
작동 방식
동작은 두 단계로 요약된다. 먼저 ChatGPT 클라이언트가 16바이트의 무작위 값을 생성하고, 백엔드가 이를 서명한 RS256 JWT를 돌려준다. 토큰의 sub는 계정, obi는 식별자이며, 수집기 전용으로 범위가 제한되고 60초 만에 만료된다. 여기서 bzr은 OpenAI 내부에서 광고 플랫폼을 부르는 이름 'bazaar', 발급 서비스는 wadi다. 다음으로 클라이언트가 이 토큰을 bzr.openai.com/v1/obi/sync에 크로스사이트로 전송하면, 서버는 SameSite=None·Secure·Max-Age 1년으로 설정된 __obi 쿠키를 내려준다. SameSite=None은 서로 다른 사이트 요청에도 쿠키가 함께 전송되도록 하는 설정이며, 실제로 OpenAI의 여러 쿠키 중 이 값만 그렇게 구성돼 있었다. 나머지 쿠키는 광고주 페이지 요청에서 브라우저에 의해 모두 차단됐다.
일반 웹사이트가 ChatGPT에 광고를 집행하려면 자사 사이트에 OpenAI의 코드 조각을 심는데, 이는 이미 상당수 소매업체가 메타·구글 추적 코드를 설치하는 방식과 같다. 그 코드가 로드되는 순간 __obi가 열람 중인 페이지 정보와 함께 OpenAI로 전송된다. 특히 픽셀 SDK에는 자격증명을 생략하는 코드 경로가 있지만 소용이 없다. OpenAI 코드가 실행되기 전, SDK 스크립트를 불러오는 요청 자체에 브라우저가 쿠키를 붙이기 때문이다. 태그를 로드했다는 사실만으로 식별자가 노출되는 셈이다.
무엇이, 얼마나 수집되나
SDK는 광고주 페이지에서 신원 정보도 함께 수집한다. 페이로드는 출처를 네 가지로 구분하는데, 광고주가 의도적으로 넘기는 값(in)과 SDK가 폼 필드·렌더링된 페이지 텍스트·태그매니저 버스에서 긁어오는 값(fm, ht, js)이다. 관찰된 트래픽에서 긁어온 신원 정보는 685건으로, 광고주가 직접 제공한 255건을 앞질렀다. 가장 큰 이메일 출처는 태그매니저 버스로, SDK는 window.dataLayer.push를 자체 함수로 교체하고 adobeDataLayer도 읽으며 이름이 바뀐 GTM 레이어까지 찾아낸다. 이메일·전화·이름은 SHA-256 해시로 전송되지만, 국가·지역·도시·우편번호는 평문으로 전송된다. 우편번호는 28개 사이트에서 100건으로 가장 많이 수집된 폼 필드였다. URL은 오리진과 경로까지만 잘려 쿼리 문자열은 빠졌지만, 경로에는 특정 질환명, 채무 해결 퍼널, 소송 접수 양식 같은 민감한 흔적이 남았다. 자동 매칭은 설정을 확인한 881개 픽셀 중 638개에서 켜져 있었고, 관찰된 신용·대출 광고주는 전부 포함됐다.
동의 분류를 둘러싼 쟁점
OpenAI의 쿠키 정책은 __obi를 '분석(Analytics)' 쿠키로, 유효기간 1년으로 분류한다. 이 항목은 해당 분류의 유일한 항목이다. 그런데 OpenAI는 분석과 마케팅을 별개의 동의 항목(oai_consent_analytics, oai_consent_marketing)으로 운영하며, 연구자가 디코딩한 모든 sync 토큰은 consent_decision이 analytics_allowed로 찍혀 있었다. 즉 분석에는 동의하고 마케팅은 거부한 사용자도 이 식별자를 받는다는 의미다. 연구자는 9월 14일 press@·privacy@ 주소로 왜 __obi가 분석 쿠키로 분류되는지, 마케팅을 거부한 사용자에게도 전달되는지 물었지만, OpenAI 지원팀은 내부 검토에 공유하겠다고만 답하고 두 질문에 답하지 않았다.
한계도 분명하다. 관찰은 안드로이드 크롬에서 이뤄졌고, 사파리의 지능형 추적 방지는 서드파티 쿠키를 모두 차단하며 iOS 크롬도 WebKit 기반이라 이 메커니즘은 iOS 브라우저에서는 작동하지 않는다. 데스크톱 크롬은 검증되지 않았다. 또 ChatGPT 세션 다섯 번 중 한 번꼴로만 sync 토큰이 생성됐고, 모바일 웹 클라이언트는 아예 동기화 없이 광고를 노출하기도 했다. 무엇보다 서버 측에서 이벤트가 실제로 계정에 연결되는 장면은 직접 관찰되지 않았다. 202 응답은 쿠키가 붙은 이벤트를 수집기가 수락했다는 뜻이며, 계정 결합은 설계상 뒤따르는 것으로 추론된다.
실무자에게 남는 시사점
메커니즘 자체는 새롭지 않다. 로그인된 계정, 픽셀 발화 시의 서드파티 쿠키, 오프사이트 전환의 프로필 결합은 메타가 수년 전 만든 표준 애드테크다. 다른 점은 그것을 AI 채팅 제품에서 돌린다는 사실이다. 사람들은 소셜 네트워크에 올리지 않을 이야기를 이런 제품에 털어놓고, 이 제품들은 점점 사용자를 대신해 행동한다. 흥미로운 대비도 있다. 픽셀이 심는 또 다른 쿠키 __obref는 광고주 자체 도메인에 설정돼 사이트마다 값이 다르고 서로 열람할 수 없다. 반면 __obi는 여러 광고주에 걸쳐 같은 값이 재사용됐다(관찰된 30개 값 중 12개가 둘 이상, 한 개는 열 곳에서 등장). 정작 픽셀을 설치한 광고주는 __obi가 자신들의 스크립트가 읽을 수 없는 도메인에 속하기 때문에, 자사 방문자가 ChatGPT 신원으로 결합되고 있다는 사실 자체를 알 방법이 없다. 광고를 붙이는 기업, 태그매니저를 운영하는 개발자, 그리고 동의 배너를 설계하는 실무자 모두가 이 구조의 데이터 흐름과 동의 분류의 간극을 다시 들여다볼 필요가 있다.