RSS
프론트엔드

GA4 client_storage: 'none'은 정말 쿠키를 막을까?

작성자
듀오랩스 대표·9분 읽기

두 달 전 이 블로그에 「GA4 쿠키 없이 쓰기」라는 글을 썼습니다. client_storage: 'none' 으로 쿠키 저장을 끄고, 자체 분석이 쓰던 익명 ID 를 client_id 로 넘기면 쿠키 0개로 GA4 를 쓸 수 있다는 내용이었습니다. 어제 운영 사이트의 쿠키 목록을 열어 보니 _ga 가 있었습니다.

「쿠키 0」이라고 적어 둔 글과 처리방침

발견은 우연이었습니다. 며칠 동안 GA 를 브라우저 스크립트 대신 서버에서 보내는 방식으로 바꿔 두었다가, 유입 소스가 비고 봇이 섞이는 문제로 다시 gtag.js 로 되돌린 참이었습니다. 되돌린 뒤 수집이 제대로 나가는지 보려고 브라우저 쿠키를 함께 찍었는데, _ga 와 _ga_ 로 시작하는 쿠키가 하나씩 있었습니다.

코드는 8월에 쓴 그대로였습니다. 설정에는 여전히 client_storage: 'none' 이 들어 있었습니다.

gtag('config', 'G-XXXXXXXXXX', { client_storage: 'none', client_id: id });

더 곤란한 것은 개인정보 처리방침이었습니다. 제3조에 「Google Analytics 로도 집계하는데, 쿠키를 만들지 않도록 설정하여」라고 적혀 있었고, 제1조에도 「분석 쿠키 미사용」이라는 괄호가 붙어 있었습니다. 사이트가 방문자에게 하는 약속과 실제 동작이 어긋나 있었습니다.

빈 페이지 네 개로 확인한 결과

운영 페이지에는 다른 스크립트도 실려 있어서, 쿠키가 정말 GA 에서 오는지부터 가렸습니다. gtag 스니펫만 넣은 빈 HTML 을 로컬에 띄우고 설정만 바꿔 가며 쿠키를 봤습니다. 수집 요청은 중간에서 끊어 실제 통계에는 남지 않게 했습니다.

gtag 설정 브라우저에 남은 쿠키
아무 설정 없음 _ga, _ga_<측정 ID>
client_storage: 'none' _ga, _ga_<측정 ID>
client_storage: 'none' + client_id _ga, _ga_<측정 ID>
동의 모드 analytics_storage: 'denied' 없음

client_storage: 'none' 은 아무것도 바꾸지 않았습니다. 쿠키를 실제로 막은 것은 동의 모드뿐이었습니다. 찾아보니 mySociety 가 2023년에 쓴 글도 같은 결론이었습니다. 이 설정은 옛 Universal Analytics 시절의 것이고 GA4 에서는 듣지 않는다는 것입니다.

그렇다면 8월에 쓴 글의 「개발자도구 Application 탭에 _ga 가 없습니다」는 무엇이었나 하는 문제가 남습니다. 그 사이 GA 의 동작이 바뀌었을 수도 있지만, 2023년에 이미 안 된다는 기록이 있는 것을 보면 제 확인이 틀렸을 가능성이 더 높습니다. GA 스크립트는 운영 배포에만 실리게 해 두었기 때문에, 로컬이나 프리뷰에서 봤다면 쿠키가 없는 것이 당연합니다. 어디서 확인했는지는 기록이 없어서 단정하지 못합니다.

동의 모드 대신 쿠키를 인정한 이유

선택지는 둘이었습니다. 동의 모드로 쿠키를 정말 막거나, 쿠키를 쓴다는 사실을 처리방침에 적거나.

동의 모드에서 저장이 거부되면 GA 는 쿠키 없이 익명 신호만 보냅니다. 방문자를 다음 페이지, 다음 방문으로 이어서 세지 못합니다. 8월에 client_storage 를 끄면서 피하려 했던 바로 그 상태입니다. 사용자 수와 재방문 같은 숫자를 버리면서까지 쿠키를 막을 이유는 이 사이트에는 없었습니다. 회사 사이트를 찾아온 사람이 어느 글을 읽고 문의까지 왔는지 보려고 GA 를 붙인 것이니까요.

그래서 코드에서는 효과 없는 client_storage: 'none' 을 지웠습니다. 남겨 두면 다음에 이 파일을 여는 사람이 또 쿠키가 없다고 믿게 됩니다. client_id 는 그대로 둡니다. GA 와 자체 집계가 같은 방문자를 같은 사람으로 세게 하는 역할은 여전히 유효합니다.

배너가 아니라 처리방침 문장을 요구하는 한국법

쿠키를 인정하기로 하자 바로 걸린 질문이 있었습니다. 그러면 유럽 사이트처럼 「쿠키를 허용하시겠습니까?」 배너를 달아야 하나.

한국 개인정보보호법은 그 수준까지 요구하지 않는다고 봅니다. 개인정보보호법 제30조 제1항은 처리방침에 넣어야 할 사항으로 「개인정보를 자동으로 수집하는 장치의 설치·운영 및 그 거부에 관한 사항」을 듭니다. 사전 동의가 아니라 고지입니다. 어떤 쿠키를 왜 쓰는지, 그리고 이용자가 어떻게 거부할 수 있는지를 처리방침에 적으면 됩니다.

