작성자
Ira Holubovska
일반 데이터 보호 규정(GDPR)이 시행되면서 사용자 개인정보 보호가 필수적인 요소가 되었습니다. GDPR에 따르면 사용자 데이터를 미국 기업이 소유한 도구로 전송하기 전에 개인을 식별할 수 있는 모든 정보를 제거해야 합니다. 이러한 조치는 Privacy Shield(프라이버시 실드)가 무효화되면서 필요해졌습니다.
이 글에서는 Stape의 Anonymizer power-up을 사용하여 사용자 데이터를 자동으로 제거하는 방법과 웹 및 서버 측 GTM을 통해 사용자 데이터를 수동으로 삭제하는 방법을 설명합니다. 이 글은 Google Analytics를 GDPR을 준수하는 방식으로 사용하기 위해 프록시 서버가 필요한 이유를 다룬 이전 블로그 글의 연장선에 있습니다.
일부 EU 국가(이탈리아, 프랑스, 오스트리아, 덴마크)에서는 웹사이트에서 Google Analytics를 사용하는 것이 GDPR을 준수하는지 확인하기 위해 현지 데이터 보호 당국에 문의한 사례가 있었습니다. 모든 사례에서 동일한 답변이 나왔습니다. Google Analytics 사용은 GDPR을 준수하지 않는다는 것이었습니다.
주된 이유는 Google을 포함한 미국 기업들이 EU 사용자의 개인정보를 보호하기 위한 충분한 보안 조치를 제공하지 않기 때문입니다. 따라서 개인 식별 정보(PII)를 미국 기업과 공유하는 것은 GDPR에 위배됩니다. 자세한 내용은 이전 블로그 글에서 확인할 수 있습니다.
다행히 Google Analytics를 사용하면서도 서버 측 추적을 GDPR에 맞게 구현할 수 있는 방법이 있습니다. 프랑스 데이터 보호 당국인 CNIL에 따르면 Google Analytics를 GDPR을 준수하는 방식으로 사용하려면 두 가지 주요 조치를 구현해야 합니다. EU 프록시 서버를 사용하고, 사용자 데이터를 외부로 전송하기 전에 가명 처리하는 것입니다.
프록시 서버는 웹사이트와 미국 분석 도구 간의 직접적인 통신을 방지합니다. 이러한 프록시 서버를 구현하는 가장 쉬운 방법은 서버 측 Google Tag Manager(sGTM) 컨테이너를 사용하는 것입니다. 프록시 서버는 여러 요구사항을 충족해야 합니다. 가장 중요한 것은 프록시 서버를 제공하는 회사가 EU에 등록되어 있어야 하며, sGTM 컨테이너를 호스팅하는 서버가 물리적으로 EU 내에 위치해야 한다는 점입니다. 이러한 두 가지 이유로 sGTM에 Google Cloud(GCP)를 사용할 수 없습니다. Google Analytics와 마찬가지로 Google Cloud도 미국 기업인 Google이 소유하고 있기 때문입니다.
또 다른 좋은 소식은 Stape가 이러한 요구사항을 충족하는 솔루션을 제공한다는 것입니다. Stape에는 EU 프록시 서버의 모든 요구사항을 충족하는 전용 제품인 Stape Europe이 있습니다. Stape Europe은 EU 회원국인 에스토니아에 등록되어 있으며, Scaleway에서 제공하는 EU 클라우드 서버를 사용하여 sGTM 컨테이너를 실행합니다.
이 글에서는 법적 요구사항의 두 번째 부분인 사용자 데이터의 가명 처리에 더 집중하겠습니다. Stape는 사용자 데이터를 자동으로 제거하는 데 도움이 되는 다양한 기능을 개발하고 있습니다. 따라서 이 글을 두 부분으로 나누어 설명하겠습니다.
가명 처리해야 하는 사용자 데이터의 범위는 명확하게 정의되어 있지 않습니다.
IP 주소는 분석 플랫폼으로 데이터를 전송할 때 가장 일반적으로 제기되는 개인정보 보호 문제 중 하나입니다. GA4는 IP 주소를 자동으로 익명화하지만, 일부 기업은 IP 주소가 자체 인프라를 벗어나기 전에 이를 대체해야 할 수 있습니다. 서버 측 GTM을 사용하여 GA4에 추가 IP 익명화를 구현하는 방법을 확인하세요.
현재 Stape Anonymizer power-up은 GA4 전용으로 개발하고 있습니다. 하지만 향후 업데이트에서는 UA 익명화 기능에도 적용할 수 있도록 조정하여 제공할 예정입니다.
GA4에서 전송하는 매개변수는 변경될 수 있다는 점을 이해하는 것이 중요합니다. 이 글은 지속적으로 업데이트할 예정이지만, 실제 운영 환경에 적용하기 전에 사용자 데이터 익명화가 올바르게 작동하는지 반드시 테스트하세요.
제가 찾은 도구 중 GA4 매개변수를 추적하고 식별하는 데 가장 유용한 도구는 이 도구입니다.
사용자 데이터의 가명 처리는 웹 및 서버 측 GTM 컨테이너의 GA4 태그 내에서 이루어집니다. 아직 GA4 서버 측 추적을 설정하지 않았다면 GA4 서버 측 추적 설정 가이드를 참고하세요.
어떤 데이터를 반드시 제거해야 하는지에 대한 엄격한 지침은 없습니다. 회사의 데이터 보안을 어떻게 관리할지는 직접 결정할 수 있습니다. 예를 들어 사용자의 IP 주소를 완전히 제거하거나 마지막 몇 자리를 삭제할 수 있습니다. 국가, 언어, 브라우저와 같은 매개변수도 중요한 고려 사항입니다. 각 매개변수만으로는 사용자를 식별하기에 충분하지 않을 수 있지만, 여러 매개변수를 결합하면 특정 사용자를 식별할 수 있습니다.
반면 클라이언트 ID나 URL 쿼리 매개변수와 같은 정보를 제거해야 하는지에 대해서는 의문의 여지가 없습니다. 이러한 매개변수는 Google의 고유 식별자를 포함하므로 각각을 개별적으로 사용하더라도 사용자 식별로 이어질 수 있습니다.
예를 들어 모바일과 데스크톱 트래픽을 비교하거나 브라우저별 전환을 분석하는 것이 중요할 수 있습니다. 그렇다면 핑거프린팅과 사용자 식별에 사용될 수 있는 모든 데이터를 제거해야 할까요, 아니면 일부만 제거해도 될까요? 다른 모든 매개변수를 제거했다면 브라우저와 기기 정보를 유지해도 괜찮을까요?
규제 기관의 조사가 이루어질 경우 회사를 적절히 보호할 수 있도록 이러한 문제를 법률 전문가 또는 개인정보 보호 책임자(DPO)와 반드시 논의하세요. 개인적으로는 핑거프린팅이나 사용자 재식별에 사용될 수 있는 모든 사용자 식별자를 제거하는 것이 회사의 안전을 보장하는 데 더 나은 접근 방식이라고 생각합니다.
이 글은 반드시 따라야 하는 지침을 제공하기 위한 것이 아닙니다. 데이터를 제거하거나 가명 처리한 경험과 Stape가 이러한 작업을 자동으로 수행하는 방법을 공유하기 위한 것입니다. Anonymizer power-up을 사용하지 않거나 각 매개변수를 수동으로 익명화하는 방법을 선택할 수도 있습니다.
최근 Anonymizer power-up을 출시했습니다. 이 기능은 모든 Stape 사용자가 이용할 수 있습니다. Anonymizer의 주요 목적은 Google Analytics 4에서 사용자 데이터를 제거하거나 익명화하는 것입니다.
Anonymizer를 활성화하려면 Stape에서 sGTM 컨테이너를 열고 Power-ups를 클릭한 다음 Anonymizer를 선택하세요.

