안녕하세요. 위키독스를 운영하고 있습니다. 최근 위키독스 서버를 운영하면서 겪은 AI 봇들과의 전쟁, 그리고 클라우드플레어 도입 후기를 공유해 봅니다. 위키독스는 큰 규모는 아니지만 꽤 많은 트래픽을 감당해내고 있는 사이트입니다. 그런데 최근 3개월 전부터 트래픽이 비정상적으로 급증하기 시작했습니다. 물론 일반 방문자라면 더할 나위 없이 기쁜 일이겠지만, 아쉽게도 위키독스의 데이터를 긁어 가려는 AI 학습 봇(Bot)들이 대부분이었습니다.
1. 무자비한 AI 봇들의 공습
이 봇들은 정말 무자비하게 요청을 해 댑니다. 사실상 DDoS 공격이라고 봐도 무방할 듯합니다. 특히 미국 쪽에서 접속하는 횟수가 한국의 10배 이상 됩니다. 한국어 사이트에 미국 접속자가 10배나 많다는 건 분명 정상은 아닐 것입니다. 개중에는 양심적인 봇들도 있지만, 동시에 100여 개의 요청을 날리는 악성 봇들도 존재하더군요. 최근 이러한 봇들과 다양한 전투를 치렀습니다. 초기에는 Nginx 설정과 Fail2ban 등을 적절히 섞어서 대응하고 있었는데, VPN을 사용하여 수시로 IP를 바꾸며 접속하는 방식에는 속수무책이라 패색이 짙어졌습니다. 위키독스가 데이터 학습 맛집으로 소문이라도 났는지 최근 1주일 새 이러한 AI 학습 봇들이 창궐하여 서버가 감당하기 힘든 트래픽이 지속적으로 유입되었습니다.
2. 애증의 클라우드플레어 재도입
결국 이 싸움을 끝내기 위해 '클라우드플레어'를 도입했습니다. 위키독스는 3년 전에 이미 클라우드플레어를 도입한 경험이 있습니다. 하지만 당시 속도 이슈와 구글 인덱싱 문제로 해제했었죠. 클라우드플레어를 도입하면 무료, 프로, 비즈니스 등 어떤 플랜을 쓰더라도 한국 리전으로 붙지 않고 해외 리전으로 연결되어 속도가 너무 느렸습니다. 엔터프라이즈(Enterprise) 플랜을 도입하면 한국 리전에 붙어 빠른 접속이 가능하지만, 가격이 정말 넘사벽으로 비쌉니다. 엔터프라이즈 플랜은 대기업이나 가능하리라고 봅니다. 게다가 3년 전에는 명확한 원인은 밝혀지지 않았지만, 구글 서치 봇에 문제가 생겨 구글이 인덱싱한 위키독스 페이지들이 모조리 사라지는 참사가 발생하기도 했습니다. 구글 검색 유입이 끊기다 보니 위키독스의 주 수입원인 애드센스 광고비도 수직 하락하게 되었고요. 하지만 이러한 과거 경험의 불안함에도 불구하고 다시 클라우드플레어를 사용할 수밖에 없게 되었습니다. AI 봇들의 공격으로 서버가 다운되는 것을 막기 위한 어쩔 수 없는 선택이었습니다.

위키독스는 '프로(Pro)' 버전을 적용했습니다. 굳이 비즈니스 기능까지는 필요하지 않았고, DDoS 방어와 보안 관련 규칙들을 설정하여 방대한 미국 쪽 트래픽만 막아주면 되기 때문입니다. 클라우드플레어를 적용한 후로 서버가 죽는 일은 없어졌습니다. 클라우드플레어가 자체적으로 막아주는 게 있고, 또 한국 이외에서 접속할 경우에는 '챌린지(Challenge)' 기능을 사용하여 봇들의 접속을 어렵게 했습니다. 구글 인덱싱 페이지가 없어졌던 과거의 악몽이 있기 때문에 서치 봇들은 여기에 해당되지 않게 꼼꼼하게 작업했습니다.
3. 보안은 해결했지만, 속도가 문제
큰 문제가 해결되었지만 또 다른 큰 문제가 생겼습니다. 바로 '속도' 문제입니다. 클라우드플레어 한국 리전이 있지만 한국의 망 사용료가 비싸다는 이유로 엔터프라이즈 급이 아닌 이상 절대로 한국 리전으로 붙여주지 않더군요. 그래서 브라우저로 위키독스에 접속하려면 멀쩡하게 가까이 있는 한국 리전 대신 미국이나 망 이용료가 싼 곳으로 왔다 갔다 하게 만들어, 처참한 속도를 감수해야만 했습니다.
4. 구원투수 Argo Smart Routing, 그리고 비용의 딜레마
그때 한 줄기 희망을 발견했습니다. 바로 클라우드플레어의 Argo Smart Routing 기능입니다. 이 기능을 켜면 접속자가 위치한 가장 가까운 클라우드플레어 리전으로 연결해 줍니다. 즉, 한국 사람은 한국 리전으로 연결해 주는 것입니다.

