개발 slecs

Akamai에 막힌 추천상품 크롤링 섹션을 임시 비활성화한 이유

목차

크롤러가 막혔다. 그것도 Akamai 레벨에서.

특정 추천상품 섹션이 /np/search 직링크를 통해 데이터를 긁어오는 구조였는데, 어느 순간부터 403이 꽂히기 시작했다. 단순한 HTTP 403이 아니라 Akamai CDN/Bot Manager 레이어에서 튕겨내는 거였기 때문에 헤더 조작이나 재시도 로직으로는 해결이 안 되는 종류였다.

고민을 짧게 했다. "뚫을 것인가, 끌 것인가."

왜 비활성화를 선택했나

Bot Manager 기반 차단은 성격이 다르다. 일반적인 서버사이드 403은 인증 토큰을 갱신하거나 요청 패턴을 조정하면 우회 가능성이 있다. 하지만 Akamai Bot Manager가 개입하는 순간 얘기가 달라진다. 디바이스 핑거프린팅, JS Challenge, 트래픽 패턴 분석 등 레이어가 겹겹이 쌓여 있고, 이걸 뚫으려다가 IP 블랙리스트에 올라가거나 계정 레벨 차단으로 번질 위험이 있다.

그 리스크를 굳이 감수할 만한 우선순위냐는 질문에 "아니오"가 나왔다.

추천상품 섹션은 콘텐츠 보조 역할이지 서비스의 핵심 흐름이 아니었고, 해당 데이터가 없어도 나머지 기능은 정상 동작한다. 이런 상황에서 우회 시도에 공수를 쏟는 것보다 섹션 자체를 비활성화하고 다음 대응 시점을 잡는 게 팀 입장에서 훨씬 합리적인 판단이었다.

publish_crawl.py 에서 한 일

변경은 bot/publish_crawl.py 단일 파일에서 이뤄졌다. 이 파일은 크롤링 결과를 조합해서 실제 퍼블리싱 흐름에 태우는 역할을 하는데, 해당 섹션의 데이터 수집 및 노출 로직을 조건부로 꺼버리는 방식으로 처리했다.

# before
sections = [
    fetch_general_section(),
    fetch_recommended_section(),  # /np/search 직링크 — Akamai 차단됨
    fetch_deal_section(),
]

# after
RECOMMENDED_SECTION_ENABLED = False  # Akamai 403 차단 — 임시 비활성

sections = [
    fetch_general_section(),
    *([ fetch_recommended_section() ] if RECOMMENDED_SECTION_ENABLED else []),
    fetch_deal_section(),
]

플래그 하나로 제어하는 구조로 남겨뒀다. 완전히 코드를 날리지 않은 이유는 차단이 풀렸을 때, 혹은 우회 방안이 생겼을 때 플래그만 켜서 복구할 수 있게 하기 위해서다. 기능 삭제가 아니라 기능 중단임을 코드에 명시적으로 남기는 것이 중요하다고 생각한다.

크롤러 운영에서 자주 겪는 이 패턴

외부 서비스 크롤링을 포함한 시스템을 운영하다 보면 이런 상황은 주기적으로 온다. 정리해보면 대응 옵션은 대략 이렇다.

상황 대응 전략 비고
단순 rate limit (429) 요청 간격 조정, 재시도 로직 보강 비교적 간단
헤더/UA 기반 차단 User-Agent, Referer 등 헤더 조정 단기 우회 가능
Akamai / Cloudflare Bot Manager 섹션 비활성 또는 대체 소스 탐색 우회 시도 리스크 高
IP 블랙리스트 프록시 로테이션 또는 수집 중단 구조 변경 필요

Akamai Bot Manager 수준에서 막히는 케이스는 세 번째에 해당하고, 이때 무리하게 뚫으려 하다가 IP 전체가 블랙리스트에 올라가면 다른 섹션 크롤링까지 연쇄 영향을 받는다. 국소 문제를 전체 문제로 키우지 않는 게 운영 원칙이다.

팀에 공유할 때도 이 맥락을 그대로 전달했다. "왜 비활성화했냐"는 질문이 나오기 전에 커밋 메시지와 인라인 주석에 이유를 명시해뒀다. 코드 리뷰 때 배경 설명에 시간 쏟는 것보다, 그 맥락이 코드 안에 있는 편이 훨씬 낫다.

차단 정책이 바뀌거나 대체 엔드포인트가 생기면 플래그 하나 올리면 된다. 지금은 그냥 꺼둔다.

끝.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.