PROBLEM
크롬 + 광고 차단 확장 환경에서 홈 메인 배너 이미지가 차단되어 최상단이 빈 화면으로 노출됩니다.
원인은 이미지 경로의 ad-image 네이밍이 차단 목록에 걸리는 것으로 특정했습니다.
PROPOSAL 차단을 우회하지 않습니다. ① 차단돼도 빈 화면이 나오지 않는 대체 노출(폴백)을 먼저 깔고, ② 차단 발생 비율을 지표로 만든 뒤, ③ 근본 대응(경로 변경)은 그 지표를 보고 결정합니다.
WHY THIS ORDER 빈 화면 제거는 규모와 무관하게 가치가 있고 비용이 낮습니다. 반대로 경로 변경은 참조 시스템 파악이 필요한 큰 작업인데, 지금은 영향 규모를 아무도 모릅니다. 싼 것부터 하고, 비싼 것은 숫자를 보고 결정합니다.
크롬에서 홈 메인 배너가 하얗게 비어 보이는 현상을 발견해 원인을 격리했습니다.
시크릿 모드에서 재현(캐시 원인 배제) → 엣지에서 정상(서버·데이터 원인 배제) → 개발자 도구에서
배너 이미지 경로의 ad-image 네이밍이 광고 차단 목록에 걸리는 것으로 특정.
방치할 수 없는 이유는 두 가지입니다.
| 하지 않는 것 | 이유 |
|---|---|
| 차단 우회 (경로 즉시 변경 포함) | 차단 목록은 계속 업데이트되므로 우회는 반복 비용이 됩니다. 경로 변경 자체는 배제가 아니라 보류 — 측정된 규모가 기준값을 넘으면 3단계로 진행 |
| "광고 차단을 꺼주세요" 안내 | 이탈을 유발하는 UX이고 효과가 불분명. 도입하려면 별도 실험으로 |
| 광고 수익 정산 로직 변경 | 이 문서 범위 밖 — 폴백 콘텐츠는 광고 집행 배너가 아닌 자체 기획전으로 한정해 정산 이슈 자체를 회피 |
고정 대체 콘텐츠는 차단 패턴이 없는 별도 경로에서 서빙해야 합니다.
원본과 같은 ad-image 경로에 두면 대체 콘텐츠까지 함께 차단되어 이 기능 전체가 무의미해집니다.
이 한 가지를 제외한 구현 방식은 개발 재량입니다.
| 순서 | 노출 콘텐츠 | 발동 조건 |
|---|---|---|
| 1차 폴백 | 자체 기획전·시즌 프로모션 이미지 (별도 경로 서빙, 랜딩 링크 포함) | 배너 로드 실패 감지 시 |
| 2차 폴백 | 텍스트+CSS로 그린 프로모션 배너 — 이미지가 없어 이미지 필터로 차단 불가 | 1차 폴백 이미지마저 실패 시 |
각 항목의 인수 기준은 QA가 이 문서만으로 TC를 쓸 수 있는 수준을 목표로 했습니다. 고정은 바꾸면 목적이 깨지는 조건, 재량은 더 나은 구현이 있으면 제안 환영이라는 뜻입니다.
| ID | 요구사항 | 인수 기준 | 구분 |
|---|---|---|---|
| R1 | 배너 이미지 로드 실패 감지 — 로드 에러 또는 타임아웃 3초 (3초는 초기값, 실측 후 조정) | 차단 확장을 설치한 크롬에서 100% 폴백 전환. 정상 환경에서 오탐(불필요한 폴백 전환) 0건 | 재량 |
| R2 | 네트워크 장애와 차단의 구분 — 차단에 걸리지 않는 초소형 확인용 리소스를 병행 요청해, 확인용은 성공 + 배너만 실패 = '차단'으로 분류하는 방식을 제안 | 오프라인 상태는 '네트워크', 차단 확장 활성 상태는 '차단'으로 각각 분류됨 | 재량 — 더 정확한 판별법 있으면 그 방식으로 |
| ID | 요구사항 | 인수 기준 | 구분 |
|---|---|---|---|
| R3 | 1차 폴백은 원본 배너와 동일 크기로 교체 — 화면 밀림 없음 | 교체 시 레이아웃 이동(CLS) 측정값 0 | 고정 |
| R4 | 폴백 콘텐츠에 랜딩 링크(기획전 페이지) 연결 | 1차·2차 폴백 모두 클릭 시 지정 랜딩으로 이동 | 고정 |
| R5 | 기획전 이미지·문구·링크는 홈 운영 담당이 어드민에서 교체 가능 (배포 없이) | 운영 담당자가 어드민에서 변경 → 신규 세션에 반영 | 재량 — 기존 어드민 구조에 맞춰 |
| R6 | 2차 폴백 텍스트는 기본값을 코드에 내장 — 어드민 응답 실패 시에도 동작 | 어드민 API를 차단한 상태에서도 2차 폴백 노출 | 고정 |
| ID | 요구사항 | 인수 기준 | 구분 |
|---|---|---|---|
| R7 | 차단 감지 시 이벤트 로깅 — 시각 / 플랫폼(PC·모바일 웹) / 브라우저 / 분류(차단·네트워크, R2) / 노출된 폴백 단계 | 재현 환경에서 발생시킨 이벤트가 5개 필드 모두 채워져 적재됨 | 고정 — 필드 추가는 재량, 5개는 최소 |
| R8 | 폴백 클릭 이벤트 로깅 — 수집 주소 자체가 차단될 수 있으므로 차단 패턴 없는 주소로 전송 | 차단 확장 활성 상태에서 폴백 클릭 → 이벤트 수집 확인 | 고정 |
| R9 | 대시보드 — 홈 진입 PV 대비 차단 발생 비율, 플랫폼·브라우저별 분포 | 기존 홈 지표 대시보드에서 일 단위 조회 가능 | 재량 |
| 상황 | 정의된 동작 |
|---|---|
| 1차 폴백 이미지도 차단·실패 | 2차 텍스트 폴백 (R6) |
| 로깅 수집 주소까지 차단 | 폴백 노출은 정상 동작, 측정만 누락 — 누락률은 서버 로그와 대조해 별도 추정 |
| 배너가 느리게 로드되는 중 타임아웃 도달 | 폴백으로 교체하고, 이후 원본 로드가 완료돼도 세션 내 폴백 유지 (깜빡임 방지) |
ad-image 경로를 참조하는 시스템 목록 — 3단계(경로 변경) 규모 산정에 필요합니다. 대략의 범위만이라도| 단계 | 내용 | 완료·판정 기준 |
|---|---|---|
| 1 | 폴백 + 차단 감지 배포 (R1, R3, R4, R6) | 차단 환경 재현 테스트에서 배너 영역 빈 화면 0건 |
| 2 | 로깅·대시보드 (R7–R9) → 2주 수집 | 차단 발생 비율 산출 + 폴백 클릭률 확인 가능 |
| 3 | 측정 리뷰 → 경로 변경 착수 여부 결정 | 01에서 합의한 기준값과 실측치를 놓고 팀장님·개발·데이터가 하나의 지표로 결정 |
실패의 정의도 적어둡니다 — 2주 측정에서 차단 발생 비율이 기준값 미만이면 3단계는 하지 않는 것이 성공입니다. 폴백과 지표는 남고, 큰 공사는 근거 없이 시작하지 않은 것이 되므로.
| 대안 | 트레이드오프와 판단 |
|---|---|
| 경로 즉시 변경 (근본 대응 선행) | 성공하면 폴백이 불필요해지는 장점. 그러나 참조 시스템 규모 미상 + 영향 규모 미상 상태에서 가장 비싼 카드를 먼저 쓰는 순서가 됨. 측정 후 결정으로 보류 |
| 차단 해제 안내 노출 | 일부 서비스에서 사용하는 방식이나, 이탈 리스크 대비 회수 효과의 근거가 없음. 폴백·측정과 배타적이지 않으므로 필요 시 별도 실험으로 |
| 아무것도 안 함 | 빈 화면은 규모와 무관하게 신뢰 문제 + 측정이 없으면 이 판단 자체를 영원히 못 함 |