こんにちは。WikiDocsを運営しています。 最近、WikiDocsのサーバーを運営していて経験したAIボットとの戦い、そしてCloudflare導入後の感想を共有します。 WikiDocsは大きな規模ではありませんが、かなりのトラフィックを処理しているサイトです。ところが最近3ヶ月前からトラフィックが異常に急増し始めました。もちろん一般の訪問者であればこの上ない喜びですが、残念ながらWikiDocsのデータを긁り取ろうとするAI学習ボット(Bot)がほとんどでした。 1. 無慈悲なAIボットの公募 これらのボットは本当に無慈悲にリクエストを送りまくります。事実上DDoS攻撃と見なしても差し支えないでしょう。特にアメリカからのアクセス回数が韓国の10倍以上になります。韓国語サイトにアメリカからの訪問者が10倍も多いのは、明らかに正常ではないはずです。中には良心的なボットもいますが、同時に100個近いリクエストを飛ばす悪質なボットも存在しました。 最近、こうしたボットと様々な戦いを繰り広げてきました。初期にはNginxの設定とFail2banなどを適切に組み合わせて対応していましたが、VPNを使用して頻繁にIPを変更してアクセスする方法には為す術がなく、敗色が濃くなりました。WikiDocsがデータ学習の名店として噂でも立ったのでしょうか?最近1週間でこれらのAI学習ボットが蔓延し、サーバーが耐えきれないほどのトラフィックが継続的に流入しました。 2. 愛憎のCloudflare再導入 結局、この戦いを終わらせるために「Cloudflare」を導入しました。WikiDocsは3年前に既にCloudflareを導入した経験があります。しかし、当時速度の問題とGoogleインデックスの問題で解除していました。 Cloudflareを導入すると、無料、Pro、Businessなどどのプランを使っても韓国リージョンに接続せず海外リージョンに接続するため、速度が非常に遅くなりました。Enterpriseプランを導入すると韓国リージョンに接続して高速アクセスが可能になりますが、価格が本当に桁違いに高いです。Enterpriseプランは大手企業でなければ無理でしょう。 さらに、3年前には明確な原因は不明でしたが、Google検索ボットに問題が発生し、GoogleがインデックスしたWikiDocsのページがすべて消滅するという悲劇が発生することもありました。Google検索からの流入が途絶えたため、WikiDocsの主な収入源であるAdSenseの広告収入も激減してしまいました。 しかし、このような過去の経験の不安にもかかわらず、再びCloudflareを使わざるを得なくなりました。AIボットの攻撃でサーバーがダウンするのを防ぐための、やむを得ない選択でした。
1. 무자비한 AI 봇들의 공습
WikiDocsは「Pro」バージョンを適用しました。わざわざBusiness機能までは必要なく、DDoS防御とセキュリティ関連のルールを設定して、膨大なアメリカからのトラフィックだけをブロックすればよかったからです。 Cloudflareを適用してからは、サーバーが落ちることはなくなりました。Cloudflareが独自にブロックしてくれるものもあり、また韓国以外からのアクセスの場合には「Challenge」機能を使ってボットのアクセスを難しくしました。Googleインデックスページが消滅した過去の悪夢があるため、検索ボットはこれに該当しないように細心の注意を払いました。 3. セキュリティは解決したが、速度が問題 大きな問題は解決しましたが、また別の大きな問題が生じました。それは「速度」の問題です。Cloudflareには韓国リージョンがありますが、韓国のネットワーク利用料が高いという理由で、Enterpriseクラスでない限り決して韓国リージョンに接続させてくれないのです。そのため、ブラウザでWikiDocsにアクセスするには、正常に近くにある韓国リージョンではなく、アメリカやネットワーク利用料の安いところにわざわざ移動させられ、悲惨な速度を我慢しなければなりませんでした。 4."救世主" Argo Smart Routing、そしてコストのジレンマ
2. 애증의 클라우드플레어 재도입
その時、一筋の希望を見つけました。それがCloudflareのArgo Smart Routing機能です。この機能を入れると、訪問者がいる最も近いCloudflareリージョンに接続してくれます。つまり、韓国人は韓国リージョンに接続してくれるのです。 これで速度の問題は解決しましたが、さらに大きな悩みが生じました。それはトラフィックコストです。「Argo Smart Routing」は月額5ドルを基本に、1GBあたり0.1ドルずつ課金されます。WikiDocsが忙しい日には、1日に100GB程度のトラフィックが発生することもあります。 単純計算で1日10ドル、1ヶ月で300ドル(約45万ウォン)がかかります。さらに、AI時代にボットが闊歩すれば、さらに多くのトラフィックが発生するでしょう。「Argo Smart Routing」は、WikiDocsのような小規模サイトが負担するには本当に벅찬(벅찬=大変だ、きつい)機能なのです。さらにArgoのおかげで速度が速くなると、世界中に分布するAIボットがさらに高速でアクセスしてきて「本物の名店」になってしまう可能性もあります。 5. ドメイン分離作戦:wikidocs-cdn.net このようなアイロニーの中で悩んでいた中、WikiDocsの主要トラフィックである静的ファイルと画像ファイルをCloudflareのR2に移してサービスし、トラフィックを分担する作戦を立てました。 最初に `static.wikidocs.net` を使用してR2と接続させようとしましたが、「Argo」はドメイン単位の課金なので、これも同トラフィックとみなされ料金の爆弾を食らうことになります。そこで `wikidocs-cdn.net` というドメインを新たに購入してR2と接続しました。このようにドメインを完全に分離してしまえば、「Argo」は `wikidocs-cdn.net` のトラフィックについては課金しなくなりますから。

しかし、また問題が発生しました。今回は非常に大きな問題ではありませんでしたが、かなり気になる問題でした。静的ファイルと画像をR2に接続して `wikidocs-cdn.net` でサービスしたところ、Cloudflareの慢性的な問題である速度問題がまた発生したのです。もちろん静的ファイルにはキャッシュを適用することはできますが、完璧な解決策ではありませんでした。様々な理由で速度問題に満足できない状況になったのです。 6. 最終解決:ハイブリッド方式のCDN構築 そこでR2サービスを使わず、`wikidocs-cdn.net` を再びWikiDocsサーバーに繋ぎ、Nginxで静的ファイルと画像のみをサービスする、自作CDNのようなものを作りました。 ついに、速度も満足でき、AIボットも適切に処理できるサイトになりました。ただし、Cloudflare Pro、「Argo Smart Routing」、追加ドメイン購入などの費用が発生することになりました。静的ファイルと画像を分離してArgoの課金を減らしましたが、この部分は継続的に観察していく必要があります。 AI時代になり、コンテンツを提供するサイトはボットトラフィックのコストまで負担しなければならない世の中になりましたね。ㅜㅜ とりあえず急場はしのいだので、セキュリティ費用を無駄にしないようサービスをしっかり育てていきたいと思います。 長文をお読みいただきありがとうございました。
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 시대가 되면서 콘텐츠 제공하는 사이트들은 봇 트래픽 비용까지 감당해야 하는 세상이 왔네요. ㅜㅜ 일단 급한 불은 껐으니, 보안 비용 아깝지 않게 서비스를 잘 가꾸어 나가야겠습니다. 긴 글 읽어주셔서 감사합니다.
"AIボットとの壮絶な戦いを経て、WikiDocsがたどり着いた解決策とコストのジレンマに、運営者の奮闘と読者の感謝の声が寄せられている。"
#楽しいまだコメントがありません。