본문으로 건너뛰기
피드

챗GPT 광고는 이렇게 대화창에 끼어들고 추적된다

ai-ml 약 10분

한 연구자가 동의받은 모바일 트래픽에서 챗GPT 광고 삽입과 광고주 사이트 추적 흐름을 관찰했다. 챗GPT 백엔드는 대화 응답 스트림에 구조화된 광고 객체를 끼워 넣고, 광고주 사이트는 오픈AI의 OAIQ SDK로 클릭 이후 행동을 다시 보고하는 구조였다. 핵심은 Fernet 암호화 토큰 4개로 대화 속 광고 노출, 클릭, 광고주 페이지 방문, 이후 이벤트를 묶는 귀속 루프다.

  • 1

    챗GPT 응답 스트림에 single_advertiser_ad_unit 광고 객체가 모델 출력과 함께 전달됨

  • 2

    광고 클릭 링크에는 oppref와 olref 토큰이 붙고, 광고주 페이지의 OAIQ SDK가 oppref를 30일짜리 1차 쿠키로 저장함

  • 3

    관찰된 광고는 같은 계정에서도 대화 주제에 따라 다른 브랜드가 나오는 문맥 기반 타기팅에 가까웠음

  • 4

    Fernet 토큰은 서버 키 없이는 복호화할 수 없지만 생성 시각은 공개 바이트만으로 확인 가능함

  • 챗GPT 광고는 그냥 화면 어딘가에 붙는 배너가 아니라, 대화 응답 스트림 안에 구조화된 객체로 들어오는 방식이었음

    • 사용자가 메시지를 보내면 chatgpt.com/backend-api/f/conversation 쪽으로 서버 전송 이벤트(SSE) 응답이 열림
    • 대부분은 모델 출력 이벤트지만, 중간에 single_advertiser_ad_unit 타입의 광고 이벤트가 섞여 들어감
    • 객체 안에는 광고 요청 ID, 광고주 브랜드, 캐러셀 카드, 이미지, 클릭 대상 URL, 광고 데이터 토큰 같은 값이 들어 있었음
  • 광고 객체 이름부터 꽤 노골적임. single_advertiser_ad_unit이라는 타입명은 “한 광고주짜리 광고 단위”라는 뜻에 가깝고, 다른 형제 타입도 있을 법한 네이밍임

    • 광고주 ID는 adacct_ 뒤에 32자리 16진수가 붙는 형태였고, 광고주 계정 단위로 안정적인 식별자처럼 보였음
    • 광고주의 파비콘과 광고 이미지는 모두 bzrcdn.openai.com에서 로드됨
    • 즉 광고 소재를 광고주 서버가 아니라 오픈AI 쪽 CDN이 호스팅하는 구조였음
  • 클릭은 챗GPT 안의 인앱 웹뷰로 열리도록 설정돼 있었음

    • 광고 카드의 target.open_externally 값이 false였음
    • 사용자가 바깥 브라우저로 바로 나가는 게 아니라 챗GPT 안에서 광고주 페이지를 여는 흐름이라, 오픈AI가 클릭 이후 내비게이션도 관찰하기 쉬워짐
    • 여기에 광고주 사이트의 픽셀 신호까지 붙으면, 대화창에서 광고를 본 뒤 실제 사이트에서 뭘 봤는지까지 이어지는 그림이 나옴

중요

> 핵심은 “광고 노출” 하나가 아니라, 대화 스트림 광고 객체, 클릭 URL 토큰, 인앱 웹뷰, 광고주 SDK 이벤트가 한 루프로 묶인다는 점임.

문맥 타기팅은 꽤 직접적으로 보임

  • 같은 계정에서도 대화 주제가 바뀌면 완전히 다른 광고주가 나왔음

    • 베이징 여행 계획 대화에서는 Grubhub의 “중국 음식 배달” 광고가 나왔음
    • 베이징 투어 예약 대화에서는 GetYourGuide의 만리장성 투어 광고가 나왔음
    • 베이징 항공권 대화에서는 항공권 관련 캠페인이 붙었음
    • NBA 플레이오프 대화에서는 Gametime 광고가 나왔고, 봄 패션 트렌드 대화에서는 Aritzia 광고가 나왔음
    • 생산성이나 슬라이드 관련 대화에서는 Canva 광고가 붙었음
  • 이 관찰만 놓고 보면 최소한 대화 주제 기반 문맥 타기팅은 작동하고 있었음

    • 연구자는 이전 대화 기록까지 타기팅에 쓰이는지는 확인하지 못했다고 선을 그음
    • 그래서 “챗GPT가 모든 과거 대화를 광고에 쓴다” 같은 결론까지 가면 안 됨
    • 확인된 건 같은 계정, 다른 대화 주제, 다른 광고주라는 패턴임

