이 설명서는 GDPR 및 쿠키 동의(Cookie Consent)의 기술적 측면이 Discourse 내에서 어떻게 작동하는지를 설명하는 가이드이며, 쿠키 동의 관리 및 콘텐츠 관리자 서비스(CMS)에 대한 옵션들을 다룹니다.
이 문서는 GDPR이 포함하는 모든 세부 사항에 대한 포괄적인 가이드가 아닙니다. Discourse는 이 가이드를 사용자에게 법률 조언으로 사용하도록 의도하지 않습니다. Discourse는 사용자의 개별 상황이나 사용 사례에 대해 GDPR 또는 기타 쿠키 동의 법률에 대한 법적 준수 여부를 결정할 수 없습니다.
Discourse는 이제 “Strict Dynamic” CSP를 사용하므로,
Content security policy script src사이트 설정에 개별 URL을 추가하는 것은 더 이상 필요하지(또는 불가능)합니다. 자세한 내용은 Content-Security-Policy now uses 'strict-dynamic' 를 참조하세요.
Discourse의 쿠키
Discourse가 쿠키를 어떻게 사용하는지 이해하려면 개인정보 보호 고지의 쿠키 섹션을 확인하세요.
필수 쿠키
기본적으로 Discourse는 사용자들이 인터넷에 콘텐츠를 게시하여 서로 및 세상과 소통할 수 있도록 하는 기본 기능을 위해 필요한 쿠키만 설정합니다.
제3자 쿠키
기본적으로 Discourse는 분석을 위한 쿠키를 사용하지 않으며, 크로스 사이트 쿠키나 광고 타겟팅 쿠키도 사용하지 않습니다. 그러나 사이트 관리자는 Discourse 사이트에 기타 쿠키(예: Google Analytics, 광고 네트워크, 추적 픽셀 등)를 추가할 수 있습니다.
Discourse에 쿠키를 도입하는 제3자 스크립트가 추가되는 경우, 해당 사이트의 관리 팀은 GDPR에 부합하는 쿠키 관리 솔루션을 찾거나 GDPR 하에 동의가 필요한 쿠키를 처리할 책임이 있습니다.
쿠키 동의 배너
Discourse 인스턴스에 쿠키 동의 배너를 통합하려면 아래에서 가장 인기 있는 서비스 중 일부에 대해 작성한 가이드를 따를 수 있습니다.
사이트에 제3자 JS 스크립트를 참조하는 것은 기본적으로 해당 제3자에게 사이트에 대한 전체 관리자 액세스 권한을 부여하는 것으로, 잠재적인 보안 위험을 초래할 수 있습니다.
이러한 방법 중 하나를 사용하여 쿠키 동의를 관리할 계획이라면, 해당 방법이 자신의 필요와 사이트의 법적 요구사항에 부합하는 방식으로 작동하는지 결정해야 합니다.
Osano
Plans & Pricing | Osano 로 이동하여 플랜을 선택하고 계정을 생성하세요.
계정을 생성한 후 임시 자격 증명이 포함된 이메일을 받게 됩니다. 해당 자격 증명으로 로그인한 후 새 비밀번호를 설정하도록 안내받습니다.
Osano 대시보드로 이동합니다. Consent Management(동의 관리)를 클릭하고 새 동의 구성을 추가하세요.
관리자 이름, 추적하려는 사이트의 URL, 그리고 사이트의 쿠키 정책 URL을 입력하세요. 기본적으로 Discourse의 쿠키 정책은 https://<your-site>/privacy 의 개인정보 보호 페이지에서 찾을 수 있습니다.
Create configuration(구성 생성)을 클릭하면 배너의 코드가 팝업으로 표시됩니다. 이제 Discourse에 추가하거나 나중에 추가할 수 있습니다. Osano 대시보드에서 게시하기 전까지는 사용자가 배너를 볼 수 없습니다.
테마 컴포넌트를 통해 또는 테마를 직접 수정하여 스크립트를 Discourse에 추가할 수 있습니다.
배너를 Discourse에 추가하려면 관리자 대시보드에서 Customize(커스터마이즈) → Themes(테마) → Components(컴포넌트)로 이동한 후 Install(설치)을 클릭하세요.
Add CSS/HTML(HTML/CSS 추가)를 클릭하고 코드를 Head 섹션에 추가하세요.
코드가 포럼에 성공적으로 추가되면 관리자의 상태가 Live(라이브)로 표시되지만 Your script is not yet active(스크립트가 아직 활성화되지 않음)라고 표시됩니다. 관리자는 또한 Mode Discovery/Listener(탐색/리스너 모드)에 있으며, 현재로서는 이것이 좋습니다. 관리자가 이 모드에 있을 동안에는 사이트에 배너가 표시되지 않습니다.
Osano 대시보드로 돌아가세요. 다음 섹션에서 동의 배너의 측면을 사용자 정의할 수 있습니다. 지도를 클릭하면 배너가 다른 국가에서 어떻게 표시되는지 확인할 수 있습니다.
Osano는 사용자가 사이트에서 방문하는 국가를 자동으로 감지하고, 지역별 개인정보 보호법에 따라 배너의 모양을 조정합니다.
예를 들어, 베네수엘라에서 연결하면 쿠키 배너가 간단하며 특정 기간이 지나면 자동으로 사라집니다:
그러나 EU 국가인 네덜란드에서 연결하면 배너에 더 많은 옵션이 있습니다.
쿠키에 대한 더 자세한 정보를 표시하는 쿠키 위젯을 추가하는 옵션도 있습니다.
사용자 정의가 준비되면 Save changes(변경 사항 저장)를 클릭한 다음 Publish(게시)를 클릭하고 마지막으로 Clear & Publish(지우기 및 게시)를 클릭하세요.
Scripts(스크립트) 섹션으로 이동하여 사이트에 감지된 스크립트를 분류하세요. 예를 들어, 제 Discourse 사이트에서는 CDN URL만 감지되었으며, 이는 Essential(필수)로 분류됩니다. 사이트에 실행 중인 기타 제3자 서비스는 모두 적절히 분류해야 합니다.
감지된 쿠키에도 동일한 규칙이 적용됩니다. 예를 들어, 사이트에 Google Analytics가 있는 경우 _ga 쿠키를 감지하며, 이는 Analytics(분석)로 분류되어야 합니다.
Osano가 사이트에 실행 중인 쿠키와 스크립트를 감지하는 데 시간이 걸릴 수 있으며, Osano 스니펫이 모든 곳에서 실행되도록 확인하기 위해 포럼의 다른 섹션을 탐색해야 할 수도 있습니다.
감지된 쿠키와 스크립트는 시간이 지남에 따라 변경될 수 있으며, Osano에서 분류를 업데이트해 달라는 이메일 알림을 받을 수 있습니다. 예:
Configuration 'Cookie test' is running unclassified scripts, iframes and/or cookies.(구성 'Cookie test’가 미분류 스크립트, iframe 및/또는 쿠키를 실행 중입니다.)
분류가 준비되면 모드를 Permissive(허용, 권장) 또는 Strict(엄격)로 변경하고 구성을 게시하세요. 이제 사용자가 배너를 볼 수 있습니다 ![]()

쿠키 구성 모드에 대해 자세히 알아보려면 여기: compliance-modes-listener-permissive-strict | Customer Portal 를 참조하세요.
Osano가 웹 워커를 사용하므로, worker-src 지시문에 blob:도 추가해야 합니다. 이는 커스텀 테마 또는 컴포넌트를 통해 수행해야 하며, Mitigate XSS Attacks with Content Security Policy 의 ‘Extending the Default CSP’ 섹션을 참조하세요.
요약하면, settings.yml 파일에 다음 매개변수를 가진 빈 테마 컴포넌트를 생성해야 합니다:
# settings.yml
extend_content_security_policy:
type: list
default: "worker_src: blob:"
배너가 표시되지 않는 경우, CSP 디버깅 섹션을 참조하세요.
One Trust
Cookie Consent | Products | OneTrust 로 이동하면 첫 번째 도메인에 대해 무료로 가입하거나 가격 페이지에서 유료 구독을 시작할 수 있습니다.
OneTrust에 대한 환영 이메일과 플랫폼 로그인 링크를 받게 되며, 계정 설정을 안내해 줍니다.
https://app.onetrust.com/welcome 로 이동합니다. Avalaible Apps(사용 가능한 앱) 또는 My Apps(내 앱) 섹션에서 Cookie Compliance(쿠키 준수)를 선택하세요.
Add Website(웹사이트 추가)를 선택하세요.
웹사이트 URL을 추가하세요.
스캔을 시작하고 대상 청중(준수해야 하는 개인정보 보호 프레임워크, 예: GDPR)을 선택하세요.
다음 섹션에서 배너의 측면을 사용자 정의하고 자체 브랜드를 추가할 수 있습니다. 준비가 되면 변경 사항을 저장하고 게시하세요.
배너를 Discourse에 추가하려면 사이드 메뉴의 Integration(통합) 섹션으로 이동하여 목록에서 사이트를 선택하세요.
Production Scripts(프로덕션 스크립트)에서 Production CDN 스크립트를 복사하세요.
테마 컴포넌트를 통해 또는 테마를 직접 수정하여 스크립트를 Discourse에 추가할 수 있습니다.
관리자 대시보드에서 Customize(커스터마이즈) → Themes(테마) → Components(컴포넌트)로 이동한 후 Install(설치)을 클릭하세요.
Add CSS/HTML(HTML/CSS 추가)를 클릭하고 복사한 코드를 Head 섹션에 추가하세요.
그리고 끝! 배너는 다음과 같은 모습이어야 합니다:
배너가 표시되지 않는 경우, CSP 디버깅 섹션을 참조하세요.
ConsentManager
https://www.consentmanager.net/register/ 로 이동하여 계정을 생성하세요. 마법사를 따라 동의 관리자를 설정하세요.
4단계에서 Continue 버튼을 클릭하기 전에 페이지를 아래로 스크롤하세요. “Choose your system” 섹션 아래에 "Setup using copy & paste."라는 섹션이 있습니다. Semi-Automatic blocking 탭을 선택하고 해당 섹션의 코드를 복사하세요.
테마 컴포넌트를 통해 또는 테마를 직접 수정하여 스크립트를 Discourse에 추가할 수 있습니다.
관리자 대시보드에서 Customize(커스터마이즈) → Themes(테마) → Components(컴포넌트)로 이동한 후 Install(설치)을 클릭하세요.
Add CSS/HTML(HTML/CSS 추가)를 클릭하고 복사한 코드를 Body 섹션에 추가하세요.
그리고 끝! 배너는 다음과 같은 모습이어야 합니다:
배너가 표시되지 않는 경우, CSP 디버깅 섹션을 참조하세요.
Cookie Consent Banner Theme Component
이 테마 컴포넌트는 포럼에 사용자 정의 가능한 쿠키 동의 배너를 추가할 수 있게 해줍니다. 이는 Discourse 관리자가 Insites의 오픈 소스 쿠키 동의 배너를 쉽게 활용할 수 있도록 하는 것입니다.
Discourse 테마 컴포넌트 설치 지침에 대해서는 다음을 참조하세요: Installing a theme or theme component
Debugging CSP
쿠키 동의 배너가 표시되지 않는 경우:
- 브라우저 콘솔 오류 확인: 브라우저 콘솔에서 CSP 관련 오류가 있는지 확인하세요.
- 스크립트 로드 방법 확인: 쿠키 동의 스크립트가 올바르게 로드되고 있는지 확인하세요:
- 테마 헤더에 추가된 스크립트는 자동으로 신뢰됩니다.
loadScript()를 통해 동적으로 로드되거나 프로그래밍 방식으로 생성된 스크립트 요소는 strict-dynamic과 함께 작동합니다.- “parser-inserted” 스크립트(스크립트 태그를 사용하여 HTML을 직접 주입)는 피하세요.
- 특수 구성: 일부 동의 관리자는 CSP와 함께 작동하려면 특수 구성이나 특정 요구 사항이 있을 수 있습니다. CSP 호환성에 대해 문서에서 확인하세요.
- Unsafe-eval: 쿠키 동의 스크립트가
unsafe-eval을 요구하는 경우,content security script src설정에 이를 추가할 수 있습니다(따옴표 포함:'unsafe-eval').
![]()
'unsafe-eval'또는 기타 허용적인 지시문을 추가할 때는 CSP의 효과를 감소시킬 수 있으므로 주의하세요.
이 단계 후에도 문제가 지속되면 쿠키 동의 제공자가 최신 CSP 구현과 호환되는지 확인하거나 지원에 문의해야 할 수 있습니다.
기타 콘텐츠 관리자 서비스 옵션
위에서 언급한 쿠키 관리 옵션 외에도 Discourse와 함께 작동할 수 있는 기타 동의 관리자 서비스 옵션에는 다음이 포함됩니다:
쿠키 정책
이 가이드는 Discourse의 /privacy 페이지에 다양한 벤더의 쿠키 정책을 추가하는 방법을 설명합니다.
One Trust
참고: OneTrust 계정 설정 및 테마 컴포넌트 생성 단계를 위 섹션에서 읽을 수 있습니다.
-
여기에 설명된 지침을 따라 OneTrust 계정에서 SPA 지원을 활성화하세요.
-
다음 두 코드 블록을 테마 컴포넌트의
Head섹션에 아래에 하나씩 추가하세요. -
참고: 두 함수
clearDup와reloadOTBanner는 이 페이지에서 가져왔습니다. 반드시 해당 함수를 사용하도록 하세요. 아래 코드에 있는 해당 함수의 버전은 단순한 예시일 뿐이며, 이 문서를 읽는 시점에 구식이 될 수 있습니다.<script type="text/x-handlebars" data-template-name="/connectors/below-static/add-cookie-policy"> <div id="ot-sdk-cookie-policy"></div> </script>
<script type="text/discourse-plugin" version="0.10.0"> //SHOULD BE USED ONLY ON COOKIE POLICY. TRIGGER FUNCTION BELOW TO REMOVE DUPLICATE CATEGORIES // script taken from: https://my.onetrust.com/s/article/UUID-69162cb7-c4a2-ac70-39a1-ca69c9340046?language=en_US#UUID-69162cb7-c4a2-ac70-39a1-ca69c9340046_section-idm45403310539216 function reloadOTBanner() { var otConsentSdk = document.getElementById("onetrust-consent-sdk"); if (otConsentSdk) { otConsentSdk.remove(); } if (window.OneTrust != null) { OneTrust.Init(); setTimeout(function() { OneTrust.LoadBanner(); var toggleDisplay = document.getElementsByClassName( "ot-sdk-show-settings" ); for (var i = 0; i < toggleDisplay.length; i++) { toggleDisplay[i].onclick = function(event) { event.stopImmediatePropagation(); window.OneTrust.ToggleInfoDisplay(); }; } }, 1000); } } function clearDup() { var sec = document.getElementById("ot-sdk-cookie-policy") var tally = []; for (var i = sec.length - 1; i >= 0; i--) { if (tally[sec[i].firstChild.innerText] === undefined) { tally[sec[i].firstChild.innerText] = 1; } else { //console.log(i,sec[i].firstChild.innerText); sec[i].remove(); //return true; } } //return false; } api.onAppEvent("page:changed", (data) => { if(data.currentRouteName == 'privacy') { reloadOTBanner(); clearDup(); } }) </script>
참고
- 브라우저 콘솔을 보면 쿠키 동의 또는 관련 코드를 추가한 파일에서
OptanonWrapper함수가 누락된 것처럼 보일 수 있지만, 사실은 그렇지 않습니다. Discourse는OptanonWrapper함수가 포함된 코드 블록을 제거하지 않고, 대신 해당 블록을 자체 파일로 변환합니다. 브라우저의 JS 콘솔에서 해당 함수를 호출하여 함수가 실제로 존재하는지 확인할 수 있습니다.




























