기록 제12호 — 정리

경쟁사가 우리 자료를 긁어 가고 있다면 — 손님은 그대로 두고 크롤링만 막는 법

2026.10 · 자체 제작 시연판 기준 · 화면은 실화면 · 읽는 시간 약 5분

요지

인명·회원·가격처럼 긁어 가기 쉬운 자료를 보여 주는 사이트는, 누가 프로그램을 돌려 몇 분 만에 수천 건을 가져가도 알아채기 어렵습니다. 그래서 「1분에 몇 건이 넘으면 막는다」를 붙이게 되는데, 막는 규칙 자체는 어렵지 않습니다. 어려운 건 막으면 안 되는 사람을 막지 않는 것입니다. 윈도우 서버(IIS)와 MSSQL에 ASP.NET으로 인명 검색 사이트를 하나 만들어 조회 차단을 직접 붙여 보고, 그러면서 알게 된 다섯 가지를 적었습니다.

하나. 운영 중인 페이지는 고치지 않고 붙일 수 있습니다

오래 운영한 사이트일수록 검색 페이지를 건드리는 일 자체가 위험합니다. 만든 사람이 바뀌었고, 어디가 어디에 이어져 있는지 아무도 다 모르기 때문입니다.

ASP.NET 사이트에는 손님이 무엇을 누르든 페이지로 가기 전에 반드시 들르는 길목이 있습니다. 감시 장치를 그 길목에 세우고, 설정 파일(web.config)에 한 줄만 넣어 연결했습니다. 검색 페이지 코드는 한 줄도 고치지 않았습니다. 문제가 생기면 그 한 줄을 빼면 원래대로 돌아갑니다.

데이터베이스도 같은 원칙입니다. 기존 테이블은 구조를 바꾸지 않고, 기준값·차단 목록·위반 기록은 새 테이블에만 둡니다. 되돌릴 때 쓰는 정리 스크립트도 처음부터 함께 만들어 둡니다.

둘. 사무실 하나가 IP 하나를 씁니다

회사·관공서·학교는 안에 있는 수십 명이 바깥에서 보면 IP 주소 하나로 보입니다. 제휴사 서버가 여러 손님 몫을 대신 조회하는 구조도 같습니다. IP만 세서 막으면 한 사람 때문에 사무실 전체가 30분씩 막힙니다.

그래서 막는 방식을 둘로 나눴습니다. 손님이 들어오는 길(개인 회원·제휴사·기관)마다 「넘으면 막기」와 「넘어도 알림만」 가운데 하나를 고르게 했고, 관리자가 예외로 둘 주소를 등록하면 그 주소는 기준을 넘어도 막지 않고 관리자에게 알림 메일만 보냅니다. 같은 주소에서 생긴 알림은 10분에 한 통으로 묶어, 메일함이 알림으로 넘치지 않게 했습니다.

조회 폭주 시연 화면. 세 줄에 각각 칸 40개가 있다. 첫 줄은 개인 회원으로 1번부터 20번까지 초록 「200」, 21번부터 40번까지 호박색 「429·1」. 둘째 줄 공공기관과 셋째 줄 예외 IP는 40칸이 모두 「200」이고 21번째 칸에 「알림」 표시가 붙어 있다.
사진 1. 세 가지 경우에 각각 40건씩 보냈습니다 — 개인 회원은 21번째부터 막히고, 기관 손님과 예외 주소는 알림만 갑니다 — 2026.10 실화면

셋. 감시 장치가 과부하를 만들면 안 됩니다

가장 쉽게 만드는 방법은 손님이 조회할 때마다 조회 기록 표에서 「이 주소가 최근 1분 동안 몇 번 조회했나」를 세는 것입니다. 그런데 그러면 조회가 몰릴수록 감시 장치가 데이터베이스를 가장 바쁘게 만듭니다. 과부하를 막으려고 단 장치가 과부하를 부르는 셈입니다.

그래서 1분 동안의 숫자는 서버 메모리에서만 세고, 24시간 동안의 숫자만 기존 조회 기록과 가끔 맞춰 봅니다.

실제로 재 봤습니다. 사무실 서버에서 같은 검색을 2만 건씩 세 번 보내니, 감시를 켜도 처리량은 1% 남짓, 응답 시간은 0.3ms 정도만 늘었습니다. 한 주소에서 2만 건을 몰아 보냈을 때는 처음 20건만 검색까지 갔고, 나머지 19,980건은 데이터베이스에 닿기 전에 막혔습니다.

