일간워스트 개장기
(이 글은 다소 어려운 기술적 개념들이 포함되어 있습니다)
모든 것은 예정에 없던 일이었습니다.
저는 한달 남짓 잠만 자다가, 슬슬 잠자는 것도 지겨워질 즈음부터 새로이 만들고싶어진 서비스를 하나씩 만들어 런칭해보겠다는 계획 정도만 가지고 있었습니다.
일주일은 쿨쿨 잤죠. 책을 조금씩 챙겨읽어볼까 정도의 생각만 하고 있었습니다. 그동안 챙기지 못했던 이 은행 저 은행 통장들과
(그놈의) 공인인증서를 정리하고자 지점 방문하고 다니고, 몇년째 썩고있던 휴면계좌에서 돈도 찾고, 새로 신세질 사무실 구경도
가보고, 그러고 있었습니다.
시절이 하수상하여 철도파업때문에 온 나라가 난리도 아니었던 주간이었습니다. 금요일 9시 뉴스에 수서발 KTX의 별도법인 면허가 발급되었다는 속보가 떴고, 트위터 타임라인에는 ‘말이라고는 도무지 듣지를 않는다’ 라는 분노의 트윗들이 쏟아지고 있었습니다. 사실 심적으로는 지지하지만 물벼락과 캡사이신 맞기는 싫어 부끄럽게도 집회에는 안나가고 있던 중이었습니다. 그러던 와중에, 난데없는 트윗 하나가 제 눈길을 끌었습니다.
이미 잘 알려졌다시피, 영양죽님의 이 드립이 모든 일의 시작이었습니다.
재밌겠다라는 생각에 저도 트윗을 남겼었죠.
설마 열명이 모일거라곤 사실 생각조차 못했습니다. 열명이 진짜로 모이고 나니, ‘민영화’ 버튼 하나 그거 뭐 대수겠냐고 생각했습니다. 어짜피 XE 로 사이트 만드는거 10분이면 끝나는데 간단히 해볼까- 잠깐 만들어 공개하면, 짤방으로 만들어져 돌아다니지 않겠나- 정도까지만 생각했습니다.
도메인 3개, ilwar.com ilwor.com ilwo.net 를 사고, 의견을 모아 wor 대신 war를 쓰기로 결정했습니다.
2시간동안 호스팅서버를 뒤져다 계정을 파고, 10분 남짓 XE를 설치하고, 제목에 ‘일간워스트’라고만 적어 사이트를 오픈했습니다.
이땐 민영화 버튼조차 넣지 않았던 때였습니다. 헌데 15분만에 접속자가 몰리며 호스팅업체의 CPU제한이 초과되어 호스팅이 정지되었습니다.
무료호스팅을 쓰고 있어서 그런가보다 하고, 유료호스팅으로 일단 옮겨보았습니다. 민영화버튼도 넣고, 일베로고를 그대로 본딴 로고도 적용하여 28일 오후 쯤 다시 XE로 사이트가 개장되었습니다.
당신들이 민주화를 공격하겠다면, 우리는 민영화를 공격하겠다
건의게시판에 게시판 증설 요청이 빗발쳤고, 조금씩 늘려갔습니다.
XE로 급조한 사이트는 이렇게 생겼었습니다.
익명의 그림장인께서 보내주신 멋진 로고를 새로 적용한 것도 이때였습니다.
(이 능력자분의 정체는 (숨어있지 않아도 될) 정권이 바뀐 이후에 크레딧에 등장하게 될 것입니다)
귀요미
그리고 30일 아침, 파이낸셜뉴스에 첫 기사가 나갔습니다.
그리고 네이버 실시간급상승검색어에 이틀 가까이 올라가 있었습니다.
네이버 분당 그린팩토리 로비에 하루종일 떠있었겠다….
실시간급상승검색어 트래픽을 얻어오기 위해 언론사들이 200여건 넘는 엉터리 기사를 쏟아낸 것도 이때였습니다. (자세한 기사 보기)
과거 국정원 트위터 알바계정을 옆으로 펼쳐두어 똑같은 트윗을 비교했었던 ‘알바 고로케’ 사이트를 나꼼수 김용민씨가 트위터에다가 소개하는 바람에 하루 방문자가 백만명 조금 넘게 찍혔던 일이 있었습니다. 그날, 창의적인 서비스든 훌륭한 기술의 플랫폼이든 그런거 다 필요없고, 유명인이 마케팅 한번만 딱 해주는게 답이었던건가 하며 잠시 시무룩했던 기억이 있습니다. 헌데, 순방문자 백만명은 진작에 돌파했고, 앞자리까지 계속 바뀌며 동시접속자까지도 폭발하고 있었으니 저로서는 황당할 수 밖에 없었습니다. 어플 개발 전문가 남자2호에게 도움을 요청해 함께 서버를 살펴보기 시작했습니다.
앞서 소개했던것과 같이, 일간워스트 사이트는 PHP 기반의 XE(xpressengine) 로 10분 남짓 설치한게 전부였습니다. 이걸로 그 어마어마한 트래픽을 버티려니 쉽지 않았죠. 유료호스팅에서도 결국 트래픽 초과로 사이트가 내려갔습니다. 결국 고민끝에, 자체서버로 돌리기로 결심했죠. 그렇게 사이트를 이전했습니다.
트래픽과 서버로드율을 직접 체크하기 시작했습니다.
서버 이전 첫날, 12월 29일, 생전 보도못한 어마어마한 트래픽양이었지만 뭐 견딜만 했습니다.
둘쨋날인 12월 30일, 그 트래픽에서 정확히 3배가 늘어났습니다. 실시간 검색어 순위에서 겨우 내려간 이후에도 트래픽은
줄어들기는 커녕 더 늘어나기만 했습니다. php-fpm 에 nginx 를 얹어 돌리는 환경이었는데, 다행히도 그나마 서버가 잘
버텨주어서 아 괜찮겠다 싶었습니다. 서버로드율은 70에서 80까지 넘어가는데도 뻗지도 않으니 원래 PHP로 짠 대용량 사이트들은
이런건가 하고 있었습니다.
서버로드율이 100을 넘어갔습니다. 그때부터 조금씩 XE가 500 에러를 토하기 시작하더군요.
대다수 커뮤니티들은 지금도 PHP로 잘만 운영되고 있습니다. 아마도 저마다의 최적화 설정값을 찾아냈으리라 생각했습니다. 접속자는 폭주하는데 이들을 상대로 최적화 테스트나 하고 있을 수는 없었습니다. 백만년만에 들여다보는 PHP 코드에, 무척 구조적으로 체계화된 XE만의 문법이 따로 있었던지라, 이걸로는 기민하게 대응할 자신이 없더군요. 조금씩 일베 유저들의 욕설 게시물도 올라오기 시작했습니다. 효과적으로 이들을 관리하려면 XE에만 의존하면 안되겠다고 판단했습니다. memcache를 버리고 redis를 붙여볼까 등등 온갖 생각을 다해보다, 그거 하면서 PHP 다시 익힐 바에야 새로 만드는게 낫겠다 싶었습니다.
PHP를 버리기로 이날 결심하였습니다. node.js를 쓸까 python을 쓸까 고민하다 그냥 빠르게 개발하기 위해 python을 선택했습니다. flask를 쓸까 django를 쓸까 고민하다가, 역시 빠르게 개발하기 위해 제일 익숙했던 django를 선택했습니다. 동시접속자가 늘 폭주하는 모 소셜커머스 사이트를 django로 만들었던 기억도 났었고요. 하루 정도면 만들 수 있겠지 라고 생각하고서, 페이스북 소셜댓글만 달아놓은 static html로 사이트를 잠시 교체했습니다.
d는 묵음입니다
# 집단 실명 일밍아웃
페이스북 소셜댓글만 달린 index.html 로 사이트가 교체되자 예기치 않은 사건들이 쏟아졌습니다. 해당 페이지에 하루동안 2천여건 가까운 덧글이 남겨졌습니다. 여기에는 일베 유저들이 본인의 프로필사진과 실명, 소속 회사나 학교를 걸고서 ‘노무현운지노무현운지’ 나 ‘김대중죽어라’, ‘전라도 새끼들’ 등의 글을 남긴 것도 포함되어 있었습니다. 페이스북 소셜댓글은 페이스북 계정으로 쓰는 글이니 당연히 실명이 나올수밖에요. 여기다가 저런 글을 써둔 겁니다.
박ㅁㅁ씨, 여기서 전체공개로 이러시면…
일베 유저였음을 드러내는 글에 ‘오빠 일베였어요?’ ‘너 일베였냐?’ 등 지인들 덧글이 마구 달리자 황급히 글을 지우는 사람들도 나타났습니다. 일베에서는 ‘야후 계정으로 새로 가입하라’ ‘페이스북 계정을 하나 더 만들어라’ 등의 의견교환이 이루어질 정도였습니다. 새로 개설한 계정으로 일간워스트 비난 덧글을 남기는 사용자도 있었지만, 페이스북의 자체 시스템에 따라 점수가 낮게 매겨져 노출 자체가 거의 되지 않았습니다. 전기방충기에 파닥파닥 타들어가는 소리가 들린다는 평가도 있더군요, ‘여기가 일베 유저가 셀프 일밍아웃하는 곳이냐’ 는 소문이 퍼져나갔습니다. 의도한건 전혀 아니었습니다. 그냥 사이트를 잠시 닫는데 커뮤니케이션 툴은 하나 두어야 하지 않을까 하여 코드를 갖다 넣었을 뿐이었습니다. 근데 이런 일이 벌어지더군요.
# 사이트 재개발
python 기반으로 게시판을 저녁동안 짰습니다. 게시판 만들기는 웹프로그래밍 서적들도 기본중의 기본 예제로 다룰 만큼 간단한 개발입니다. 그걸 하루나 걸린건 사실 제가 좀 밍기적거렸던 것도 있습니다. 모델은 어떻게 짤까. 대댓글 구조는 어떻게 만들까 등등.. 그러다 별 고민 없이 일단 나중에 뜯어고치기 쉽게만 해놓고 오픈하기로 했죠. XE쓸적 이미지, CSS, JS 등의 static resources들이 수도없이 갱신되며 쏟아졌던 기억이 있어 html이든 뭐든 모조리 minify하고 expires를 걸어 캐쉬가 적용되도록 했습니다. 모바일 마크업을 따로 구성했다간 나중에 운영하며 고칠때마다 감당이 되지 않을것 같아, 그냥 최소한의 마크업으로 짜두고 media query로 모바일/PC 가 분기되도록 했습니다. 이건 타협이었죠. 그렇게 준비한 뒤 다음날 아침 재개장하기로 했습니다.
minify는 소스보기 열여본 사람들을 멘붕에 빠트리려는게 아닙니다.
# 트롤밭의 탄생
오전에 사이트를 오픈하기 직전, 그때부터 고민이 생겨나더군요. 종전의 XE기반에서도 나타났었던 일베 유저들의 분탕질(도배, 악성댓글 등)을 어떻게 효과적으로 관리해야할까 하는 문제였습니다. 금칙어를 정해봤자 우회하면 그만이고, (노고무현운지!->노고무현운ㅈ1) 도배유저의 아이디를 막아봤자 또 가입하면 그만이고, 이메일 인증도 이메일 여러개 발급이나 임시이메일 발급서비스도 있으니 무의미하고, 캡챠 또한 거의 뚫렸다시피 했으니 소용없고… 그러다가 고민이 귀찮아져서, 그래 그러면 고민할 거 없이, “막지 말고 다만 가려버리자” 라고 결심했습니다. 일베 유저에게는 게시판을 도배한 것으로 보이지만, 본래 회원들에게는 보이지 않는 것이죠. 괜히 접속을 막아 저항심만 키우는 부작용도 없을터이니 이게 좋겠다고 생각했습니다. 그 다음부터는 ‘어떻게 분류해 가릴 것인가?’ 를 고민하기 시작했습니다.
1. 우선 금칙어로 걸러내기로 했습니다.
일베에서 주로 쓰는 표현들, ‘노고무현’(고 노무현 대통령을 지칭) ‘운지’(운지천에서 유래된, 자살을 의미하는 단어로 고 노무현
대통령을 지칭) ‘오유에서왔습니다’(오늘의유머 사이트 회원을 사칭하며 불쾌감을 유발하는 게시물을 등록할때 쓰는 표현), 그리고
각종 욕설들 씨발,씹년,지랄,개새끼,김치년 등을 금칙어로 걸어두기로 했습니다.
2. 레퍼러도 체크하기로 했습니다.
다시말해서, 일베 사이트에서 링크를 타고 들어오는 경우, 일베유저로 자동 판독하도록 하였습니다. 일반인들이 일베를 들어가지는 않을 것이고, 보통 일베 유저가 타 사이트로 퍼져나가는 식의 패턴이 보였으니까요.
(이 조치때문에 일베는 ilwar.com 라는 String을 금칙어로 지정했습니다.(링크) 레퍼러가 찍히지 않는 직접 타이핑 접속 등을 유도한 것이라 판단합니다. 어찌되었든 일간워스트 사이트를 의식한 일베 운영진 측의 조치가 있었던 것이고요.)
3. 누적 평가를 적용하기로 했습니다.
사람이 살다가 나도모르게 욕설이 튀어나올 때가 있죠. 한두번 욕설을 쓴다면 그럴 수 있겠다 치지만, 모든 글에 욕설이 담겨져있다면
그건 일베였든 일베가 아니라 하든 간에 커뮤니티에서 배제되는게 맞기에, 욕설 사용 빈도수가 누적되면 그냥 걸러내도록 했습니다.
한두번 정도는 봐주고 말이죠.
4. 그리고서, 사용자의 도움을 받기로 했습니다.
그래도 자동 분류를 뚫고 트롤들이 들어오면 어쩌지? 라는 고민을 잠시 하다, 그럼 회원들이 걸러내면 되지. 라고 생각하고 고민을
멈춰버렸습니다. 회원들이 직접 적발해내는 투표시스템에 맡겨버리기로 한것이죠. 일간워스트에 있는 ‘민영화’ 버튼의 누적 투표량이
20 이상이 넘어갈 경우 ‘트롤’로 분류되도록 했습니다. 오류가 어느정도 있을수도 있지만 트롤로 분류된 글의 주요 단어를
예비금칙어로 조금씩 담아두어 스스로 학습토록 했습니다.
사실 깊이 고민한건 아니었습니다. ‘커뮤니티에 해를 입히는 ‘트롤’ 들을 어떻게 효과적으로 막을까?’ 라는 고민을 하다가 ‘못막을테니 그냥 분류만 하고 가리자’ 라고 결정한 뒤, ‘어떻게 분류할까?’ 를 고민한게 전부였습니다.
그 시스템까지 준비한 뒤 사이트를 열었습니다. 그리고 마침…
루비 집사님께서도 관심을 보여주셨고, 당연히 일베 유저들의 도배가 시작되었습니다. 그 결과는 이러했습니다.
흐릿한 제목은 일베 유저로 분류된 글. 일반 유저에게는 보이지 않지만 일베 유저들끼리는 게시판을 장악한 것으로 보임
거의 다 잡히더군요. 만일 잡히지 않은 경우에도
회원분들께서 직접 방제해주셨습니다. 이 광경을 보며 조금은 안심하게 되었습니다.
# 이미지 도배
텍스트 위주로 방충망이 작동하자, 이번에는 ‘노알라’ (노무현 대통령 사진과 코알라를 합성한 비하성 짤), ‘김대중대통령 관’ (김대중대통령 서거 후 장례중 공개된 관) 이미지들이 무더기로 올라오기 시작했습니다. 처음에는 ilbe.com 라는 도메인 아래에 올라온 첨부파일들이 올라오고, 이후에는 타 도메인에 있는 ‘노알라’ 사진이 올라오더군요. 이 사진들 또한 탐지되어 걸러지기 시작했고, 미처 걸러내지 못한 사진들은 회원들이 투표로 걸러내었습니다. 그 와중에 희한한 사례가 하나 보이더군요. 브라우저가 느려지게끔, 일부러 이미지 height 를 몇 억 픽셀로 적어둔 것입니다.
“height:800000000000000px”
이 사례는 저에게 또다른 경고를 준 것이기도 했습니다. 본래 일간워스트에서 제공되는 위지윅에디터에는 자동으로 HTML5 문법에 맞지 않는 태그나 불필요한 Attribute를 제거하는 기능이 있었습니다. 이미지 또한 width, height Attribute를 그냥 제거토록 엄격하게 설정되어 있었는데요, 이걸 뚫고 height를 설정한 코드가 들어왔다는 건 자바스크립트 바깥 영역에서 무언가를 작동시켰다는 이야기였습니다. 다시말해 브라우저나 위지윅에디터를 거치지 않고, 코드를 서버로 SUBMIT시킨거죠. 프로그래밍 할 줄 아는 놈이 움직이거나, 프로그램이 가동되고 있다는 이야기였습니다.
# 자동글도배 프로그램 등장
자동가입/자동글도배 프로그램은 웹페이지의 FORM 구성요소를 자동으로 탐지하여 가입, 글쓰기 등을 진행하는 프로그램입니다. 수많은 블로그에 광고덧글이 달리는건 다 이들 때문이지요. 과거에는 포르노사이트 광고가 쏟아졌고, 최근에는 바카라 등의 도박사이트 광고가 돌아다닙니다. 광고문자발송 업체들과 함께 이들 프로그램을 운영하는 업체들도 지하경제의 선두주자라 할 수 있죠. 어쨌든, 이들이 쓰는 자동글도배 프로그램이 있습니다.
이 프로그램은 보통 널리 알려진 CMS의 FORM 구성요소에 의존합니다. 티스토리(테터툴즈), 다음 블로그, 과거 제로보드4나 요즘의 WordPress 등의 마크업 형식을 모두 기억하고 도배를 진행합니다. 일간워스트의 게시판은 제가 직접 짠것이기 때문에 DOM 구조도, 폼의 구성요소도 다 다릅니다. Django middleware를 그대로 가져다썼으니 csrf정도는 기본으로 생성되고요. 여기에 맞추어 자동가입/자동글쓰기 프로그램을 가동하려면 몇가지 손을 봐야 합니다.
간헐적으로 ‘테스트’ 라는 제목의 글이 올라오더군요. 아마도 자동글도배 프로그램이 곧 가동되겠구나 싶었습니다. 기술적으로야 Phantom.js와 같은 웹킷기반 API들도 있기 때문에 얼마든지 이를 뛰어넘을 수도 있지만 실제로 실행으로 옮기기엔 여간 까다로운게 아닐테니 일베의 정서를 공유하는 집단이라면 귀찮아서 안할거라 생각했습니다. 근데 생각보다 전투적이더군요. 코드가 들어올때부터 알아봐야 했습니다. 실제로 자동가입/자동글도배 프로그램 가동을 실천한 일베 유저가 나타났습니다.
스크린샷에서 보이는 바와 같이 1000001 1000002 등의 이름으로 아이디를 만든 뒤, 제한이 걸릴때마다 새로 아이디를 만들어 글을 쓰는 식이었습니다. 물론 이들의 도배는 사용자별 글쓰기 쿼터 제한에 걸려 멈추었죠. 그러자 900001 900002 등의 이름으로 또다시 도배가 시작되었습니다. 그렇지만 이들 도배글 모두 기계가 자동으로 작성했다는 태생적 한계때문에, 간단한 패턴 체크로 모두 필터링이 가능했습니다.
# 서버가동 방해 공격
그날 오후 서버에서 이상한 에러로그가 날아왔습니다. HTTP request method가 GET, POST, PUT 와 같은 표준이 아니라 엉뚱한게 들어왔다는 것이죠. 이 경우를 처리하는 항목은 만들어두지 않았기에 급히 추가해 적용해두고서, 유입되는 로그를 확인해보았습니다.
공격성 접속이 분명해보였습니다. 웹서버로 GET / HTTP/1.1 이 아닌 엉뚱한 String을 쏘아댄 것이죠. 서버 Timeout이 무척 짧았기 때문에 별 영향은 없었지만, 문제는 지속적으로 쏘아댄다는데 대한 찝찝함이었습니다. 여름에 자는데 모기가 계속 웽웽거리고, 그거 잡고싶은데 불켜서 보면 보이지도 않고, 에프킬라는 안보여서 그냥 홈매트만 켜놓고 자는데 계속 또 귓가에 웽웽거려 짜증났던 기억 다들 한번씩은 있을 겁니다. 서버 상태 확인을 위해 여러 지표들을 확인하는데 트래픽쪽에 계속 얘들이 거머리처럼 붙어있더군요.
왼쪽 미미한 수치가 평소의 트래픽이라면, 오른쪽 인위적으로 튀는 트래픽이 공격트래픽
일단 형사고발을 위해 로그부터 뽑아 저장했습니다.
두개 IP더군요.
마침 사이트를 마비시키겠다는 글이 올라와있던 것도 확인되었습니다.
예고글 1 : http://ilwar.com/humor/12636 (로그인해야 보입니다)
예고글 2 : http://ilwar.com/humor/12663 (로그인해야 보입니다)
예고글 3 : http://ilwar.com/humor/12671 (로그인해야 보입니다)
이들 글의 IP와 공격지 IP는 같았습니다.
HTTP request method가 이상한거라면 그냥 무시토록 해두었더니 별 영향은 없었습니다. TCP,SYN Flooding 공격은 진작에 자체 방화벽에서 차단되었죠. 물론 계속 들어오는 트래픽이 좀 짜증이 났습니다. 그래서 간단히 해당 IP들에 대해 네트워크 인터페이스상에서 무응답처리토록 했습니다. 공격지에서 ‘서버를 다운시키는데 성공했다’ 라고 판단했는지 트래픽 보내기를 멈추더군요. DDOS라고 하기도 민망한 이들 서버가동 방해 공격도 이렇게 막을 내렸습니다.
# 덧글 embed 코드 삽입
한편 게시판에서는 글이 아닌 덧글을 활용한 공격도 이어졌습니다. ‘노알라’ 사진에 이어, 노무현 전 대통령이나 김대중 전 대통령을 토막내는 Flash화면, 또는 노무현 대통령을 비하하거나 매일 일베에 들어간다는 노래를 담은 유투브 등이 올라오기 시작했죠. 그 이후에는 유투브가 아닌 타 도메인의 자동재생BGM swf 파일이 올라왔습니다. 그것도, 일반 회원인 것처럼 ‘좋은 글 감사합니다’ 라는 메시지 뒤에 숨은 코드를 삽입하는 방식이었죠. 이런 식으로 말입니다.
저도 좋은 정보 감사합니다. embed width=”0″ 이라니..
진중권교수가 재밌다고 트윗에 링크 걸어둔 글마다 이런 숨은 BGM 코드를 일베유저들이 심어두기 시작했습니다. 링크를 타고 글을 열면 난데없이 ‘나는 오늘도 일베를 한다~’ 등의 노래가 나오는 식이었죠. 글쓰기에는 필터링을 걸었지만, 글 수정에는 필터링을 미처 걸지 않아두었던 것을 찾아내어, 글쓰기때만 평문으로 작성하고 수정시 코드를 넣는 어뷰징 유저도 있더군요. 글 수정에서도 단어를 분류해 일베유저임을 판독토록 고쳤습니다.
URL 탐지를 회피하기 위해 302 Redirect를 제공하는 단축URL서비스를 활용하여, 단축URL로 embed 코드를 삽입하는 사례도 발견되었습니다.
네 이놈 다 알고 있다 모를줄 알았더냐!
잔머리 잘쓰는구나 싶었습니다.
한편 코드를 보니 소문자 embed 만 막는 것을 알고 대소문자를 섞어서 등록을 시도하는 것도 보였습니다. EmBeD 라니! 귀여웠지만 어쨌든 이건 제가 꼼꼼히 체크하지 못한 부분이었죠. 대소문자 모두 인식하여, 문제가 되는 BGM 작성자는 모두 일베유저로 분류토록 고쳤습니다.
이쯤 되니, 이들이 사이트 디버깅을 알아서 해주는것만 같아 짝프로그래밍하는 기분도 들었습니다.
# 삽질 : 아파치 설정 맞추기
nginx를 쓸까 잠시 고민했지만 당장은 익숙한 apache2-mod_wsgi 를 쓰기로 했습니다. 아파치 설정은 너무나도 오랜만에 해보는거라 maxclient니 minspareservers니 process, thread 니 하는 설정은 생소하더군요. 멍청하게도 이들 숫자를 무척이나 작게 설정해두었더니 어느새 사이트가 느리다는 피드백이 쏟아졌습니다. 왕창 늘렸더니 서버가 무척 빨라지더군요. 헌데 갑자기 서버로드율이 치솟을때가 있었습니다. nginx+php-fpm 돌릴 때처럼 로드율이 높아져도 괜찮나보다 싶었는데 서버로드율이 또 100을 넘어갔고, 서버가 응답을 멈출때가 있더군요.
process x thread < maxclient 여야 한다는걸 사실 그때서야 알았습니다. 제가 야매 개발자인데다 아파치설정은 백만년만에 해보는 것이었고, 대규모 트래픽 수용은 경험이 없어서(..) 가장 최적화된 설정값을 입력하고 나니 그때서야 수만여건 동시접속을 잘 처리하더군요. 몬스터를 만나보고 나서야 스킬을 익히는건 좋은건 아니지만 어쨌든 덕분에 많이 익혔습니다.
# 삽질 : 옛날 설정파일은 지웁시다
그러다 문제는 다른곳에서 또 터졌습니다.
OperationalError: (2006, 'MySQL server has gone away')
서버 장애가 줄어들자 동시접속자가 급증하였고, 때문에 DB서버 이용량도 덩달아 급증한거죠. /etc/my.cnf 의 max_connection 값을 열심히 늘렸지만 소용이 없었습니다. 그러다. 서버에 my.cnf 파일이 두개나 있는 것을 발견했습니다. /etc/my.cnf, /etc/mysql/my.cnf 두개가 있더군요. (!!!) 아마 옛날 MySQL 을 쓰다 MariaDB로 새로 깔면서 예전 파일이 남았던 모양입니다. 저는 옛날 설정파일만 죽어라 수정하고 있었던 것이었죠. 새 파일에서 설정값을 다시 넣어두니 더이상의 에러는 없었습니다.
# 완성
일베로부터의 모든 공격이 수포로 돌아갔고, 접속자폭주를 감당할 수 있는 서버환경도 갖추어졌습니다. 이렇게 일간워스트라는 신생 커뮤니티가 삐그덕거리지 않고 정상 가동되기 시작했습니다. 일베 게시판에는 직전에 본인들이 저질렀던 서비스방해행위 (도배, 코드삽입, DDOS공격 등) 에 대해 형사처벌이 정말 가능한지에 대한 문의글이 올라오더군요, 경우에 따라선 운영자에 대한 분노를 쏟아내는 글도 올라왔고요. 어찌된 영문인지 이들 게시물은 현재 모두 삭제되었습니다. 요즘 여러 송사에 휘말리는 사이트이니 그럴만도 하겠다 싶었습니다.
간간히 최근에도 도배나 합성짤 등록을 시도하는 일베 유저들이 종종 발견됩니다. 절반 넘는 비율로 자동으로 걸러지며, 나머지는 회원들이 적발해내고 있습니다.
회원들이 감당할 수 있는 정도의 적발 부담이었기에 나름 재미있는 문화도 생겨나더군요. 도대체 이런 훌륭한 짤방은 어디서 찾아낸걸까 신기했습니다.
#
일간워스트 라는 사이트를 만들게 된 것은 맨 처음 언급했다시피 무척이나 간단한 동기였습니다. 계획도 구상도 아무것도 없이, 단지 개드립의 가벼운 실현으로 10분 남짓 XE를 설치하며 시작했다가 몇백만명이 매일 들어오는 사이트가 갑자기 탄생해버렸습니다. 급작스런 유명세와 급작스런 접속자 폭주는 아마도 네이버 실시간검색어에 이틀 가까이 올라있었던 것이 가장 큰 이유였을 것이고, 그 다음으로는 아마도 ‘일베에 대항한다’ 라는 포지션 때문에 자극적인 대결 부추기기 기사들이 언론사들로부터 마구 쏟아졌던 덕택이 아니었을까 싶습니다. (자세한 기사 보기) 솔직히, 충격 고로케를 통해 언론사들의 낚시성 기사제목 달기와 실시간검색어 지향 반복송고행태를 보여주려 했던게 딱 작년 이맘때쯤이었는데, 정확히 1년 지나 이들 언론사들이 그 종전의 어뷰징 행태들을 충실히 이행하며 ‘일간워스트’라는 거대한 커뮤니티 탄생을 한마음으로 도와버렸으니 저로서는 무척이나 아이러니합니다.
3-4일 남짓 들어오는 서비스방해공격 들을 다 막아놓고 나서 둘러보니 사이트의 회원들은 이미 사이트의 컨셉도 잡고, 어투도 만들고, 저마다의 위로와 격려를 나누고, 여러 모에화작품을 만들고 있더군요. 어느새 사이트는 농촌컨셉이 되어있었고, 모두들 서로를 농민으로 부르며, 모든 게시판은 밭이 되었고, 글은 심는게 되었으며, 새글은 새싹으로, 베스트글은 오늘의 풍작이 되어버렸습니다. 정치사회 게시판은 무척이나 진지한 토론이 오고가지만 다른 게시판은 너무나도 다정다감한 분위기였고요. 남친이 일베임을 알아 어찌할 줄 모른다는 여성분의 일워 글을 일베 남친이 읽고서 다툼이 나 결국 헤어졌다는 사건글도 계속 올라오는 중입니다. 꽤 많은 일베 유저들이 일간워스트 게시판을 눈팅하며 영향을 받고 있는게 아닐까 싶습니다.
여하튼간, 예정에 없이 갑자기 제가 돌보아야 할 서비스가 하나 새로 생겨버린건데, 줄지 않고 더 늘어나기만 하는 트래픽을 보며, 결국 이게 운명이겠거니 하는 마음으로 조금씩 가꾸어볼까 합니다. 당분간은 회원들 (농민들) 의견을 들을 것이고요. 운영이 점차 안정화되면 새로운 기회도 만들어보고, 다른 많은 스타트업 서비스나 여러 단체와도 엮어보고 할 생각입니다. 물론 제가 이전에 만들었던 서비스들도 다시 고쳐볼 생각입니다. 사는게 원래 그렇죠 뭐. 여하튼, 마음에 들어하는 분들, 좋아하는 분들이 이토록 많아 저도 기쁩니다. 앞으로도 많은 응원 부탁드리겠습니다.