1. 개요
모바일 브라우저 환경에서 DoEatFit 서비스의 PWA “홈 화면에 앱 추가” 팝업이 먹통이 되는 치명적인 장애가 터져 나왔습니다. 분석 결과, 앱의 메타데이터 명세서 역할을 하는 정적 파일인 /manifest.json 요청을 Cloudflare의 인공지능 기반 봇 탐지(Bot Management) WAF 엔진이 악의적인 크롤러 봇으로 오탐하여 403 (Forbidden) 에러를 강제로 반환하고 있었습니다. 전체 도메인 보안을 훼손하지 않으면서, 오직 매니페스트 경로 단 한 곳에만 한정하여 봇 방화벽 검사를 우회해 주는 극소 영역 우회(Granular Bypass) 커스텀 규칙을 Cloudflare WAF에 수립하여 장애를 깔끔하게 해결했답니다. 이 과정과 구체적인 원인 분석, 해결책을 상세히 정리해 드립니다.
2. 핵심 내용
2-1. 🚨 문제 상황과 원인 분석
- 문제 현상:
- 모바일 웹 기술의 꽃은 단연 브라우저 설치를 통해 바탕화면 아이콘으로 단 1초 만에 네이티브 앱처럼 구동하는 PWA(Progressive Web App) 스펙이지요.
DoEatFit을 PWA 규격에 완벽히 맞추어 서비스에 적용하고 론칭했으나, 일부 스마트폰 환경에서 “홈 화면에 앱 추가” 배너 및 팝업 자체가 아예 나타나지 않는 현상이 인입되었습니다. - 개발자 도구의 콘솔 패널과 네트워크 트래픽을 열어 조사한 결과, PWA 설치 규격을 검사하기 위해 첫 마운트 시 백그라운드로 로드해야 하는
/manifest.json정적 자산 경로가 지속적으로403 Forbidden상태를 반환하며 차단당하고 있었습니다. 메타데이터 명세서 파일을 읽어 들이는 것부터 실패했기에 브라우저는 PWA 자격 요건 미달로 최종 판정하고, 설치 팝업 전체를 비활성화해 버린 상태였습니다.
- 모바일 웹 기술의 꽃은 단연 브라우저 설치를 통해 바탕화면 아이콘으로 단 1초 만에 네이티브 앱처럼 구동하는 PWA(Progressive Web App) 스펙이지요.
- 원인 분석:
- 도대체 왜 개인 정보도 없는 얌전한 정적 JSON 리소스 파일에 403 차단 딱지가 달라붙었는지 Cloudflare 보안 분석(Security Analytics) 탭과 헤더 정보를 정밀 진단했습니다.
graph TD A["브라우저 백그라운드 스레드"] -- "/manifest.json 비동기 요청" --> B{"Cloudflare WAF"} B -- "특이한 헤더 패턴 & 익명 CORS 스펙" --> C["Bot Management AI 엔진"] C -- "오탐: 악성 크롤러 봇 침입 감지!" --> D["403 Forbidden 차단 발동"] D --> E["브라우저: PWA 설치 및 서비스워커 가동 거부"]
- Web App Manifest 백그라운드 요청의 특수성: 브라우저(특히 WebKit 및 Chromium) 엔진들은 PWA 관련 자산인
manifest.json이나sw.js를 비동기 백그라운드 스레드에서 가져올 때, 일반 유저가 마우스로 정적 링크를 밟아 웹 서핑을 할 때와는 아주 상이한 헤더 데이터 구조(sec-fetch-mode,sec-fetch-dest: manifest, CORS 익명 요청 등)를 실어 보냅니다. - Cloudflare Bot Management (WAF)의 정적 파일 크롤링 오진: 이 도메인의 앞 단을 수호하고 있던 Cloudflare Bot Management WAF 엔진은 이 날것의 기이한 백그라운드 비동기 요청 스트림을 감지하자마자, 사람이 하는 정상 브라우징이 아닌 ‘악의적인 스크래핑 봇이 보안 구역에 직접 침입하여 소스 코드를 빼 가려는 불법 침투 행위’로 과도하게 오탐하여 칼같이 차단을 집행했던 것이었습니다.
2-2. 💡 우아한 해결책 및 구현 명세
- 해결 방안:
- 보안 초병이 너무 부지런히 일한 나머지 시스템의 인프라 정맥을 끊어놓은 꼴이었습니다. 이를 해결하기 위해 WAF 방화벽 감도를 일괄 낮추는 위험천만한 타협은 배제해야 했습니다.
- 그 대신, 보안 위협에 노출될 기밀 데이터가 전무한
/manifest.json파일의 안전한 공용 성격을 착안하여, 오직 해당 단일 파일 경로에만 국한해 봇 탐지를 우회해 주는 ‘극소 영역 우회(Granular Bypass)’ 커스텀 규칙을 수립했습니다.
- Cloudflare WAF Custom Rule 명세:
- 규칙 이름:
PWA Manifest WAF Granular Bypass Skip - 트래픽 매칭 조건 (Expression):
- 필드:
URI Path - 연산자:
equals - 값:
/manifest.json
- 필드:
- 취할 작업 (Action): Skip
- Skip할 대상 세부 설정:
- ☑
Bot Management(오탐 차단 바이패스) - ☑
WAF Managed Rules(기타 매니지드 규칙 탐지 바이패스)
- ☑
- 이렇게 세밀하게 핀포인트로 규칙을 주입하게 되면,
/api/auth/login이나 중요 회원 정보 API 같은 진짜 칼끝이 향하는 영역의 봇 차단 보안 장벽은 100% 동일하게 철벽 보존하면서도, 안전한 공용 관문인 매니페스트 통신만 깨끗하게 뚫어낼 수 있게 됩니다.
- 규칙 이름:
2-3. ✅ 결과 검증 및 모던 오픈소스 라이브러리 검토
- 결과 검증:
- 매니페스트 복귀 완료: WAF Skip 정책을 배포하고 브라우저 강력 새로고침을 통해 네트워크 패널을 감시한 결과,
/manifest.json파일의 HTTP 응답 상태가200 OK로 즉시 정상 복구됨을 입증했습니다. - 홈 화면 설치 기능 정상화: 모바일 사파리 및 안드로이드 크롬 기기로 사이트에 진입하자마자, 하단에서 “홈 화면에 이 앱 추가” 안내 배너와 팝업 제스처가 부드럽고 수려하게 점등되는 성과를 거두었습니다.
- 서비스 워커(
sw.js) 연계 가동: 매니페스트 관문이 안전하게 열리자, 브라우저가 비로소 PWA 자격을 인정하여sw.js(서비스 워커) 백그라운드 프록시를 정상 적재했습니다. 이로써 오프라인 캐싱과 고도화된 백그라운드 데이터 동기화를 향한 차세대 웹앱 고도화의 주춧돌을 안전하게 놓을 수 있었습니다.
- 매니페스트 복귀 완료: WAF Skip 정책을 배포하고 브라우저 강력 새로고침을 통해 네트워크 패널을 감시한 결과,
- 추천 오픈소스 라이브러리 검토:
- Cloudflare WAF Custom Rules
- 평가: 도메인 전체에 광범위한 침투 방어막을 얹어주면서도, 정규식 매칭을 통해 특정 API나 경로에 한정하여 세련되게 우회(Skip)를 구성해 줄 수 있는 퍼블릭 클라우드 최고의 수문장 인프라 솔루션입니다.
- Workbox (by Google Chrome team)
- 평가: PWA 서비스 워커를 날것으로 코딩하면 수백 줄에 걸친 캐시 제어 루프와 라이프사이클 관리에 버그가 나기 십상입니다. Workbox 라이브러리를 도입하면 ‘NetworkFirst’, ‘CacheFirst’, ‘Stale-While-Revalidate’ 같은 고급 오프라인 캐싱 아키텍처 전략을 단 몇 줄의 설정만으로 무장애 이식할 수 있어 PWA 고도화 단계에서 필수로 검토해 보실 것을 적극 권장합니다.
- Cloudflare WAF Custom Rules