이 제품에는 MaxMind에서 생성한 GeoLite2 데이터가 포함되어 있으며, https://www.maxmind.com 에서 확인할 수 있습니다.
어떤 매개변수를 그대로 유지하고, 제거하거나 익명화할지 선택해야 합니다. 매개변수 설정을 완료한 후에는 Google Analytics 4의 태깅 서버 URL을 업데이트해야 합니다. 이전에 https://sgtm.example.com을 태깅 서버 URL로 사용했다면 Anonymizer 활성화 후 URL은 https://sgtm.example.com/anonymize로 변경됩니다. 요청은 /anonymize 경로를 통해 sGTM으로 프록시되며, 지정된 데이터가 제거됩니다.
GA 요청이 /anonymize가 포함된 태깅 서버 URL을 통해 전송되면 선택한 매개변수가 자동으로 제거되거나 익명화됩니다.
Anonymizer를 활성화하고 설정한 후에는 웹 GTM 구성 태그의 GA4/UA 전송 URL을 /anonymize로 끝나는 URL로 변경했는지 확인하세요.
다음은 Anonymizer에서 제거하거나 익명화할 수 있는 모든 매개변수 목록입니다. Anonymizer를 개발할 때 저희의 목표는 고객이 개인정보로 간주될 수 있는 모든 매개변수를 제거할 수 있도록 하는 것이었습니다. 제거할 매개변수는 직접 선택할 수 있습니다. 어떤 매개변수를 제거해야 하는지는 DPO 또는 법률 전문가와 상의하세요.
대부분의 매개변수에는 두 가지 옵션이 있습니다. 그대로 유지하거나 제거하는 것입니다. IP와 Client ID 두 매개변수에는 Anonymize와 Anonymize Strictly 옵션도 제공됩니다.
IP
Anonymize – 마지막 옥텟을 제거합니다.
Anonymize Strictly – 마지막 두 옥텟을 제거합니다.
Client ID. JavaScript Managed 클라이언트 식별 방식을 사용하는 경우에만 작동합니다.
Anonymize – IP + UserAgent의 해시값을 사용하고 연도와 월을 추가합니다.
Anonymize Strictly – IP + UserAgent의 해시값을 사용하고 타임스탬프를 추가합니다: crc32_hash(IP+UA).timestamp.
| 매개변수 이름 | 설명 | GA4 매개변수 | 익명화 |
|---|---|---|---|
| IP | 사용자 IP 주소 | IP Address | Anonymize – 마지막 옥텟 제거. Anonymize Strictly – 마지막 두 옥텟 제거 |
| Client ID | Google Analytics 클라이언트 ID, _ga, _ga_*, FPLC, FPID 쿠키 | cid, _ga, _ga_*, FPLC, FPID | Anonymize – IP + UserAgent 해시값에 연도와 월 추가. Anonymize Strictly – IP + UserAgent 해시값에 타임스탬프 추가: crc32_hash(IP+UA).timestamp |
| User ID | 사용자 ID, Google Developer ID, Firebase ID | uid, gdid, _fid | – |
| Session ID | 세션 ID, 새 세션 ID | sid, _nsi | – |
| Query parameters | Document Location에서 쿼리 매개변수 제거 | dl | – |
| Referer | Document Referrer 헤더, Document Referrer 매개변수 | referer header, dr | – |
| 매개변수 이름 | 설명 | GA4 매개변수 |
|---|---|---|
| User Agent | Document User-Agent 헤더, Sec-Ch-Ua 헤더, Sec-Ch-Ua-Platform 헤더, Sec-Ch-Ua-Mobile 헤더, User-Agent 매개변수 | user-agent header, sec-ch-ua header, sec-ch-ua-platform header, sec-ch-ua-mobile header, ua |
| User Country | 지리적 식별자, 사용자의 현재 국가 | geoid, _uc |
| Browser plugins | Java 활성화 여부, Flash 버전 | je, fl |
| Screen Info | 브라우저 화면 해상도, 뷰포트 크기 | sr, vp |
| Screen Colors | 화면 색상 깊이 | sd |
| User Language | 브라우저의 활성 언어 설정 | ul |
| 매개변수 이름 | GA4 매개변수 |
|---|---|
| User Agent Architecture | uaa |
| User Agent Bitness | uab |
| User Agent Full Version List | uafvl |
| User Agent Mobile | uamb |
| User Agent Model | uam |
| User Agent Platform | uap |
| User Agent Platform Version | uapv |
| User Agent WOW64 | uaw |
| 매개변수 이름 | GA4 매개변수 |
|---|---|
| Campaign Medium | cm |
| Campaign Source | cs |
| Campaign Name | cn |
| Campaign Content | cc |
| Campaign ID | ci |
| Campaign Term | ck |
| Campaign Creative Format | ccf |
| Campaign Marketing Tactic | cmt |
| Google Ads ID | gclid |
| Google Display Ads ID | dclid |
Google Analytics 4에서 수집하는 매개변수는 수시로 변경될 수 있습니다. 따라서 모든 사용자 데이터가 제거되었는지 확인하려면 GA4 요청을 점검해야 합니다.
Anonymizer에서 매개변수를 설정하고 GA4 전송 URL을 /anonymize로 끝나는 URL로 변경하면 지정된 매개변수가 제거되거나 익명화됩니다.
Anonymizer를 활성화하고 GA4 전송 URL을 업데이트한 후에는 웹 및 sGTM 디버거, 콘솔, GA4 디버거를 사용하여 필요한 모든 매개변수가 제거되었는지 테스트하세요.
이 작업은 비교적 쉽게 구현할 수 있지만 몇 가지 논란이 있습니다. Google에는 IP 주소의 마지막 바이트를 제거하는 내장 기능이 있습니다. 마지막 바이트를 제거하면 Google이 사용자를 식별할 확률은 256분의 1이 됩니다. 그러나 IP 주소를 다른 매개변수와 결합하면 특정 개인을 빠르게 식별할 수 있습니다.
어떤 사람들은 마지막 옥텟만 제거해도 충분하다고 생각합니다. 반면 사용자의 IP 주소를 완전히 제거해야 한다고 보는 사람들도 있습니다. 제 생각에는 사용자 IP 주소를 완전히 다른 값으로 덮어쓰는 것이 더 좋습니다. Google이 IP 주소를 재사용하는지, 재사용한다면 어떤 방식으로 사용하는지 알 수 없기 때문입니다.
“IP 주소나 쿠키에 저장된 정보와 같은 온라인 식별자는 특히 유사한 유형의 다른 정보와 결합될 경우 사용자를 식별하는 데 일반적으로 사용될 수 있다는 점에 유의해야 합니다. 이는 GDPR 전문 제30항에도 설명되어 있습니다. 해당 조항에 따르면 IP 주소 및 쿠키 식별자와 같은 온라인 식별자를 자연인이나 그 기기에 할당하면 흔적이 남을 수 있으며, 특히 고유 식별자 및 서버가 수신한 다른 정보와 결합될 경우 이러한 흔적을 이용해 개인 프로필을 생성하고 신원을 식별할 수 있습니다.”
프랑스 규제 기관인 CNIL은 IP에 대해 다음과 같이 밝히고 있습니다.
사용자의 IP 주소를 제거하기 위해 서버 측 GA4 태그를 사용하고 ip_override를 임의의 IP 주소로 설정했습니다.

