구현 업데이트: 게이트는
NEXT_PUBLIC_ZUPLO_API_URL(또는NEXT_PUBLIC_TRIAL_GATEWAY_CONFIGURED=1) 에 의존합니다. 동일 출처/api/trial/*Pages 프록시·NEXT_PUBLIC_TRIAL_USE_SAME_ORIGIN는 제거되었습니다. 아래 §1.2 표는 과거 로직 참고용 — 현재는 trial-page-free-email-zuplo-layout-plan §2 와trial-gateway.ts를 기준으로 하세요.
0. 범위
- 대상 URL: https://www.pregoi.com/trial (배포·캐시·환경에 따라 동일 증상이 Pages 미리보기 등에서도 재현될 수 있음)
- 비범위: 본 문서는 코드 수정 없이 원인 정리·우선순위·검증 절차만 정의한다. 구현 시 www /trial Zuplo 통합 기획, trial-page-free-email-zuplo-layout-plan을 참고한다.
1. 증상 ① — 노란 배너: “Email verification isn’t available on this site yet…“
1.1 UI·코드 매핑 (현행)
- 문구는
TRIAL_EMAIL_GATEWAY_NOT_CONFIGURED_COPY(apps/www/lib/trial-gateway.ts). TrialEmailGate는isTrialEmailGatewayConfigured()=== false 일 때만 해당 알림을 띄운다 (apps/www/components/trial/TrialEmailGate.tsx).
1.2 isTrialEmailGatewayConfigured() 가 false가 되는 조건 (현행)
| 조건 | 결과 |
|---|---|
NEXT_PUBLIC_TRIAL_GATEWAY_CONFIGURED=1 | 항상 true |
NEXT_PUBLIC_ZUPLO_API_URL 비어 있음 (빌드) | false (모든 호스트·SSR 동일) |
| Zuplo URL이 빌드에 있음 | true |
1.3 프로덕션에서도 배너가 남는 경우 — 점검 가설
-
배포된 www 번들이 구버전
- 게이트 “동일 출처만으로 구성됨” 판단이 들어가기 이전 빌드가
pregoi.com에 올라가 있을 수 있다. - 조치: 최신
main기준으로pages:build:www산출물이 프로덕션 브랜치/프로덕션 배포에 반영됐는지 확인, CDN 캐시 무효화·배포 이력 대조.
- 게이트 “동일 출처만으로 구성됨” 판단이 들어가기 이전 빌드가
-
빌드 시
NODE_ENV가production이 아닌 산출물- 비정상적인 파이프라인으로 정적 HTML이 “개발 모드” 값을 포함하면 SSR 구간에서
gatewayReady가 false일 수 있다. - 조치: CI 로그·
next build출력·번들 내process.env.NODE_ENV치환 여부 확인.
- 비정상적인 파이프라인으로 정적 HTML이 “개발 모드” 값을 포함하면 SSR 구간에서
-
호스트 판별 예외 (드묾)
- 사용자 환경이 일반 브라우저 주소창이 아닌 경우(iframe, 인앱 브라우저, 프록시 도메인)
hostname이 예상과 다를 수 있다. - 조치: 재현 시
window.location.hostname로그(내부 디버그 빌드) 또는 지원 티켓으로 수집.
- 사용자 환경이 일반 브라우저 주소창이 아닌 경우(iframe, 인앱 브라우저, 프록시 도메인)
-
API 실패와 혼동
- 같은 문구는
mapTrialGatewayClientError에서NEXT_PUBLIC_ZUPLO_API_URL문자열이 포함된 에러에도 매핑된다. - 이 경우 배너가 아니라 요청 실패 후 빨간 에러 텍스트일 수 있으나, 카피가 동일해 증상 ①과 혼동 가능.
- 조치: 네트워크 탭에서 Zuplo로 가는
POST .../api/trial/email/check성공/실패, 응답 본문 구분.
- 같은 문구는
1.4 운영에서 확인
- Build 변수:
NEXT_PUBLIC_ZUPLO_API_URL필수 (/trialZuplo 직접 호출). - Network: 요청이 Zuplo 베이스로 나가는지, CORS·200 응답인지 확인.
2. 증상 ③ — Work email 입력 불가
2.1 UI·코드 매핑 (현행)
- 입력 필드에
disabled={!gatewayReady}가 걸려 있다 (TrialEmailGate). - 따라서 증상 ①과 동일한 원인이면
gatewayReady === false→ 입력·Continue 모두 비활성이 된다.
2.2 기획 원칙
- 게이트가 “미구성”일 때 필드를 막는 것은 의도된 안전 장치이나, 프로덕션
pregoi.com에서는 구성이 되어 있다고 판단되어야 하므로, 증상 ① 해결과 동일 스프린트에서 검증한다. - (선택) 제품 정책: “미구성”일 때도 입력은 허용하고 전송 시에만 안내하는 방식은 UX 개선 후보이나, 스팸·혼란과 트레이드오프이므로 별도 결정이 필요하다.
3. 증상 ② — 첫 뷰포트에서 하단 푸터(footer)가 보임
3.1 요구(재확인)
- PC·모바일 모두 스크롤 없이 첫 화면에 푸터가 보이지 않게 — 푸터는 스크롤 후 노출.
3.2 현행 레이아웃 (TrialPageClient)
- 루트:
min-h-[100dvh]flex column. main:min-h-[calc(100dvh-4.5rem)]+flex-1+ 세로 중앙 정렬.4.5rem은 헤더 높이 추정치이며, 실제 헤더 + 쿠키 배너 + 모바일 safe-area 합보다 작으면,main이 뷰포트를 덜 채워 푸터가 한 화면 안에 들어오는 현상이 남을 수 있다.
3.3 설계 방향 (구현 시)
| 항목 | 제안 |
|---|---|
| 헤더 높이 | 고정 rem 대신 CSS 변수·scroll-margin·실측 후 min-h-[calc(100dvh-var(--trial-header-offset))] 등으로 조정 |
| 쿠키 배너 | 배너가 있을 때만 추가 오프셋(레이아웃 시프트 최소화) |
| 높이 단위 | 100dvh / 100svh / min-h-screen 조합을 모바일 주소창 시나리오별로 재검토 |
| main 내부 | justify-center로 카드가 세로 중앙에 있으면 시각적으로 “아래가 비어” 푸터가 더 잘 보일 수 있음 → 상단 정렬 + 적당한 pt 또는 최소 높이만 보장 등 브랜드에 맞는 조정 |
| 검증 | 뷰포트 375×812, 390×844, 1280×720, 1920×1080 + 쿠키 배너 on/off 스크린샷 회귀 |
3.4 관련 문서
- trial-page-free-email-zuplo-layout-plan 섹션 3 (레이아웃)
4. 통합 검증 체크리스트 (구현·배포 후)
- 프로덕션 www 번들이 최신인지(배포 ID·커밋 SHA).
-
GET /trial로드 직후 노란 배너 미표시,Work email포커스·입력 가능. -
POST /api/trial/email/check200 (FunctionsZUPLO_API_URL설정됨). - 대표 뷰포트에서 푸터가 첫 화면에 보이지 않음(또는 합의된 디자인 기준 충족).
5. 관련 문서
- www /trial — Zuplo·Cloudflare 통합 기획
- trial-page-free-email-zuplo-layout-plan
apps/www/README.md— 환경 변수·Pages Functions