새로 쓴 제3조는 이 세 가지를 담았습니다. Google Analytics 가 방문자를 구분하려고 _ga 와 _ga_ 로 시작하는 쿠키를 저장한다는 것, 유효기간이 최대 2년이라는 것, 브라우저 설정이나 Google 의 Analytics 차단 부가기능으로 거부할 수 있고 거부해도 사이트 이용에 제한이 없다는 것입니다.

유효기간을 적으면서 하나 더 알게 된 것이 있습니다. GA 는 쿠키를 2년짜리로 심지만, 크롬에서 확인하면 400일로 찍힙니다. 크롬이 쿠키 수명을 최대 400일로 자르기 때문입니다. 처리방침에는 GA 가 정한 쪽인 「최대 2년」을 적었습니다.

유럽 방문자에 대한 판단

그렇다면 유럽 사람이 이 사이트에 들어오면 어떻게 되는지가 궁금해졌습니다. GDPR 은 유럽에 지사가 없는 회사에도 적용될 수 있습니다. 제3조 제2항은 유럽에 있는 사람에게 상품이나 서비스를 제공하는 경우와, 유럽에서 일어나는 그 사람들의 행동을 모니터링하는 경우를 적용 대상으로 둡니다.

이 사이트는 용인과 수도권의 중소기업을 상대로 하고, 유로 가격이나 유럽 대상 서비스가 없습니다. 첫째에는 해당하지 않는다고 봅니다. 둘째가 애매합니다. 분석 쿠키로 방문을 세는 것을 「모니터링」으로 볼지는 해석이 갈리고, 맞춤 광고나 프로파일링이 아닌 단순 통계는 회색 지대에 가깝습니다. 저는 지금 규모에서는 위험이 낮다고 판단해 그대로 두었습니다. 다만 이건 법률 판단이고 저도 확신하지 못하는 부분입니다.

나중에 유럽 고객을 받게 되면 쓸 수 있는 방법은 봐 두었습니다. 동의 모드는 지역을 지정할 수 있어서, 유럽 경제지역과 영국 방문자에게만 저장 거부를 기본값으로 둘 수 있습니다. 배너 없이 그쪽 방문자에게서만 쿠키가 빠지고, 한국 방문자의 통계는 그대로입니다.

바로 고치지 않고 7일 뒤로 잡은 시행일

문구를 고치는 것 자체는 몇 줄이었습니다. 시간이 걸린 것은 언제부터 적용하느냐였습니다.

이 사이트의 처리방침 제9조는 「변경사항의 시행 7일 전에 웹사이트 공지를 통해 고지」한다고 약속합니다. 그래서 처리방침을 판 단위로 관리하고 있습니다. 판마다 파일이 하나씩 있고, 이미 시행된 판은 고치지 않습니다. 이용자가 「그때 어떤 내용이었나」를 볼 수 있어야 하기 때문입니다.

새 판은 10월 18일 판을 복사해 바뀌는 조문만 고쳤고, 시행일을 오늘부터 7일 뒤인 10월 26일로 잡았습니다. 배포하면 /privacy 위에 개정 예정 안내가 뜨고, 26일 0시가 지나면 재배포 없이 새 판이 현재 방침이 됩니다. 사실과 다른 문장이 일주일 더 효력을 갖는 것이 마음에 걸렸지만, 약속한 절차를 건너뛰는 쪽이 더 나쁘다고 봤습니다.

처리방침에서 빠져 있던 네이버 _fwb 쿠키

쿠키 목록에는 _fwb 라는 쿠키가 하나 더 있었습니다. 네이버 검색광고 전환 추적 스크립트가 만드는 쿠키입니다. 이 스크립트는 9월 초부터 사이트에 실려 있었는데, 처리방침의 처리위탁 목록에는 네이버가 없었습니다. 광고를 시작하기 전에 네이버 문구까지 초안으로 써 두고, 실제 개정에서는 메타만 넣고 지나간 것으로 보입니다.

이번 판에 같이 넣었습니다. 네이버로 전송되는 항목(접속 IP, 브라우저 정보, 방문 페이지와 유입 경로, 광고 클릭 정보, 쿠키 식별값, 문의 완료 여부)과 쿠키 거부 방법을 적고, 네이버 처리방침 링크를 달았습니다. 옛 판에는 그 링크가 생기지 않도록, 링크도 판마다 따로 갖게 했습니다.

운영 주소에서 다시 확인해야 하는 쿠키

이 내용을 근거로 쓴 예전 글들에는 정정 문단을 달았습니다. 「쿠키 0」을 믿고 같은 설정을 따라 한 분이 있다면, 지금 그 사이트에도 _ga 가 생기고 있을 겁니다. 개발자도구에서 운영 주소로 한 번 확인해 보시길 권합니다. 로컬이나 프리뷰가 아니라 운영 주소입니다. 제가 틀렸다면 그 이유도 아마 그쪽일 겁니다.

마지막 수정:

공유하실 때는 출처(Duolabs)와 원문 주소를 표시해 주세요.