광고 하나에 Fernet 토큰이 4개 붙음

  • 광고에는 서로 다른 Fernet 암호화 토큰 4개가 실려 있었음

    • ads_spam_integrity_payload는 SSE 데이터 안에만 있고 클릭 URL에는 없었음. 위조 클릭을 막는 서버 측 무결성 체크 용도로 보임
    • oppref는 클릭 URL에 붙고, 광고주 사이트의 OAIQ 픽셀이 __oppref 쿠키로 그대로 복사함
    • olref도 클릭 URL에 붙지만 관찰된 SDK에서는 저장되지 않았음. 노출이나 아웃바운드 링크 기록 쪽에 쓰일 가능성이 있음
    • ad_data_token은 base64로 감싼 JSON 안에 또 다른 Fernet 토큰을 담고 있었고, 서버 측에서 클릭 시점에 대조하는 용도로 추정됨
  • Fernet은 내용을 못 읽게 암호화하지만, 토큰 생성 시각은 일부 공개 바이트만으로 확인할 수 있음

    • Fernet 토큰의 첫 9바이트는 버전 바이트 0x80과 8바이트 빅엔디언 유닉스 타임스탬프임
    • 서버 키가 없어도 토큰이 언제 만들어졌는지는 뽑아낼 수 있음
    • 연구자가 캡처한 Home Depot 클릭 URL은 2026년 4월 26일 11시 30분 8초 UTC에 만들어졌고, 브라우저가 광고주 페이지를 가져온 시각은 11시 31분 43초였음
    • 클릭까지 걸린 시간은 95초였음. 이런 디테일이 실제 트래픽 관찰 기반이라는 느낌을 확 줌

ℹ️참고

> Fernet 토큰의 내용을 복호화한 건 아님. 다만 포맷상 생성 시각은 암호화 키 없이도 읽을 수 있어서, 토큰 발급과 실제 클릭 사이의 시간차를 계산할 수 있었음.

광고주 사이트에서는 OAIQ SDK가 루프를 닫음

  • 사용자가 광고 카드를 누르면 광고주 URL에 opprefolref가 붙은 채로 이동함

    • 예시 흐름에서는 utm_source=chatgptpilot 같은 캠페인 파라미터도 함께 붙었음
    • 일반적인 광고 캠페인 UTM에 오픈AI 전용 귀속 토큰이 추가된 형태라고 보면 됨
  • 광고주 페이지에는 오픈AI의 oaiq.min.js SDK가 로드됨

    • 관찰된 버전은 0.1.3이었음
    • 초기화할 때 광고주 픽셀 ID를 받고, contents_viewed 같은 측정 이벤트를 호출함
    • SDK는 URL의 oppref 값을 읽어서 __oppref라는 1차 쿠키에 저장함
    • 쿠키 TTL은 720시간, 즉 30일임
  • 이후 이벤트는 오픈AI의 수집 엔드포인트로 POST됨

    • 요청은 bzr.openai.com/v1/sdk/events 계열 엔드포인트로 나감
    • 파라미터에는 광고주 ID, SDK 종류, SDK 버전 같은 값이 포함됨
    • 이렇게 되면 “챗GPT 대화에서 광고 노출 → 광고 클릭 → 광고주 사이트 방문 → 상품 조회 같은 후속 행동”을 한 광고 루프로 이어 붙일 수 있음
sequenceDiagram
    participant 사용자
    participant 챗GPT백엔드
    participant 챗GPT웹뷰
    participant 광고주사이트
    participant 오픈AI수집서버

    사용자->>챗GPT백엔드: 대화 메시지 전송
    챗GPT백엔드-->>사용자: SSE로 모델 출력과 광고 객체 전달
    사용자->>챗GPT웹뷰: 광고 카드 클릭
    챗GPT웹뷰->>광고주사이트: oppref와 olref가 붙은 URL 열기
    광고주사이트->>광고주사이트: OAIQ SDK가 oppref를 30일 쿠키로 저장
    광고주사이트->>오픈AI수집서버: 상품 조회 등 픽셀 이벤트 전송
  • 개발자 입장에서 재밌는 지점은 챗GPT가 광고를 “대화형 UI에 맞게” 넣고 있다는 거임

    • 전통적인 웹 광고처럼 DOM 어딘가에 광고 스크립트가 붙는 게 아니라, 백엔드가 대화 이벤트 스트림에 광고 단위를 직접 넣음
    • 모델 출력과 광고 단위가 같은 스트리밍 채널에 있으니, 제품 경험상으로는 답변의 일부처럼 매끄럽게 보일 수 있음
    • 반대로 투명성이나 추적 범위 관점에서는 사용자가 어디까지 광고 시스템에 들어왔는지 알아차리기 어려울 수도 있음
  • 다만 이 글에서 확인된 건 관찰된 트래픽의 구조지, 오픈AI의 전체 광고 정책이나 내부 타기팅 로직 전부는 아님

    • 사전 대화 기록을 쓰는지, 계정 프로필을 쓰는지, 어떤 기준으로 광고주를 고르는지는 확정할 수 없음
    • 그래도 대화 주제 기반 광고 선택, 4개 토큰 기반 귀속, 광고주 사이트 SDK 추적이라는 큰 흐름은 꽤 선명하게 드러남

