웹 런칭 체크리스트
목표: 사이트, Shopify 스토어, 앱 또는 SaaS를 취약점, 법적 미비, 구매 프로세스 오류 없이 게시하는 것입니다. 출시는 사용자의 결정으로 남습니다: 확인하고 준비만 할 뿐, 아무것도 게시하지 않습니다.
의사 결정 규칙 (차단)
다음 중 하나라도 지속되면 게시하지 마십시오:
- 개인 키 또는 비밀 정보가 노출됨 (프론트엔드 코드, Git 저장소, 빌드);
- 사용자가 다른 사용자의 데이터를 읽거나 수정할 수 있음;
- HTTPS가 없거나 손상됨;
- RLS (또는 이에 준하는 것)가 없거나 개인 데이터에 대해 잘못 구성됨;
- 동의가 필요한 추적기가 동의 전에 전송됨;
- 숨겨진 비용이나 기만적인 비용이 있음;
- 구매 또는 결제 프로세스에 결함이 있음.
방법
- 프로젝트 유형(소개 사이트, 스토어, 계정 앱, 결제 SaaS)을 식별하고, 적용되지 않는 검사 항목은 건너뛰며 그 이유를 명시합니다.
- 아래 5개 블록을 순서대로 진행합니다. 각 검사마다: 상태 OK / 수정 필요 / 해당 없음 / 확인 불가, 증거 또는 수행한 테스트를 함께 기재합니다.
- 코드나 데이터베이스(Supabase, Vercel, Shopify)에 접근 가능하면 직접 확인하고, 그렇지 않으면 사용자에게 정확한 테스트 방법을 제시합니다.
- 보고서(아래 형식)로 마무리합니다.
블록 1 — 보안 기술
- 전체 도메인에 HTTPS, HTTP는 리디렉션, 혼합 콘텐츠 없음; HSTS는 검증 후에만 적용. 테스트: http://가 리디렉션되는지 확인.
- 보안 헤더: 적절한 CSP, nosniff, Referrer-Policy, iframe 보호. 테스트: SecurityHeaders.com.
- 비밀 정보는 서버 측에만 저장 (개인 키, 결제 토큰, 비밀 API 키). 테스트: 빌드된 JS와 Git 저장소에 비밀 정보가 없는지 확인.
- 서버 측 유효성 검사 (유형, 크기, 필드); 프론트엔드 유효성 검사만으로는 우회 가능. 테스트: 수정된 요청이 거부되는지 확인.
- 각 리소스에 대한 권한: 각 객체에 대한 신원 및 접근 권한. 테스트: 계정 B가 A의 어떤 것도 읽거나 수정할 수 없는지 확인.
- SQL 인젝션 / XSS: 매개변수화된 쿼리, 프레임워크 이스케이핑, 사용자 HTML을 그대로 사용하지 않음. 테스트: HTML 텍스트가 실행되지 않고 표시되는지 확인.
- CSRF 및 쿠키: Secure, HttpOnly, SameSite, 쿠키 기반 인증 시 CSRF 방지.
- 종속성 최신 상태 유지, 심각한 경고 없음, 불필요한 패키지 제거.
- CORS는 필요한 출처로만 제한 (접근 장벽이 아님).
- 업로드 제어: 크기, 실제 형식, 확장자, 이름 변경, 격리된 저장소.
- 남용 방지: 로그인, 이메일 및 양식에 대한 속도 제한; 필요한 경우 Turnstile 또는 CAPTCHA.
- 관리자 계정: MFA, 제한된 액세스, 내부 패널 노출 금지.
- 프로덕션 모드: 디버그 없음, .env 게시 금지, 자세한 로그 금지.
- 도메인으로 이메일 전송: SPF, DKIM, DMARC.
블록 2 — 데이터 (Supabase 또는 이에 준하는 것)
- Publishable/anon 키는 브라우저 측에서만 사용하고 RLS가 올바른 경우에만; service_role 키는 서버 측에서만 사용.
- 노출된 모든 테이블에 RLS 활성화, anon/authenticated에서 불필요한 권한 제거.
- 각 작업(SELECT, INSERT, UPDATE, DELETE)에 대한 정책을 auth.uid()에 연결; 방문자, 사용자 A, 사용자 B의 세 가지 프로필로 긍정 및 부정 테스트 수행.
- Storage 버킷에 적절한 규칙 적용 (공개 아바타는 송장과 동일한 권한을 가져서는 안 됨).
- Auth: 허용된 리디렉션 URL, 세션 만료, 재설정 및 로그아웃 테스트.
- Security Advisor: 처리되지 않은 심각한 경고 없음.
- 백업: 실제 옵션 확인, 복원 테스트.
- 로그 및 경고 (5xx 오류, 할당량)에서 비밀번호나 토큰을 절대 기록하지 않음.
- 환경 분리 (로컬, 스테이징, 프로덕션) 및 롤백 준비.
블록 3 — 법률 및 신뢰 (프랑스 / EU, 활동에 따라 확인 필요)
- 법적 고지 (신원, 연락처), 개인정보 처리방침 (데이터, 목적, 법적 근거, 보존, 권리, 연락처).
- 이용약관; 판매 시 판매 약관; 환불 및 철회권 (2026년 6월 19일부터 관련 계약에 대한 온라인 철회 기능); 소비자 중재.
- 쿠키: 정책, 거부가 수락만큼 쉬운 배너, 동의 전에 추적기 없음, 각 페이지에서 선택 사항 변경 가능.
- 양식: 수집 시 정보 제공, 체크 해제된 상자, 데이터 최소화, 삭제 기간.
- 타사 도구 인벤토리 (분석, 픽셀, 채팅, CAPTCHA, AI) 및 EU 외부 전송.
- 다크 패턴, 허위 긴급 상황, 숨겨진 비용 없음 (결제 전에 VAT, 배송비, 구독료 표시).
- 허위 리뷰, 증명할 수 없는 약속이나 수치 없음.
- 이미지, 아이콘, 비디오, 글꼴 라이선스.
- 미성년자: 프랑스에서는 처리가 동의에 기반하는 경우 15세 미만은 부모 동의 필요.
- 프로모션 이메일의 수신 거부 링크가 작동; 계정 삭제 절차.
- 데이터 유출 절차 (위험이 있는 경우 72시간 이내에 CNIL에 통지).
블록 4 — UX, SEO 및 전환
- 명확한 주요 CTA, 모바일에서 엄지손가락으로 사용 가능.
- 페이지별 고유한 title과 유용한 meta-description; og:image 테스트; favicon.
- sitemap.xml, robots.txt, canonical, 비공개 페이지는 noindex; Search Console.
- 맞춤형 404 페이지에서 404 상태 코드 반환; 끊어진 링크 확인.
- 실제 문의 사항에 대한 FAQ; 약속된 기한 이행 가능; 작업 후 감사 페이지.
- 접근성: 대비, 키보드 탐색, 포커스 표시, 대체 텍스트, 200% 확대.
- 성능: LCP ≤ 2.5초, INP ≤ 200ms, CLS ≤ 0.1 (PageSpeed 모바일 및 데스크톱); 이미지 압축.
블록 5 — 게시 전 실제 테스트
- 양식: 빈 값, 유효하지 않은 값, 너무 긴 값, 서버 오류, 더블 클릭, 성공, 수신, 모바일.
- 테스트 모드로 구매 후 환불; VAT, 총액, 인보이스 정확.
- 이메일 실제 수신 확인 (가입, 재설정, 인보이스, 지원).
- 웹훅: 서명 확인, 중복 없이 재시도.
- 개인 브라우징: 동의 전에 추적기 저장되지 않음.
- 도메인 및 DNS MFA로 보호; 안정적인 버전으로 롤백 가능.
보고서 형식
- 한 줄 결론: 게시 준비 완료 / 게시 전 수정 필요 / 차단됨 (차단 항목 명시).
- 차단 항목, 그 다음 심각도별로 분류된 수정 사항과 정확한 수정 방법 및 위치.
- 확인 불가 항목과 사용자가 수행해야 할 테스트.
- 알림: 사용자가 직접 게시합니다. 법적 사항의 경우 이 점검은 전문가를 대체하지 않습니다.