그리고 감시 장치가 고장 나도 검색은 계속 돌아야 합니다. 데이터베이스가 잠깐 끊기면 직전 설정으로 계속 판정하고, 감시 장치 쪽에서 오류가 나면 그 조회는 막지 않고 그대로 보냅니다. 보안 장치 때문에 서비스가 멈추는 쪽이 더 큰 사고라고 봤습니다.

넷. 막힌 사람에게는 언제 풀리는지 알려 주십시오

막힌 화면에 「접근이 거부되었습니다」만 뜨면 손님은 사이트가 고장 난 줄 압니다. 그러면 전화가 옵니다.

그래서 안내 화면 맨 위에 다시 이용할 수 있는 시각을 크게 적고, 지금이 1차(30분)·2차(60분)·3차(24시간) 중 어디인지, 정상적으로 쓰다 막혔다면 어디로 연락하면 되는지를 같이 보여 줍니다. 접속 IP는 가운데를 가려서 표시합니다.

차단 안내 화면. 「조회가 많아 잠시 이용을 제한했습니다」 제목 아래 「다시 이용하실 수 있는 시각」과 큰 글씨의 시각, 「1차 30분 · 2차 60분 · 지금 · 3차 24시간」 단계 표시, 제한한 이유, 가운데를 가린 접속 IP, 문의처가 차례로 적혀 있다.
사진 2. 막힌 손님에게 보이는 화면 — 언제 풀리는지, 몇 차인지, 어디에 물어보면 되는지 — 2026.10 실화면

다섯. 관리자가 바로 풀 수 있어야 하고, 푼 것은 풀린 채로 남아야 합니다

예외를 아무리 잘 정해도 잘못 막히는 손님은 나옵니다. 그때 관리자가 차단 목록에서 바로 풀 수 있어야 합니다. 관리 화면에서 지금 걸린 차단, 위반 기록, 관리자에게 간 알림 메일, 손님 종류별 기준값을 한곳에서 보고, 기준값을 바꾸면 재시작 없이 바로 적용되게 했습니다.

관리 화면. 맨 위에 감시 켜짐·오늘 조회·접속 IP·지금 차단 건수가 한 줄로 있고, 아래에 「지금 걸린 차단」 표(IP·채널·2차 차단·풀리는 시각·남은 시간·해제 버튼), 「위반 기록」 표와 「알림함」 메일 목록이 나란히 있다.
사진 3. 관리 화면 — 지금 걸린 차단을 바로 풀고, 위반 기록과 알림 메일을 같이 봅니다 — 2026.10 실화면

여기서 하나를 놓쳤다가 고쳤습니다. 24시간 기준으로 막힌 손님을 관리자가 풀어 줬는데, 서버가 다시 시작된 뒤 그 손님이 첫 조회부터 다시 막히는 문제가 있었습니다. 서버는 해제 전 조회 기록까지 다시 세고 있었습니다. IIS는 기본 설정상 20분 동안 찾는 손님이 없으면 사이트 프로그램을 내렸다가 다음 손님이 오면 다시 올립니다. 그래서 이 일은 생각보다 자주 일어납니다. 지금은 풀어 준 시각을 데이터베이스에 남기고, 그 뒤의 조회만 세도록 바꿨습니다.

어디에 맡기시든, 조회 차단을 붙이실 때 이 다섯 가지는 물어보세요

  • 지금 운영 중인 페이지 코드를 고치나요. 고친다면 되돌리는 방법은 무엇인가요.
  • 사무실이나 제휴사처럼 IP 하나를 여럿이 쓰는 곳은 어떻게 하나요.
  • 조회 수를 셀 때마다 데이터베이스를 읽나요.
  • 감시 장치에 오류가 나면 검색도 멈추나요.
  • 막힌 손님은 언제 풀리는지 알 수 있나요. 관리자가 직접 풀 수 있나요.

이 다섯 가지에 답이 나오는 곳이면 어디든 괜찮습니다. 답이 흐리면, 막는 규칙만 있고 막으면 안 되는 사람에 대한 대비는 빠져 있을 가능성이 큽니다.

만들어 둔 것

막는 기준이 정확한지는 시험 32개로 확인했고(30번째는 통과, 31번째는 차단 같은 경계), 실제 서버에 조회를 보내는 시험 15개로 차단·재시작·알림 메일까지 끝까지 돌려 봤습니다. 사무실 안에서만 열리는 시연판이라 공개 주소는 없습니다. 보고 싶으시면 화면 공유로 보여 드립니다.

운영 중인 .NET 사이트에 붙일 수 있는지 봐 드립니다 — 제1창구(상담)로
카톡 상담