From 7944063a6e806a4ad71ad40c1503b7e63fd140b4 Mon Sep 17 00:00:00 2001 From: midagedev Date: Thu, 27 Aug 2026 23:27:51 +0900 Subject: [PATCH] Move hosting to Cloudflare Pages with same-origin anonymous analytics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사이트를 GitHub Pages 에서 Cloudflare Pages(cachehit.pages.dev)로 옮기고, 같은 오리진의 Pages Functions 로 익명 집계를 붙인다. - functions/collect.js — POST /collect. 카운터 증가만 저장(IP·UA·식별자 없음). qid 형식·보기 인덱스·확신도 값을 검증하고 cross-site 요청은 403. - functions/stats.js — 집계 전문 공개(GET /stats). AUTHORING §7(선택률 5% 미만 오답 = 죽은 보기, 확신도×정답 교차표)의 데이터 원천이다. - tools/analytics-schema.sql — D1 스키마. 적용 완료(cachehit-analytics). - tools/pack.mjs — dist/ 조립. 루트에는 저작 도구가 섞여 있어 그대로 배포하지 않는다. - assets/app.js — track()/trackPageview(). 배포 호스트에서만 전송하고 (ANALYTICS_HOSTS), pageview 는 localStorage 로 브라우저당 하루 한 번. - tools/e2e.mjs — 테스트 호스트에서 비컨 0건 단언(FAIL-first 확인: 게이트에 cachehit.test 를 넣자 24건 검출), SITE_MARK 갱신. - index.html·make-og.py·og.png·README — URL 을 cachehit.pages.dev 로. 옛 주소는 gh-pages 브랜치의 리다이렉트가 받는다(og.png 는 남겨 기존 트윗 카드 보존). 배포 실측: 사이트 200 / 유효 answer ok / 불량 qid 400 / cross-site 403 / /stats 반영 확인 후 테스트 행 삭제. 커스텀 도메인(cachehit.midagedev.com)은 Pages 에 등록만 해 둠 — DNS CNAME 은 계정 대시보드 권한이 필요해 보류. Co-Authored-By: Claude Fable 5 --- .gitignore | 1 + README.md | 15 ++++++++- assets/app.js | 35 ++++++++++++++++++-- assets/og.png | Bin 50736 -> 50352 bytes functions/collect.js | 66 +++++++++++++++++++++++++++++++++++++ functions/stats.js | 15 +++++++++ index.html | 7 ++-- tools/analytics-schema.sql | 24 ++++++++++++++ tools/e2e.mjs | 10 +++++- tools/make-og.py | 4 +-- tools/pack.mjs | 28 ++++++++++++++++ wrangler.toml | 11 +++++++ 12 files changed, 207 insertions(+), 9 deletions(-) create mode 100644 functions/collect.js create mode 100644 functions/stats.js create mode 100644 tools/analytics-schema.sql create mode 100644 tools/pack.mjs create mode 100644 wrangler.toml diff --git a/.gitignore b/.gitignore index fd4f2b0..da592f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules .DS_Store +dist diff --git a/README.md b/README.md index 37e5364..da8f26b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ 매일 쓰지만 정확히는 모르는 것들을 물어봅니다. 예를 들어 `no-cache`가 실제로 무슨 뜻인지, 304가 왜 공짜가 아닌지, 코덱과 컨테이너가 어떻게 다른지를 묻습니다. -**→ [퀴즈 풀어보기](https://midagedev.github.io/cachehit)** +**→ [퀴즈 풀어보기](https://cachehit.pages.dev)** --- @@ -105,6 +105,19 @@ npm i -D playwright && npx playwright install chromium node tools/e2e.mjs ``` +## 호스팅과 익명 집계 + +사이트는 Cloudflare Pages(https://cachehit.pages.dev)에서 서빙됩니다. 예전 주소 +(midagedev.github.io/cachehit)는 이 주소로 리다이렉트됩니다. + +같은 오리진의 `/collect` 엔드포인트([functions/collect.js](functions/collect.js))가 +익명 집계를 받습니다. **저장되는 것은 카운터 증가뿐입니다** — IP, User-Agent, 쿠키, +식별자는 읽지도 저장하지도 않습니다. 수집 항목은 [스키마](tools/analytics-schema.sql)가 +전부입니다: 문항별 보기 선택 분포, 확신도×정답 교차표, 일 단위 방문·완주·복사·공유 횟수. +이 데이터는 "선택률 5% 미만인 오답은 죽은 보기다"([AUTHORING.md](AUTHORING.md) §7)를 +실행하기 위한 것이고, 집계 전문은 누구나 [`/stats`](https://cachehit.pages.dev/stats)에서 +볼 수 있습니다. 로컬 실행과 E2E에서는 비컨이 나가지 않으며, 그 게이트는 E2E가 검사합니다. + ## 라이선스 문항과 해설: [CC BY 4.0](LICENSE-CONTENT) · 코드: [MIT](LICENSE) diff --git a/assets/app.js b/assets/app.js index 4ece2ef..a93636e 100644 --- a/assets/app.js +++ b/assets/app.js @@ -10,7 +10,7 @@ const LENGTHS = [10, 20] const DEFAULT_LENGTH = 10 const STORE_KEY = 'cachehit.best.v1' const LEN_KEY = 'cachehit.len.v1' -const SITE_URL = 'https://midagedev.github.io/cachehit' +const SITE_URL = 'https://cachehit.pages.dev' const TOPIC_LABEL = { cdn: 'CDN', @@ -31,6 +31,29 @@ const GRADES = [ const $ = (s) => document.querySelector(s) const $$ = (s) => Array.from(document.querySelectorAll(s)) +/* ── 익명 집계 ─────────────────────────────────────── */ +// 무엇을 어떻게 세는지는 functions/collect.js 와 README 에 공개돼 있고, 저장되는 것은 +// 카운터 증가뿐이다(식별자 없음). 수집은 배포 호스트에서만 한다 — 로컬 실행과 +// E2E(cachehit.test)는 이 게이트에서 걸러진다. +const ANALYTICS_HOSTS = ['cachehit.pages.dev', 'cachehit.midagedev.com'] +function track(t, extra) { + try { + if (!ANALYTICS_HOSTS.includes(location.hostname)) return + const body = JSON.stringify({ t, ...extra }) + // sendBeacon: 페이지 이탈 중에도 유실되지 않는 전송 경로. 거부되면 keepalive fetch 로. + if (!navigator.sendBeacon('/collect', new Blob([body], { type: 'application/json' }))) + fetch('/collect', { method: 'POST', body, keepalive: true }).catch(() => {}) + } catch { /* 집계는 실패해도 퀴즈를 막지 않는다 */ } +} +function trackPageview() { + try { + const day = new Date().toISOString().slice(0, 10) + if (localStorage.getItem('cachehit.pv.v1') === day) return // 브라우저당 하루 한 번 + localStorage.setItem('cachehit.pv.v1', day) + } catch { /* 저장이 막힌 브라우저에서는 방문마다 집계된다 — 근사치의 한계로 받아들인다 */ } + track('pageview') +} + const state = { pool: [], // 전체 문항 length: DEFAULT_LENGTH, @@ -89,6 +112,8 @@ async function load() { } $('#btn-start').addEventListener('click', () => startRound(pickQuestions(state.length))) + + trackPageview() } /* 라운드 길이. 20문항은 길다는 실사용 피드백이 있어 10을 기본으로 둔다 — @@ -202,6 +227,8 @@ function grade(confidence) { const isCorrect = picked.correct === true state.answers.push({ q, picked, correct: isCorrect, confidence }) + // opt 는 셔플 전 원본 인덱스로 보낸다 — 집계는 원본 데이터의 보기 순서 기준이다. + track('answer', { qid: q.id, opt: q.options.indexOf(picked), confidence, correct: isCorrect }) $$('#q-options .opt').forEach((b, j) => { b.disabled = true @@ -419,6 +446,7 @@ function renderResult() { `https://x.com/intent/tweet?text=${encodeURIComponent(text)}&url=${encodeURIComponent(SITE_URL)}` state._last = { rate, grade: g, hits, total, byTopic, lucky, solidRate } + track('finish', { len: total }) show('#screen-result') } @@ -514,12 +542,14 @@ $('#btn-copy-q').addEventListener('click', async (e) => { const b = e.currentTarget const picked = q._shuffled?.[state.pending] const ok = await copyText(questionMarkdown(q, picked)) + if (ok) track('copy') b.textContent = ok ? '복사했습니다' : '복사 실패' b.dataset.done = ok ? '1' : '' clearTimeout(b._t) b._t = setTimeout(() => { b.textContent = '문항 복사'; b.dataset.done = '' }, 1800) }) -$('#btn-share').addEventListener('click', saveCard) +$('#btn-share').addEventListener('click', () => { track('share'); saveCard() }) +$('#btn-tweet').addEventListener('click', () => track('share')) $('#btn-restart').addEventListener('click', () => { state.isRetry = false show('#screen-intro') @@ -527,6 +557,7 @@ $('#btn-restart').addEventListener('click', () => { $('#btn-retry-wrong').addEventListener('click', () => { const weak = weakAnswers().map((a) => a.q) if (!weak.length) return + track('retry') state.isRetry = true startRound(shuffle(weak)) }) diff --git a/assets/og.png b/assets/og.png index 29cc8dcdcdacf5d922f343774c23c424686fbe28..e1e8ebec07e14013893a1e85b36e45f5672a08ad 100644 GIT binary patch literal 50352 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 z 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 Q_y07cH??>264HX7DcDhriPBExHd!lvf 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 n^?#~q{?8uv|LP?i3}8c + new Response(JSON.stringify(obj), { + status, + headers: { 'content-type': 'application/json; charset=utf-8' }, + }) + +export async function onRequestPost({ request, env }) { + // 브라우저가 크로스 사이트에서 보낸 요청은 버린다. 헤더가 없는 요청(curl 등)은 + // 막을 수 없고 막지 않는다 — 이 데이터는 공개 집계라 위조의 이득 자체가 없고, + // 방어는 값 검증과 카운터-만-증가 구조로 한다. + const site = request.headers.get('sec-fetch-site') + if (site && site !== 'same-origin') return json({ ok: false }, 403) + + let body + try { + body = await request.json() + } catch { + return json({ ok: false }, 400) + } + + const day = new Date().toISOString().slice(0, 10) + + if (body.t === 'answer') { + const { qid, opt, confidence, correct } = body + if (!QID.test(String(qid))) return json({ ok: false }, 400) + if (!Number.isInteger(opt) || opt < 0 || opt > 3) return json({ ok: false }, 400) + if (!CONFIDENCES.has(confidence)) return json({ ok: false }, 400) + await env.DB.prepare( + `INSERT INTO answers (qid, opt, confidence, correct, n) VALUES (?, ?, ?, ?, 1) + ON CONFLICT(qid, opt, confidence) DO UPDATE SET n = n + 1` + ).bind(qid, opt, confidence, correct ? 1 : 0).run() + return json({ ok: true }) + } + + if (EVENTS.has(body.t)) { + // finish 는 라운드 길이별로 나눠 센다. 10/20 이 아닌 길이(재도전 라운드)는 finish 로 합산. + const key = body.t === 'finish' && (body.len === 10 || body.len === 20) + ? `finish${body.len}:${day}` + : `${body.t}:${day}` + await env.DB.prepare( + `INSERT INTO counters (k, n) VALUES (?, 1) + ON CONFLICT(k) DO UPDATE SET n = n + 1` + ).bind(key).run() + return json({ ok: true }) + } + + return json({ ok: false }, 400) +} diff --git a/functions/stats.js b/functions/stats.js new file mode 100644 index 0000000..9bbb509 --- /dev/null +++ b/functions/stats.js @@ -0,0 +1,15 @@ +// 집계 공개 읽기. 개인 정보가 없으므로 전체를 그대로 준다(무엇을 세는지의 증명이기도 하다). +// 5분 캐시: 이 응답 자체가 이 퀴즈가 다루는 Cache-Control 의 실전 예다. +export async function onRequestGet({ env }) { + const [answers, counters] = await Promise.all([ + env.DB.prepare('SELECT qid, opt, confidence, correct, n FROM answers ORDER BY qid, opt').all(), + env.DB.prepare('SELECT k, n FROM counters ORDER BY k').all(), + ]) + return new Response(JSON.stringify({ answers: answers.results, counters: counters.results }), { + headers: { + 'content-type': 'application/json; charset=utf-8', + 'access-control-allow-origin': '*', + 'cache-control': 'public, max-age=300', + }, + }) +} diff --git a/index.html b/index.html index 09be65d..f369f73 100644 --- a/index.html +++ b/index.html @@ -10,16 +10,17 @@ - + + - + - + diff --git a/tools/analytics-schema.sql b/tools/analytics-schema.sql new file mode 100644 index 0000000..0bffdfa --- /dev/null +++ b/tools/analytics-schema.sql @@ -0,0 +1,24 @@ +-- 집계만 저장한다. 원시 이벤트·IP·UA·식별자는 어떤 형태로도 저장하지 않는다. +-- AUTHORING §7 이 요구하는 두 가지가 이 스키마의 전부다: +-- ① 문항별 보기 선택 분포 (선택률 5% 미만 오답 = 죽은 보기) +-- ② 확신도 × 정답 여부 교차표 (확신했는데 틀린 문항이 가장 가치 있다) +-- 적용: wrangler d1 execute cachehit-analytics --remote --file tools/analytics-schema.sql + +-- 보기 선택 카운터. (qid, opt, confidence) 한 칸이 교차표의 한 셀이다. +-- opt 는 셔플 전 원본 데이터 기준 보기 인덱스다. +CREATE TABLE IF NOT EXISTS answers ( + qid TEXT NOT NULL, + opt INTEGER NOT NULL, + confidence TEXT NOT NULL, -- sure | unsure | guess + correct INTEGER NOT NULL, -- 0/1 (qid+opt 에서 유도 가능하지만 SQL 편의로 저장) + n INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY (qid, opt, confidence) +); + +-- 일 단위 카운터. k 는 "이벤트:YYYY-MM-DD" (예: pageview:2026-08-27). +-- pageview 는 방문자 수가 아니라 브라우저·일 단위 근사치다: 클라이언트가 localStorage 로 +-- 하루 한 번만 보낸다. 서버는 아무 식별자도 받지 않으므로 그 이상은 셀 수 없고, 세지 않는다. +CREATE TABLE IF NOT EXISTS counters ( + k TEXT PRIMARY KEY, + n INTEGER NOT NULL DEFAULT 0 +); diff --git a/tools/e2e.mjs b/tools/e2e.mjs index 8c2dcfe..1d51931 100644 --- a/tools/e2e.mjs +++ b/tools/e2e.mjs @@ -39,7 +39,7 @@ const ANSWER = new Map( JSON.parse(fs.readFileSync(path.join(ROOT, 'data/questions.json'), 'utf8')) .map((q) => [q.question, q.options.find((o) => o.correct).text])) -const SITE_MARK = 'midagedev.github.io/cachehit' +const SITE_MARK = 'cachehit.pages.dev' const browser = await chromium.launch() // https 로 서빙한다 — clipboard API 는 보안 컨텍스트에서만 존재하고, 문항 복사가 @@ -54,6 +54,12 @@ const jsErrors = [] page.on('pageerror', (e) => jsErrors.push(String(e))) page.on('console', (m) => { if (m.type() === 'error') jsErrors.push('console: ' + m.text()) }) +// 집계 비컨은 배포 호스트에서만 나가야 한다(assets/app.js 의 ANALYTICS_HOSTS 게이트). +// 테스트 호스트에서 한 건이라도 나가면 게이트가 뚫린 것이다 — 이 검사가 없으면 +// 로컬 실행·E2E 가 실데이터를 오염시키는 회귀를 아무도 눈치채지 못한다. +const beacons = [] +page.on('request', (r) => { if (r.url().includes('/collect')) beacons.push(r.url()) }) + await page.route('**/*', (route) => { const u = new URL(route.request().url()) const file = path.join(ROOT, u.pathname === '/' ? '/index.html' : u.pathname) @@ -192,6 +198,8 @@ console.log(`${ROUNDS}문항 진행 — 정답 ${tally.hits} / 찍어서 맞음 console.log(` ${got.line}`) console.log(` 재도전: ${got.retry}`) console.log(` 원문 링크가 보인 문항: ${tally.withLinks}/${ROUNDS}`) +if (beacons.length) + fails.push(`테스트 호스트에서 집계 비컨이 ${beacons.length}건 나갔다 — ANALYTICS_HOSTS 게이트가 뚫렸다: ${beacons[0]}`) if (jsErrors.length) { console.log(`\nJS 오류 ${jsErrors.length}건`) for (const e of jsErrors) console.log(` ✗ ${e}`) diff --git a/tools/make-og.py b/tools/make-og.py index 7d040cf..86576f7 100644 --- a/tools/make-og.py +++ b/tools/make-og.py @@ -51,7 +51,7 @@ def question_count(): # 로고 라인 d.text((PAD, y), 'cachehit', font=font(34, 'Bold'), fill=ACCENT) lw = d.textlength('cachehit', font=font(34, 'Bold')) -d.text((PAD + lw + 18, y + 10), 'github.io', font=font(22, 'Regular'), fill=FG_FAINT) +d.text((PAD + lw + 18, y + 10), 'pages.dev', font=font(22, 'Regular'), fill=FG_FAINT) # 제목 y += 82 @@ -99,7 +99,7 @@ def question_count(): n = question_count() left = f'{n}문항 · 4지선다 · 확신도 입력 · 즉시 해설' if n else '4지선다 · 확신도 입력 · 즉시 해설' d.text((PAD, BAR_Y + 30), left, font=font(25, 'Medium'), fill=FG_DIM) -right = 'midagedev.github.io/cachehit' +right = 'cachehit.pages.dev' rw = d.textlength(right, font=font(25, 'SemiBold')) d.text((W - PAD - rw, BAR_Y + 30), right, font=font(25, 'SemiBold'), fill=OK) diff --git a/tools/pack.mjs b/tools/pack.mjs new file mode 100644 index 0000000..ae369f3 --- /dev/null +++ b/tools/pack.mjs @@ -0,0 +1,28 @@ +#!/usr/bin/env node +// Cloudflare Pages 배포물(dist/)을 조립한다. 레포 루트에는 저작 도구·문항 소스·규약이 +// 함께 있으므로 루트를 그대로 배포하면 안 된다 — 사이트가 실제로 서빙하는 파일만 담는다. +// +// 사용: node tools/pack.mjs → wrangler pages deploy +import { cpSync, mkdirSync, rmSync, existsSync } from 'node:fs' +import { join, dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..') +const DIST = join(ROOT, 'dist') + +rmSync(DIST, { recursive: true, force: true }) +mkdirSync(DIST, { recursive: true }) + +// 사이트가 요청하는 경로 전부. 여기 없는 파일을 index.html 이나 app.js 가 참조하기 +// 시작하면 배포에서만 404 가 난다 — e2e 는 레포 루트를 서빙하므로 잡지 못한다. +const FILES = ['index.html', 'assets/app.js', 'assets/style.css', 'assets/og.png', 'data/questions.json'] +for (const f of FILES) { + const src = join(ROOT, f) + if (!existsSync(src)) { + console.error(`없는 파일: ${f} — 배포물이 불완전하다`) + process.exit(1) + } + mkdirSync(dirname(join(DIST, f)), { recursive: true }) + cpSync(src, join(DIST, f)) +} +console.log(`dist/ 조립 완료 (${FILES.length}개 파일)`) diff --git a/wrangler.toml b/wrangler.toml new file mode 100644 index 0000000..9664b3c --- /dev/null +++ b/wrangler.toml @@ -0,0 +1,11 @@ +# Cloudflare Pages 설정. 사이트는 dist/ (tools/pack.mjs 산출물), 수집 엔드포인트는 +# functions/ (같은 오리진이라 CORS 가 없다). 배포는 리드가 로컬에서: +# node tools/pack.mjs && wrangler pages deploy +name = "cachehit" +pages_build_output_dir = "dist" +compatibility_date = "2026-08-01" + +[[d1_databases]] +binding = "DB" +database_name = "cachehit-analytics" +database_id = "2fe19fc6-9e1a-4099-835f-8a1f8521494d"