Google은 브라우저와 기기의 각 조합에 고유한 클라이언트 ID를 할당하고, 이를 사용하여 동일한 사용자가 웹사이트를 다시 방문했는지 식별합니다. 이 매개변수는 GA4로 전송하기 전에 제거하거나 가명 처리해야 합니다.
“효과적인 가명 처리를 보장하려면 식별자를 대체하는 알고리즘이 충분한 충돌 확률을 제공해야 합니다. 즉, 서로 다른 두 식별자가 해시 처리 후 동일한 결과를 생성할 가능성이 충분해야 합니다. 또한 시간에 따라 변하는 요소를 포함해야 합니다. 해시 처리되는 데이터에 시간에 따라 달라지는 값을 추가하여 동일한 식별자가 항상 같은 해시 결과를 생성하지 않도록 해야 합니다.”
CNIL은 고객 ID에 대해 다음과 같이 밝히고 있습니다.
클라이언트 ID를 익명화하는 방법은 다양하며, 어떤 방법을 사용할지는 아이디어와 사용 가능한 도구에 따라 달라집니다. 다만 클라이언트 ID가 고유하고 시간에 따라 변하는 요소가 추가되었는지 확인하세요.
User Agent, IP 주소, GTM 난수 변수 등의 해시값을 사용할 수 있습니다. 사용자 IP 주소와 달리 클라이언트 ID를 서버 측에서 제거하는 방법은 찾지 못했기 때문에 클라이언트 측에서 처리했습니다.