기술 맥락

  • 여기서 가장 중요한 선택은 광고를 별도 웹 광고 슬롯이 아니라 챗GPT의 SSE 응답 스트림 안에 넣었다는 점이에요. 챗GPT는 답변을 토큰 단위로 계속 흘려보내는 제품이라, 같은 채널에 광고 객체를 섞으면 UI 입장에서는 자연스럽게 렌더링할 수 있거든요.

  • 귀속 쪽에서는 oppref, olref, ad_data_token, ads_spam_integrity_payload처럼 역할이 나뉜 토큰을 여러 개 둔 게 눈에 띄어요. 하나의 토큰에 모든 걸 넣기보다 클릭 URL, 서버 검증, 광고 데이터 대조, 광고주 픽셀 전달을 분리하면 각 단계에서 필요한 값만 노출할 수 있기 때문이에요.

  • 광고주 사이트에 OAIQ SDK를 심는 방식은 기존 광고 픽셀과 닮아 있어요. 차이는 출발점이 검색 결과나 소셜 피드가 아니라 대화형 AI라는 점이고, 그래서 “어떤 질문을 하다가 이 광고를 봤는가”라는 문맥이 훨씬 강한 신호가 될 수 있어요.

  • 30일짜리 __oppref 1차 쿠키는 클릭 직후 한 번의 방문만 보려는 게 아니라 이후 행동까지 묶으려는 설계로 보여요. 사용자가 바로 구매하지 않고 나중에 돌아와도 광고 기여를 계산할 수 있어야 광고 플랫폼으로서 의미가 생기거든요.

챗GPT 광고가 단순 배너가 아니라 대화 스트림, 인앱 웹뷰, 광고주 픽셀까지 이어지는 폐쇄형 귀속 시스템으로 설계된 게 포인트다. 개발자 입장에서는 AI 서비스가 광고 플랫폼이 될 때 어떤 추적 표면이 생기는지 꽤 구체적으로 볼 수 있는 사례다.

댓글

댓글

댓글을 불러오는 중...

ai-ml

대기업 승진 조건에 AI 역량이 들어오기 시작했다

국내 주요 대기업들이 인사 평가와 승진 요건에 인공지능 활용 역량을 넣기 시작했다. 동시에 AI가 신입의 기초 업무를 대체하면서 채용 축소와 숙련 사다리 붕괴 우려도 커지고 있다.

ai-ml

AI 자격증 500개 시대, 진짜 문제는 ‘AI’보다 불안 마케팅

한국에서 이름에 ‘AI’가 들어간 민간 자격증이 500개를 넘었지만, 실제 검증 시험이 치러진 건 50여 개뿐이라는 지적이 나왔다. AI 역량을 증명한다기보다 취업·재취업 불안을 파고드는 교육·자격증 비즈니스가 빠르게 커지고 있다는 얘기다.

ai-ml

딥시크 V4 프리뷰 공개, 오픈 웨이트에 기본 100만 토큰 컨텍스트까지

딥시크가 V4 프리뷰를 공개하고 오픈 웨이트로 배포했어. 프로 모델은 총 1.6조 파라미터 중 490억 개를 활성화하고, 플래시 모델은 총 2840억 파라미터 중 130억 개를 활성화하는 구조야. 공식 서비스 전반에서 100만 토큰 컨텍스트를 기본으로 밀고, 기존 딥시크 챗과 딥시크 리즈너는 2026년 7월 24일 이후 종료될 예정이야.

ai-ml

몬드리안에이아이, LG AI 아카데미에 프라이빗 AI 클라우드 '런유어 클라우드' 공급

몬드리안에이아이가 LG AI연구원의 교육 프로그램 LG AI 아카데미에 자체 AI 클라우드 솔루션 '런유어 클라우드'를 공급했다. 엔터프라이즈 포털 + 실시간 자원 모니터링 대시보드 + 하이브리드 기술 지원 체계가 수주 결정 요인이었다.

ai-ml

AMD ROCm 7.0, CUDA 락인 정면 돌파 — 추론 3.5배·오픈소스 100%·개발자 10만 명 돌파

AMD가 ROCm 7.0과 개발자 생태계 공세로 엔비디아 CUDA 아성에 도전한다. 전작 대비 추론 3.5배, 훈련 3배 성능 향상을 주장하며 파이토치·vLLM 등 주요 프레임워크에서 코드 수정 없이 구동 가능하다는 호환성을 강조했다. 개발자 클라우드는 10개월 만에 주간 활성 사용자 3.2만 명을 확보했다.