방문자가 늘었다는 숫자를 보고도, 좋아하기 전에 확인해야 할 것이 있었다. G2BMarket의 중국 Direct 유입을 살펴봤을 때 그랬다. 유입 규모는 컸지만 실제로 서비스를 읽고 이용하는 흐름이라고 보기에는 참여 지표가 달랐다.

트래픽이 많아지는 것과 서비스가 성장하는 것은 같은 일이 아닐 수 있었다. 자동으로 페이지를 가져가는 요청도 서버 자원을 사용하고, 분석 지표에 섞이면 제품을 판단하는 기준까지 흐려진다.

이번 대응에서 풀고 싶었던 문제는 중국 방문자를 전부 막는 일이 아니었다. 성장처럼 보이는 숫자 안에 무엇이 들어 있는지 확인하고, 정상 이용을 해치지 않으면서 불필요한 수집 요청을 줄이는 것이었다.

16,083세션인데 참여 세션은 3건이었다

10월 7일 확인한 GA4 보고서에서, 9월 30일부터 10월 6일까지 중국 Direct 유입은 16,083세션, 참여 세션은 3건, 참여율은 **0.02%**였다. 평균 참여 시간은 화면에 0초로 표시됐다. 같은 기간 한국 Organic Search의 참여율은 60.18%였다.

이 숫자는 국적별 이용자를 평가하는 자료가 아니라, 성격이 다른 유입을 찾아보게 한 단서였다. 세션 수는 고유한 사람 수가 아니고, 화면에 표시된 평균 0초가 모든 방문의 실제 체류 시간이 정확히 0초였다는 뜻도 아니다.

참여하지 않은 세션 하나를 봇으로 분류할 수도 없다. GA4의 참여 세션은 방문의 지속 시간, 주요 이벤트, 페이지 조회 등의 조건으로 구분된다. 짧게 필요한 내용만 확인한 사람도 참여 세션에 포함되지 않을 수 있다. GA4 참여율 설명

그럼에도 큰 규모의 유입에서 참여가 지속적으로 거의 잡히지 않는다면 확인할 이유는 충분했다. 여기서부터 질문이 바뀌었다. “얼마나 들어왔나?”보다 **“이 요청들은 무엇을 하고 있나?”**를 봐야 했다.

분석 화면에서 서버의 실제 요청으로 내려갔다

GA에 중국으로 표시됐다는 사실만으로 요청 주체나 목적을 알 수는 없었다. 서버 로그에서 어떤 주소가 어떤 경로를 얼마나 요청했고, 서버가 무엇을 응답했는지 함께 확인했다.

이 과정에서는 로그 파일부터 조심해야 했다. 당시 현재 이름의 접근 로그는 비어 있었지만, 회전된 이전 파일에는 새 요청이 계속 기록되고 있었다. 비어 있는 파일 하나만 봤다면 “트래픽이 없다”는 반대 결론을 낼 수도 있었다.

10월 7일 오전의 고정된 30분 구간을 읽은 결과, 전체 HTTP 요청은 10,685건이었다. 내부 SSR 등 사설·비공개 주소 요청은 외부 국가 분석에서 제외했다. APNIC의 중국 할당 주소에 해당하는 요청은 1,532건, 기록된 IP는 495개였다.

이것도 GA의 16,083세션과 직접 맞출 수 있는 숫자는 아니다. 기간과 집계 단위가 다르고, 주소의 할당 국가가 실제 이용자 위치를 보증하지도 않는다. 다만 회사 상세와 검색 등을 여러 주소가 요청하고 있다는 정황은 서버에서도 확인할 수 있었다.

흥미로웠던 건 이 구간에서 중국 할당 주소별 고정 1분 구간의 최대 요청 수가 5건이었다는 점이다. 몇 개의 IP가 초당 수백 번씩 두드리는 모습과는 달랐다. 여러 주소에 나뉜 요청은 IP 하나의 속도만 제한한다고 모두 사라지지 않는다. 그렇다고 이 495개 주소가 전부 한 주체의 것이라고 확정할 수도 없었다.

국가 전체 대신, 확인한 패턴과 경로를 제한했다

대응은 Nginx 앞단에서 공개 요청의 범위와 빈도를 조절하는 방식으로 잡았다. 사용자 요청이 애플리케이션과 DB까지 들어가기 전에 거를 수 있도록 했다.

공개 HTML과 API의 요청 예산은 나눴다. 정상적인 페이지 하나도 여러 API를 함께 호출하기 때문이다. 모든 요청에 똑같이 좁은 제한을 걸면, 수집기보다 실제 사용자가 먼저 불편해질 수 있었다. 순간적으로 몰리는 요청은 일정 범위에서 허용하고 지속적인 초과에는 429를 반환하도록 했다. Nginx 요청 빈도 제한 문서

반복 수집이 관측된 특정 주소 대역과 정확한 브라우저 버전의 조합에는, 지정한 공개 경로에서 403을 반환했다. 별도로 특정 수집 에이전트를 표방하는 요청도 해당 범위에서 거절했다. 일반 브라우저의 이름이나 중국 주소라는 이유만으로 전체를 차단한 것은 아니다.

정상 검색봇과 링크 미리보기, 내부 SSR, 로그인·인증 콜백, 관리자와 민원 쓰기 경로도 구분했다. 자동화된 요청이 모두 해로운 것은 아니고, 회사 정보를 검색 결과에 연결해주는 크롤링도 서비스에 필요했다.

