불법 크롤링
해외물류/해외이사/수출입/구매대행/배송대행 등의 사업을 목적으로 https://geek9.kr 홈페이지를 운영하고 있습니다. 처음 홈페이지의 운영을 시작했을 때는 당장은 저만 사용하고, 좀 더 다듬고, 개선해서 나중에 고객들도 사용하게 해야겠다고 생각을 했었습니다. 그만큼 홈페이지 자체도 많이 부족했고, 주문이나 문의, 매출도 거의 없었습니다. 조금씩 조금씩 성장을 해서 지금은 홈페이지를 통해서 모든 거래를 처리하고 있고, 홈페이지도 기능적으로 또 디자인적으로도 지소해서 개선을 하고 있습니다.
콘텐츠
그러다가 대략 두 달 전에 상품의 거래가 아닌 고객이 검색하고, 또 관심 있어 할 만한 상품을 geek9.kr 홈페이지에 자동으로 등록되고, 그 상품들을 소비자들의 성향에 따라 보여주고, 검색할 수 있는, 그러면서 또 지속적으로 소비자들의 검색 기록에 따라 상품이 추가되는 contents 페이지를 오픈했습니다.
크게 텍스트 기반의 콘텐츠 페이지와 해외 중고 상품을 인스타그램처럼 구경할 수 있는 GEEKTS 페이지 두 개로 구성된 페이지입니다. 임의의 상품이나 글을 올리는 게 아니고 고객들의 문의가 많거나 최근에 거래가 이뤄진 혹은 검색이 많은 상품들만 선별적으로 올리고 있습니다. 그리고 geekts의 경우에는 geek9 홈페이지에서 사용자들이 검색하거나 문의한 상품들과 관련된 상품들이 자동으로 업데이트되고 있습니다. 그런 상품들을 인스타그램처럼 깃츠 페이지에서 구경하고, 해외직구 견적을 확인할 수 있으며, 대행 신청까지 가능하게 했습니다.
이걸 무단으로 가지고 가는 놈이 있네?
그런데 얼마 전 한 고객으로부터 geek9 홈페이지가 정상적으로 동작하지 않는다는 컴플레인을 받았습니다. 사용자가 착각을 하는 경우도 있지만 실제로 홈페이지에 문제가 있는 경우도 있기 때문에 바로 확인을 했습니다. 아무래도 직접 홈페이지 개발과 운영까지 맡고 있다 보니 가끔씩 문제가 발생하는 것도 사실입니다. 반대로 직접 하기 때문에 추가/수정/개선도 바로바로 제가 원하는 만큼, 원하는 때에 할 수 있기도 합니다.
실제로 홈페이지가 정상적으로 동작이 되지 않고 있었습니다. 그래서 이유를 알아 내기 위해 흔히들 말하는 로그를 확인해 봤는데... 응??? 뭔가 많이 이상했습니다. 글로는 설명하기 어렵지만 평소에는 볼 수 없었던 패턴의 로그들이 많이 보였고, 심지어 그 이상한 패턴의 로그가 실시간으로 제 눈앞에서 계속 누적 되고 있었습니다.
오호라..........!! ㅋㅋㅋ
태어나서 처음 겪는 상황이었지만 저는 바로 무슨 상황인지 알 수 있었습니다. 어떤 놈이 제 홈페이지를 "크롤링" 하고 있었던 겁니다. 저는 크롤링이라고 표현을 했는데 별게 아닙니다. 내 홈페이지에 있는 정보들을 자동으로 빠르게 읽어가는 프로그램이라고 생각하시면 됩니다. 솔직히 제가 개발자가 아니었고, 또 제가 크롤링을 직접 해보지 않았다면 좀 더 늦게 상황 파악이 되었거나 해결까지 좀 더 긴 시간을 필요로 했겠지만 소싯적에 저도 크롤링 좀 해봤고, 회사에서 월급 받으면서도 해봤기 때문에 크롤링을 하는 패턴이나 이유, 방식 등을 제가 너무나도 잘 알고 있었습니다.
하지만 남의 사이트를 크롤링은 해봤지, 내가 운영하는 사이트를 누군가가 크롤링 하는 상황은 처음이었습니다. 짜증 나고 화나는 데 뭔가 뿌듯한...ㅎㅎㅎ 어쨌든 바로 해결을 해야만 했습니다. 어떤 놈이 내 사이트를 미친 듯이 읽어가는지라 홈페이지를 사용하는 다른 고객들이 홈페이지를 정상적으로 이용할 수가 없었고, 또 계속 이렇게 읽어가는 건 제 서버 운영비가 그만큼 늘어나는 거니까요... 실제 고객들의 트래픽이 이만큼 늘어난 거라면 즐거운 마음으로 그 비용을 지불하겠지만 어떤 놈이 개인적인 어떤 목적을 가지고 내 홈페이지에 있는 상품 정보를 기계적으로 읽어가는 건 용납할 수 없었습니다.
너무 다행이라고 생각했던 건 위에서 말한 로그라는 걸 그래도 체계적으로 남기도록 지금까지 작업을 해놓았기 때문에 상황 파악이나 해결 방법의 실마리를 찾는 건 큰 문제가 아니었다는 점입니다. 문제는 그 문제를 해결하는 것과 그때까지 그놈은 계속해서 제 홈페이지를 크롤링 하려고 시도할 거라는 점이었습니다.
CLAUDE
ㅎㅎ 전 얼마 전부터 CLAUDE를 유료로 사용하고 있었습니다. 클로드를 이용해서 contents 페이지를 개발하기도 했고요. 개발을 할 때는 챗지피티보다는 클로드가 저한테는 더 잘 맞아서 chatgpt를 해지하고 claude를 유료로 사용하고 있었습니다. 당연히 무단으로 크롤링을 하는 놈을 막기 위해서 클로드를 활용했습니다. 해결 방법은 알고 있었지만 그걸 실제로 구현하려고 하면 시간이 좀 필요했을 겁니다. 그걸 claude를 이용해서 당일에 바로 비정상적인 크롤링을 막는 코드를 홈페이지에 반영할 수 있었습니다.
구현한 코드의 내용은 아래와 같습니다.
똑같은 놈이 일정 시간 동안 몇 번 이상의 동일한 작업을 시도하면 해당 사용자의 홈페이지 사용을 막는다
해당 사용자의 정보는 내부적으로 기억하고 있어서 그 이후에는 홈페이지 사용을 차단한다
의심스러운 시도가 포착이 되면 SLACK으로 바로 메시지가 온다
굉장히 간단한 내용이지만 실제로 구현하려고 했다면 많은 시행착오와 그동안의 피해가 계속해서 누적이 됐을 겁니다. 하지만 클로드를 통해서 당일에 위와 같이 대응을 할 수 있었습니다.
로그
그리고 2주 정도 시간이 흘렀을까요?
같은 놈이 또 똑같은 시도를 해왔습니다(ㅎㅎ 다시 오기를 기다리고 있었다)
위에 말씀드렸던 것처럼 슬랙으로 메시지가 오게 해놓았기 때문에 바로 인지할 수 있었습니다. 급할 건 없었습니다. 그놈이 시도하는 거 자체는 막을 수 없지만 시도를 해본들 제 홈페이지에서 원하는 만큼 크롤링을 해갈 수 없을 테니까요. 저는 geek9 홈페이지가 정상적으로 운영되고 있는 걸 확인하고, 로그를 통해 그놈이 하는 짓을 느긋하게 감상했습니다.
로그라는 말은 많이 들어 봤을 겁니다. 하지만 확 와닿지는 않을 수 있습니다. 제가 개발자로 일할 때도 그랬으니까요. 하지만 내 걸 직접 개발하고, 그 개발한 걸 실제로 서비스 하면서 돈을 벌고 있다면, 근데 그게 위와 같이 이상한 놈 때문에 지장을 받고 있다면 그때 비로소 로그라는 거의 필요성과 중요성을 알게 될 겁니다.
로그를 통해 그 이상한 놈이 하는 짓을 유심히 지켜봤습니다.
저번과 마찬가지로 제 홈페이지에 있는 수 천 개의 상품을 자동으로 읽어 가기 위해 1초에도 수 십 번을 제 홈
페이지에 반복적으로 동일한 작업을 시도했습니다. 당연히 제 홈페이지는 그 이상한 놈의 접속을 사전에 막았습니다. 그렇기 때문에 홈페이지가 정상적으로 동작을 할 수 있었던 거고요. 흔히들 말하는 디도스 공격이 이런 겁니다. 짧은 시간에 엄청나게 많은 트래픽을 유발하면 그 홈페이지가 과부하로 멈춰 버리는 거....
그렇게 몇 번 재시도를 하더니 안되는 걸 알았는지 그 이후로는 재시도조차 하지 않았습니다. 적어도 그날 당일은 큰 문제 없이 제 의도대로 잘 넘어갔습니다. 하지만 저도 크롤링을 해봤기 때문에 압니다. 그 녀석은 우회하는 방법을 찾아내서 다시 제 홈페이지의 데이터를 가지고 가기 위해 시도할 수 있습니다. 제가 그랬던 것처럼...
무료한 일상에 신선한 자극
개인적으로 굉장히 재미있고, 흥미로운 시간이었습니다. 물론 빠르게 잘 해결되었기 때문일 수도 있지만 내가 이런 일에 당사자가 될 거라고는 한 번도 생각을 못해봤기 때문입니다. 누군지도 모르는 누군가가 크롤링을 해가고 싶을 만큼의 데이터가 내 홈페이지에 있다니...!!! 나름 제가 조금은 잘 하고 있다는 칭찬을 받은 거 같은 기분이 들었습니다. 물론 갓 개발 공부를 시작한 아무것도 모르는 초짜 개발 입문자가 공부 목적으로 하필 제 홈페이지를 크롤링 한 것일 수도 있습니다. 그것까지는 로그를 통해서도 알 수는 없고, 향후에 그놈이 또 제 홈페이지에 크롤링을 시도해왔을 때 그 방법이나 결과를 봐야지만 판단할 수 있을 거 같습니다. 목적이 어떻든 간에 저는 계속 사업을 해야 하니 계속 막아내 줘야겠죠.