브라우저가 공개 키로 테이블을 직접 읽고 쓰던 구조를 없앤다.
- api/db.js: 정해진 작업만 서비스 키로 실행 (임의 쿼리·열 지정 불가)
- api/_origin.js: 서버 함수 공용 출처 검사, 공개 배포에서는 404
- src/lib/db.ts: 화면용 호출 함수, 반환 형태 { data, error } 유지
- 빌드 큐에 바로 넣던 예전 진단 신청 모달 삭제
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.2 KiB
3.2 KiB
webforai.kr 공개 기능 스위치
공개 배포(webforai.kr, VITE_SITE=discovery)에서 숨겨 둔 기능을 다시 여는 방법. 2026-10-07 보도자료 공개일 기준.
지금 공개된 것
랜딩(/), 로그인(/login), 개인정보처리방침(/privacy), 이용약관(/terms). 나머지 경로는 홈으로 돌아간다.
infinith-demo 배포(VITE_SITE 없음)는 모든 화면이 그대로 열린다.
스위치 (src/lib/site.ts)
| 스위치 | 여는 것 | 켜기 전 조건 | 같이 고칠 것 |
|---|---|---|---|
SHOW_PRICING |
/pricing, 헤더 Pricing |
요금 확정 | src/data/pricingTiers.ts 요금표 |
SHOW_SAMPLE_REPORT |
/discovery/sample, 랜딩 "샘플 리포트 보기" |
없음 (가상 데이터 src/data/discovery_sample.ts) |
필요하면 가상 데이터 문구 |
SHOW_USE_CASES |
랜딩 Use Cases 섹션, 헤더 Use Cases | 병원 동의를 받은 비식별 사례 | src/data/useCases.ts 에 사례 추가 (비어 있으면 섹션·메뉴가 나오지 않는다) |
켜는 방법: 값을 !DISCOVERY_SITE 에서 true 로 바꾸고 커밋·배포한다. 값은 빌드 때 정해지는 상수라 꺼진 기능은 공개 번들에서 통째로 빠진다.
공개 번들 검사 (배포 차단)
공개 배포 빌드 끝에 plugins/vite-plugin-public-bundle-guard.ts 가 결과물 전체를 검사한다. 아래가 하나라도 있으면 빌드가 실패해 Vercel 배포가 진행되지 않는다.
- 실제 병원명·도메인 (
plugins/public-bundle-denylist.json의clinics) - 비밀 키: Google API 키(AIza·AQ.), Supabase 주소·JWT (
secrets) - 실제 병원 파일:
reports/,assets/clients/(paths)
새 병원과 계약하거나 진단하면 public-bundle-denylist.json 에 이름·도메인을 추가한다. 실패 메시지에 어느 파일에서 무엇이 걸렸는지 나온다.
켜기 전 확인 순서
- 스위치를 켠 상태로 로컬 빌드:
VITE_SITE=discovery npx vite build→ 번들 검사 통과 확인 - 로컬 미리보기로 화면 확인 (
npx vite preview, 루트가 아니라 해당 경로) - 헤더 메뉴가 빈 곳을 가리키지 않는지 확인
- 배포 후 라이브에서 같은 경로 확인
4단계: 실제 병원 리포트 (스위치로 열지 않음)
/discovery/:id, /actions/:id, /supporters/:id, /images/:id, /build/:id, /report/:id 는 실제 병원 데이터를 보여 준다.
공개 배포에서 열려면 아래가 먼저 끝나야 한다. 스위치를 만들지 않은 이유다.
- 로그인(Supabase Auth)과 병원별 접근 권한
- 데이터베이스 익명 읽기·쓰기 정리: 2026-10-07 실행 (
docs/security/2026-10-07_rls_anon_read_DRAFT.sql). 데모 화면은 서버 함수api/db.js로 조회한다 src/lib/supabase.ts가 공개 번들에 들어가게 되므로 번들 검사secrets의 Supabase 항목을 어떻게 다룰지 결정- 예전 진단 신청 모달(신청마다 자동 빌드 큐
supporter_builds에 넣던 것)은 2026-10-07 삭제했다. 빌드 큐 쓰기는 이제 서버 함수(api/db.js의builds.queue)만 할 수 있다. 공개 폼에서 빌드를 받으려면 사람 승인 단계를 먼저 둔다.