이걸로 속도 문제는 해결되었지만, 더 큰 고민이 찾아왔습니다. 그것은 바로 트래픽 비용입니다. "Argo Smart Routing"은 월 5달러 기본에, 1GB당 0.1달러씩 과금이 됩니다. 위키독스가 바쁜 날에는 하루에 100GB 정도 트래픽이 발생하기도 합니다. 단순 계산으로 하루에 10달러, 한 달이면 300달러(약 45만 원)가 나옵니다. 더구나 AI 시대에 봇들이 활개 치면 더 많은 트래픽이 발생하게 될 것이고, "Argo Smart Routing"은 위키독스 같은 작은 규모의 사이트가 감내하기에는 정말 벅찬 기능인 것입니다. 게다가 Argo 덕분에 속도가 빨라지면 전 세계에 분포한 AI 봇들이 더욱 빠른 속도로 접속하게 되어 '진정한 맛집'이 될 수도 있고요.
5. 도메인 분리 작전: wikidocs-cdn.net
이러한 아이러니 속에서 고민하던 중, 위키독스의 주요 트래픽인 정적 파일과 이미지 파일들을 클라우드플레어의 R2로 옮겨 서비스하여 트래픽을 분담하는 작전을 세우게 되었습니다. 처음에 `static.wikidocs.net`을 사용하여 R2와 연결시키려고 했는데, "Argo"는 도메인 단위의 과금이어서 이 또한 동일 트래픽으로 간주되어 요금 폭탄을 맞게 됩니다. 그래서 `wikidocs-cdn.net`이라는 도메인을 새로 구입하여 R2와 연결했습니다. 이렇게 아예 도메인을 분리해 버리면 "Argo"는 `wikidocs-cdn.net` 트래픽에 대해서는 과금하지 않게 되니까요.

하지만 또 문제가 생겼습니다. 이번에는 아주 큰 문제는 아니지만 꽤 신경 쓰일만한 문제였습니다. 정적 파일과 이미지들을 R2에 연결하여 `wikidocs-cdn.net`으로 서비스했더니, 클라우드플레어의 고질 문제인 속도 문제가 또 발생한 것입니다. 물론 정적 파일들에 캐시를 적용할 수는 있지만, 완벽한 해결책이 아니었습니다. 여러 가지 이유로 속도 문제에 만족하지 못하게 된 상황이 된 것이죠.
6. 최종 해결: 하이브리드 방식의 CDN 구축
그래서 R2 서비스를 쓰지 않고, `wikidocs-cdn.net`을 다시 위키독스 서버에 물려 Nginx로 정적 파일과 이미지만 서비스하는 자체 CDN 비슷하게 만들었습니다. 드디어, 속도도 만족스럽고 AI 봇들도 적절히 처리할 수 있는 사이트가 되었습니다. 다만 클라우드플레어 프로, "Argo Smart Routing", 추가 도메인 구입 등의 비용이 발생하게 되었습니다. 정적 파일과 이미지들을 분리하여 Argo 과금을 줄였지만, 이 부분은 지속적으로 관찰해야 할 것 같습니다. AI 시대가 되면서 콘텐츠 제공하는 사이트들은 봇 트래픽 비용까지 감당해야 하는 세상이 왔네요. ㅜㅜ 일단 급한 불은 껐으니, 보안 비용 아깝지 않게 서비스를 잘 가꾸어 나가야겠습니다. 긴 글 읽어주셔서 감사합니다.
"Users are super grateful for Wikidocs and the operator's detailed battle with AI bots, with some spicy theories thrown in!"
#재밌는아직 댓글이 없습니다.