Google Analytics 클라이언트 ID를 익명화한 후에는 GA4가 사용자 식별자를 설정하지 않도록 GA4 쿠키의 값을 새로운 값으로 덮어쓸 수 있습니다. 이를 위해 서버 측 GTM 컨테이너의 Cookie Monster 태그 템플릿을 사용했습니다. 쿠키 이름과 값만 추가하면 됩니다. 작업을 완료한 후에는 콘솔에서 GA가 설정하는 쿠키를 확인하는 것을 잊지 마세요.

클라이언트 ID를 익명화하면 GA4 보고에 상당한 영향을 미칩니다. 클라이언트 ID가 매번 달라지므로 GA는 신규 방문자와 재방문자를 구분할 수 없습니다. 또한 멀티채널 기여 분석과 세션 시작, 첫 방문 등의 이벤트에도 영향을 미칩니다.
외부 리퍼러는 사용자가 어떤 경로로 웹사이트에 유입되었는지 확인하기 위해 사용됩니다. 예를 들어 자연 검색, 유료 광고 또는 소셜 미디어를 통한 유입인지 파악할 수 있습니다.
이 정보를 제거하려면 page_referrer 매개변수를 덮어써야 합니다.

URL 매개변수의 주요 목적은 광고 캠페인의 유입 출처를 파악하는 것입니다. URL 매개변수에는 utm_source, utm_medium, 다양한 클릭 ID 등이 포함될 수 있습니다. 이 외에도 일부 플랫폼은 사용자 데이터를 URL에 자동으로 추가합니다.
URL 매개변수를 제거하려면 페이지 URL을 다시 작성해야 합니다. 웹 GTM 템플릿 갤러리에는 이 작업에 도움이 되는 여러 변수가 있습니다. 저는 Trim Query를 사용했습니다. 제거할 쿼리 매개변수의 차단 목록(blocklist) 또는 허용할 매개변수 목록(allowlist)을 지정하기만 하면 나머지 작업은 자동으로 처리됩니다.