다만 User-Agent에 검색봇 이름이 적혀 있다고 그 운영 주체가 확인되는 것도 아니다. Google 역시 공식 IP 목록이나 정방향·역방향 DNS 확인으로 요청을 검증하는 방법을 안내한다. 이번에도 이름만 보고 공식 크롤러라고 인증하거나 무제한으로 허용하지는 않았다. Google 크롤러 검증 문서

차단했는데도 요청이 남아 있었다

규칙을 넣은 다음에는 차단된 요청보다 아직 통과하는 요청이 어디로 가는지를 다시 봤다. 남은 유입이 보인다고 곧바로 차단 전체가 작동하지 않는다고 판단해서도 안 됐다.

먼저 회사 API와 별도 프록시를 쓰는 공개 ML 검색 경로가 보호 범위에서 빠져 있는 것을 확인했다. 이 경로를 보완한 뒤, 실제 관측 패턴의 ML 검색 요청 3건이 모두 403으로 거절되는 짧은 운영 표본을 확인했다.

10월 7일에는 기존 패턴의 요청 439건 중 293건이 거절되고 146건은 통과한 기록이 남았다. 이 146건은 공개 상태 조회 73건과 공지 목록 조회 73건이었다. 보호 대상 검색이 뚫린 것과, 처음 범위에서 제외했던 읽기 요청이 통과하는 것은 다른 문제였다.

이 공개 읽기 경로를 추가한 뒤에도 공지 조회의 다른 fallback 경로로 5건이 통과하는 것을 발견해 한 번 더 보완했다. 로그인 관련 경로 전체를 막는 대신, 확인한 공개 읽기 동작만 좁혀 추가했다.

차단 규칙을 만들었다는 것과, 실제 요청이 지나가는 경로를 모두 확인했다는 것은 달랐다. 화면은 하나여도 뒤에서 호출하는 API와 대체 경로는 여러 개였다. 설정 파일만 보고 끝내지 않고 통과 요청을 따라가야 했던 이유다.

확인한 효과와 아직 모르는 효과를 나눴다

보완 후 단건 점검에서는 일반 메인·회사 상세·공개 상태 조회·공지 조회가 정상 응답하고, 지정한 수집 에이전트 표방 요청은 추가 경로에서 403으로 거절되는 것을 확인했다. 첫 추가 반영 직후의 자연 유입 표본에서도 상태 조회와 공지 목록 요청의 차단이 관측됐다.

설정은 좁은 범위로 적용하고 기존 파일의 변경 여부를 확인했다. 격리 환경에서는 요청 경로·방식, 내부 예외, 위조 전달 주소 처리 등을 검사했다. 운영 서버에 요청을 쏟아부어 속도 제한을 시험하거나 광고를 클릭해 결과를 만들지는 않았다.

여기까지 확인한 효과는 정한 요청을 앞단에서 거절하면서 정상 요청은 통과시키는 동작이다. 마지막 fallback 보완 이후의 장기 자연 유입 감소량, 서버 부하 개선율, GA 참여율 회복까지 측정한 결과는 아니었다.

특히 자동 탐색이 의심된다는 사실을 광고 사기로 확대하지 않았다. 분석 세션, 서버 요청, 광고 페이지뷰와 노출은 집계 단위가 다르다. GA의 개별 세션을 서버 요청과 직접 연결한 것도 아니므로, “이만큼 가짜 이용자를 제거했다”거나 “광고 수익이 회복됐다”고 말할 근거는 없었다.

허수 트래픽 대응은 숫자를 낮추는 작업이 아니었다

GA는 알려진 봇과 스파이더를 자동 제외한다고 안내한다. 그렇다고 보고서에 남은 모든 유입이 실제 사람이라는 보장은 아니다. 반대로 참여율이 낮은 유입을 전부 봇으로 지우는 것도 답은 아니었다. GA의 알려진 봇 트래픽 제외 안내

이번에는 원래 분석 자료를 지우거나 국가 전체를 수집 필터로 숨기지 않았다. 의심되는 유입을 비교해서 보고, 서버에서는 관측한 행동과 범위에 맞춰 대응했다. 차단은 서비스 자원을 보호하는 일이고, 분석은 제품을 판단할 신호를 구분하는 일이었다.

여기서 말하는 허수는 실제 이용의 성장으로 받아들이기 어려운 트래픽을 가리킨다. 모든 중국 방문자나 크롤러의 악성 의도를 확정한 표현은 아니다.

운영하면서 바뀐 것은 방문자 수를 보는 순서였다. 이제는 숫자가 늘었는지에 앞서, 어떤 유입이 어떤 페이지를 보고 실제 이용으로 이어지는지 확인하려 한다.

지켜야 하는 것은 큰 방문자 숫자가 아니라, 실제 사용자의 경험과 서비스를 판단할 수 있는 신호였다. 이번 트래픽 대응에서 가장 크게 남은 건 차단 규칙보다 그 기준이었다.

2026년 10월 4~7일의 조사·대응 기록을 바탕으로 10월 19일 정리했다. 수치는 당시 보고서와 제한된 로그 표본이며 현재 트래픽, 전체 차단률, 무효 광고 트래픽 판정을 뜻하지 않는다.