1. Cloudflare 워커 등록

개인 계정(wks0968@gmail.com) 의 Workers 서비스에 직접 등록 — Pages 가 아닌 Workers Script 형태.

AccountWks0968@gmail.com's Account
Account IDf737a94bd27dd7ccd5c92cf058998d50
Worker namerust-workers-dashboard
Script tag57e4be9fe5994a1a9326944a10ca1da2
Module 형식has_modules · build/worker/shim.mjs (worker-build 산출)
Handlersfetch, init + 6 named WASM 클래스
Usage modelstandard
최초 생성2026-05-09 16:36 UTC
마지막 배포2026-05-10 07:34 UTC
버전 수v29 (29회 배포)
Compatibility배포본 2025-01-01 · wrangler.toml 은 2026-04-01 (다음 배포 시 갱신)
workers.dev subdomainenabled previews_enabled
Custom domain없음 workers.dev 서브도메인만 운영
Smart Placementmode smart · status INSUFFICIENT_INVOCATIONS (트래픽 적어 자동 배치 대기)

2. D1 데이터베이스

UUIDdc08ec5e-d973-4ddb-ba09-03ad0d89fb5c
Namerust-workers-dashboard
RegionAPAC (서버 ICN · 서울 colo 응답)
File size64 KB (65,536 B)
Tables3 (+ 내부 _cf_KV)
Read replicationdisabled
Worker bindingDB (wrangler.toml [[d1_databases]])
SQL 응답0.47ms (서버측)

실측 row 카운트

테이블row비고
notes105title / content / created_at
tags32name UNIQUE / color (hex)
activity487action / entity / summary (CRUD 로그)

3. 라이브 응답 확인

경로상태TTFB응답 size
/ (overview)2001311 ms (cache MISS)4.9 KB
/healthz200460 ms2 B

측정 위치 한국 → CF edge. /healthz 460ms 가 RTT 바닥값 — Smart Placement 가 활성화되면 D1 region(APAC) 와 정합 후 더 감소 예상.

4. 스택

레이어기술비고
런타임Cloudflare Workers (V8 isolate)edge · startup ~1ms
언어Rust 2024 editionMSRV 1.85 · cdylib → wasm32
HTTPworkers-rs 0.8Router + #[event(fetch)]
템플릿maud 0.27Rust 매크로 DSL · XSS 자동 escape
클라HTMX 2.0.6 (+ ext-preload)fragment swap · OOB · hover prefetch
DBCloudflare D1 (edge SQLite)batch · prepared statement
디자인 토큰Open Props (Tier 1) + semantic Tier 2vanilla 2026 CSS
CSS 기능@layer · light-dark() · container queries · color-mix(in oklch)빌드 도구 0

5. 라우트 (16개, 모두 SSR)

경로메서드응답
/GEToverview 페이지 (Workers Cache API · 30s)
/notesGET첫 20 row + sentinel
/notes-page?cursor=IDGETfragment (다음 20 row + sentinel)
/notesPOSTrow + OOB count
/notes/:idGET / PUT / DELETErow / row / OOB count
/notes/:id/editGETedit form fragment
/tagsGET / POST페이지 / chip + OOB count
/tags/:idDELETEOOB count
/activityGET30 row read-only
/settingsGET정적 페이지
/healthzGET"ok"
/static/open-props.min.cssGETmax-age=1년, immutable
/static/app.cssGETmax-age=1일, immutable
/static/manifest.json · /static/icon.svg · /sw.jsGETPWA assets

6. 폴더 구조

rust-workers-dashboard/
├── Cargo.toml              # edition 2024, MSRV 1.85, maud 0.27, worker 0.8
├── wrangler.toml           # Smart Placement, D1 binding (DB)
├── Justfile                # check · clippy · test · ci · dev · deploy · smoke · bench · release
├── .github/workflows/      # fmt + check + clippy + test (-D warnings) + nextest
├── docs/design-system.md   # 2-Tier 토큰 + Open Props
├── migrations/0001_init.sql# 3 테이블 + seed
├── scripts/                # smoke.sh · bench.sh
├── static/open-props.min.css
└── src/
    ├── lib.rs              # entrypoint + Router (~30 LOC, 16 routes)
    ├── error.rs            # AppError + handle()
    ├── validation.rs       # 길이·색상·id·cursor + unit test
    ├── middleware.rs       # 보안 헤더 (CSP / nosniff / HSTS)
    ├── models/             # Note · Tag · Activity · OverviewCounts
    ├── repo/               # D1 batch + keyset cursor
    ├── views/              # maud DSL — page + partial 모두 포함
    └── routes/             # overview · notes · tags · activity · settings · staticfiles · misc

7. 커밋 흐름 (36 commits · main 단일)

국면커밋 범위요지
① 디자인 시스템 도입d8cc4532-Tier 토큰 + Open Props + 컴포넌트 표준화
② 성능cc7d973 ~ 0c8b205keyset 무한스크롤 · CSS 외부화 · 인위 지연 0ms
③ PWAa033475 ~ f6e6c29Critical CSS inline + Service Worker
④ 템플릿 전환4c4fc74askama 0.13 → maud 0.27
⑤ KV 캐시 실험12523aa760053b도입 후 1인 데모엔 부적합 → 제거
⑥ e2e 마이그레이션45d15c6 ~ ac7fa27TS Playwright 제거 → Rust + chromiumoxide
⑦ CI 2026 모범fbc6114 ~ 6772110MSRV · rustfmt · clippy · deny · audit · machete · coverage · nextest 병렬
⑧ 최근 정리bdf0473compatibility_date 2026-04-01 + tooling drift 정리

8. 보안 헤더 (middleware.rs)

헤더
Content-Security-Policydefault-src 'self' + unpkg.com (HTMX)
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
Strict-Transport-Securitymax-age=31536000; includeSubDomains
Referrer-Policystrict-origin-when-cross-origin
Permissions-Policyinterest-cohort · camera · microphone · geolocation 차단

추가 방어: maud 자동 escape (XSS) · D1 prepared statement (SQL injection) · chars().count() 한글 정확 길이 검증.

9. 결론