여기에는 User Agent, 기기, 브라우저, 화면 해상도, 언어, 운영체제 등의 정보가 포함될 수 있습니다. 핑거프린팅에 사용될 수 있는 모든 정보가 제거되었는지 확인하세요.

사용자 ID나 CRM ID와 같은 사이트 간 식별자를 사용하지 않도록 하세요.
이 부분은 이해하기 다소 어려울 수 있습니다. 하지만 sGTM 컨테이너가 GA로 전송하는 요청을 확인하고, 사용자를 재식별하는 데 사용할 수 있는 매개변수가 포함되어 있지 않은지 점검하는 것이 좋습니다.
먼저 서버 측 GTM 디버거에서 GA4로 전송되는 요청을 확인하세요. 사용자 매개변수가 있는 경우와 없는 경우, URL 매개변수, 다양한 이벤트, 리퍼러 등 여러 시나리오를 테스트해야 합니다.

두 번째 방법은 Google Analytics 4 디버거를 사용하여 GA4가 어떤 데이터를 처리하는지 확인하는 것입니다.

EU 사용자의 데이터를 수집해 미국으로 전송하면서 GDPR을 위반하는 기업은 Google만이 아닙니다. 여러 기업이 수년 동안 유럽 사용자의 개인정보를 수집해 왔습니다. 하지만 Privacy Shield가 무효화되고 EU 사용자 데이터를 미국으로 전송하는 행위가 GDPR에 따라 불법이라는 판결이 내려지면서, 이러한 관행은 전반적으로 제한될 것으로 보입니다.
유럽연합에서 웹사이트를 운영하고 있다면 이제 미국 기업과 공유하는 데이터를 재검토해야 할 때입니다. 그렇지 않으면 규제 기관의 제재로 벌금이 부과될 위험이 있습니다.
서버 측 추적을 시작할 준비가 되셨나요?
무료로 사용해 보기
댓글