'조회수 조작'에 해당되는 글 1

  1. 2009.03.20 Technical Perspective to Abusing... 조회수 조작과 이면기술에 대한 소고
** 본 포스팅은 2009년 3월 19/20일에 있었던 MBC의 100분토론 '공권력과 인권'에서 잠시 다루었던 다음 아고라의 특정게시판/게시물의 조회수 조작에 대한 소고, 및 이런 조회수 조작 어뷰징에 대한 기술적인 이야기만을 다룹니다. 일반 어뷰징, 특히 스팸,에 대한 내용은 아닙니다.
** 본 포스팅에서 제시한 내용들은 특정 업체에서 사용중인 방법에 대한 설명이 아닙니다. 대부분 상식적인 수준에서 추론된 내용이므로, 각 회사에서 실제 운영중인 방법이 아님을 미리 밝힙니다. 단순 참고용 설명이므로 오해가 없으시길 바랍니다.

 서론
 몇 일전에 경찰에서 다음 아고라의 특정 게시물의 조회수를 비정상적으로 높인 네티즌 3명을 인터넷 여론조작 협의로 압수수색을 단행했다는 기사가 나왔다 (관련 기사들). 그리고 어제/오늘 100분토론에서 고 장자연씨와 관련된 연예계의 비리/이면에 대한 충분한 준비가 되지 못한 상태여서, 위의 경찰의 과잉 선재 대응에 대해서 적법한 공권력의 투입인가 아니면 일반 국민들의 표현의 자유를 침해하는 인권유린인가에 대한 토론으로 주제를 급하게 바꾸었다. 토론의 도입부를 제대로 지켜보지 못했지만, 위의 인위적 조회수 조작에 대한 기술적인 내용을 좀 다룬 것같아서, 이와 관련된 몇 가지 이야기를 다루려고 한다.

 조회수 조작 방법
 특정 게시물의 조회수를 높인다는 의미는 일반인들에게 그 게시물이 많은 사람들의 관심을 받고 있는 거구나라는 착각을 일으킬 염려는 충분히 있다. 지난 SURS 포스팅에서 다룬 암묵적 추천의 한 형태로 조회수를 들 수가 있다. 그런 의미에서 조회수를 높인다는 행위는 어떻게 보면 기만행위일 수도 있다. 그렇지만, 본인의 다른 블로그한 포스팅에서 인위적으로 조회수를 높이는 행위는 역으로 글의 품질/랭킹요소를 낮출 수도 있음을 밝혔다. 즉, 게시물의 랭킹 모델에서 추천수, 조회수, 댓글수와 같은 숫자들이 높게 나오면 당연히 좋은/관심있는 게시물로 인정을 받을 수가 있지만, 전체 조회수에 대한 추천수의 비율과 같은 조회수 조작에 따른 상쇄효과도 있음을 밝혔다. 즉, 추천수가 증가하지 않는 단순한 조회수 증가는 글의 신뢰성에 상당한 침해를 받을 수가 있다는 요지이다. 어쨌던, 조회수 조작에 따른 효과 여부 (예, 여론조작여부, 다음에 대한 업무방해여부, 또는 표현의 자유여부) 등에 대해서는 다른 각계각층에서 다양한 의견을 개진할 것으로 보이니, 본 포스팅에서 더 깊이 다룰 필요도 없고 본인은 그런 능력도 없다. 그래서 본론인 어떻게 조회수를 조작하는가로 넘어가겠다.
 조회수 조작의 방법은 간단하고 저렴한 것에서부터 복잡한 것에 이르기까지 다양하다. 가장 간단한 조회수 조작의 방법은 게시판의 글목록에서 해당 글을 계속 클릭해서 들어가는 것이다. 이런 조작에 들어가는 시간과 노력에 비하면 효과가 적을 수가 있는 원시적인 조회수 조작방법이 아닐까 생각한다. 여기에서 조금 진화한 모델이 가족/친구 등의 지인들을 동원해서 게시물을 계속 조회하는 방법이 있겠지만, 이는 단순히 참여 인원을 증가시킨 것 외에 특별할 것은 없는 것같다. 좀 더 진화를 한다면 해당 게시물에 대한 URL을 낚시성으로 메일을 보낸다거나 다른 게시판들에 도배를 해서 일반인들이 접속하도록 유도하는 방법도 있겠다. 두번째로 생각할 수 있는 방법은, 100분토론에서도 언급되었지만 현재 페이지에서 F5키를 눌러서 계속 reloading/refreshing을 시켜서 조회수를 높이는 방법도 있다. 보통 오락기의 버튼을 계속 누르고 있으면 연사기능이 작용하는 것과 같은 원리이다. 손으로 계속 누르고 있거나 동전을 키보드에 끼워넣는다거나 아니면 단순히 무거운 물건을 키보드에 올려놓는다거나 등의 기술적인 방법은 다양할 것이다. 이런 경우 보통 조회수 로그에 일정한 패턴 (시간간격)으로 기록이 남기 때문에 조작여부를 쉽게 판단 및 방어할 수 있을 것이다. (그러나 뒤에서 말하겠지만 개념적으로 쉽게 적발가능하지만, 기술적으로 어려운 점이 있다.) 그리고, 마지막으로 가장 진보된 형태는 조회수 조작 프로그램 또는 로봇을 사용하는 방법이다. 프로그램의 작동원리는 사람들이 해당 게시물을 계속 조회한다거나 리로딩시키는 방법과 특별히 다를 것은 없다. 단지 기계가 해당 페이지를 접속한다는 점만을 제외한다면. 그리고, 이런 프로그램들의 경우 조회 간격 (시간텀)을 임의로 조절할 수 있기 때문에, 수동적인 단순 리로딩보다는 찾아내기가 어렵다. (물론 불가능하다는 것은 아니다.) 이런 조작 프로그램을 이용하는 경우에 특히 문제가 되는 것은 좀비PC와 결합될 때이다. 좀비PC란 일반 컴퓨터들이 바이러스 또는 봇에 감염되어 사용자들이 사용하지 않는 휴면 상태에서 원격컴퓨터에 의해서 제어되어 마치 좀비와 같이 행동한다고 붙여진 이름이다. (나쁜 의미에서 좀비PC로 불리지만, 학계/연구 분야에서는 중앙집중식의 슈퍼컴퓨터를 대체시키는 분산/그리드 컴퓨팅 Distributed/Grid Computing의 한 형태로 많은 연구가 이루어지고 있는 분야이다.) 좀비PC들에 의해서 분산 공격을 받는다면 조회수 조작의 파급력도 커질 뿐만 아니라, 특정 IP에서의 공격이 아니기 때문에 조작을 적발하기가 더 어려워진다. (일반적으로 DDoS로 알려진 기술과 유사점을 보인다.)

 어떻게 조회수 조작을 적발할 것인가?
 조회수 조작이 위와 같이 간단하듯이, 역으로 조회수 조작을 적발하는 것도 간단하다. 즉, 특정 위치 (IP 등으로 추적)에서 특정 게시물을 상식 외로 많이 조회하는 경우를 조회수 조작으로 협의지으면 되는 것이다. 특히 조회의 간격 (시간텀)이 거의 일정하다는 추가적인 정보가 있다면 거의 확실한 물증이다. 또는, 평소와 달리 특정시간대에 특히 많은 조회가 몰렸다면 이런 경우도 조회수 조작으로 의심을 가질 수 있다. 특히 좀비PC와 봇에 의한 조작의 경우 접속IP와 시간텀이 다양하기 때문에 앞서 제시한 방법으로 쉽게 찾아낼 수가 없다. 뿐만 아니라 최근에는 사용자들의 IP 등을 임의로 변경해주는 프로그램 또는 업체들이 있기 때문에 상식선에서 조회수 조작을 찾아내기가 더욱 힘들어진다. 그래서 특정시간대에 비정상적으로 많은 조회가 이루어진다면 이런 경우에 한해서 조회수 조작을 의심할 수가 있다. 그러나 프로그램을 사용하는 경우, 접속/조회시간을 랜덤하게 변경하고 그 간격을 넓게 잡을 수 있기 때문에 이 방법에도 분명 한계가 있다. (그러나, 시간 간격을 넓게 잡는다면 조회수 조작의 효과가 없을테니...) 접속지역 (IP 등)도 속이고 접속방법도 속이고 접속시간간격도 속이는 등의 지능화된 조회수 조작이라면... 쉽게 찾기는 어려울 듯하다. 물론, 지난 몇일, 몇주, 몇달, 심지어 몇년 간의 누적 데이터를 분석한다면 전혀 불가능한 일은 아니지만, 뒤에서도 다루겠지만 실효성이 많이 떨어질 것이다.

 조회수의 기록
 위에서 말한 조회수의 조작을 찾아내기 위해서는 사용자들의 접속/조회에 대한 기록을 남겨둬야지 가능하다. 보통 로그 Log라는 파일의 형태로 사용자들의 행동 패턴이 기록에 남는다. 특히 Apache 웹서버를 사용하는 경우, 기본적으로 apache log가 서버에 남게 된다. 그렇지만 apache log는 가장 기본적인 최소한의 로그만을 남겨놓기 때문에 향후에 활용성이 많이 떨어지는 면이 있다. 이런 파일 형태 뿐만 아니라, 서비스의 시간을 줄이기 위해서 DB에 다양한 정보를 남기는 경우도 많이 있다. 파일형태의 로그의 경우 로그를 파싱해서 유용한 정보 (예, 특정인에 의한 조회수)를 찾아내는데 시간과 비용이 많이 들어가지면, DB형태의 로그는 구조화되어있을 뿐만 아니라 DB에서 제공해주는 다양한 집계 기능으로 유용한 정보를 쉽게, 그리고 빠르게 얻어낼 수 있는 장점이 있다. 그런데, DB라는 것이 모든 정보를 무한정으로 쌓아둘 수는 없다. 파일로그보다 더 많은 디스크 공간을 차지할 뿐만 아니라, 지나치게 큰 정보 (많은 columns)를 많이 (많은 rows) 가지고 있다면 DB의 퍼포먼스를 떨어뜨려서 처음에 가졌던 DB의 장점을 상쇄시키게 된다. 그런 점에서 현재 많은 회사/서비스들에서 실시간 서비스를 위해서 모든 접속/조회 정보를 DB에 누적해서 다시 조회/가공하는 방법은 그리 많이 사용하고 있지 않는다. 대신에, DB에서는 조회에 대한 메타정보만 기록을 하고 상세정보는 파일로그에 남기는 하이브리드 형태로 운영하는 경우가 많다. 예를 들어, 특정 게시물에 누군가가 접속/조회를 하면 view_cnt와 같은 변수의 값을 +1씩 증가시켜서 DB에 기록을 남겨두고, 그 사람의 접속기록 (접속 IP, 접속시간, referer 등)의 상세기록은 파일로 차곡차곡 쌓아두는 방법을 취하게 된다. 이렇게 되면, 실시간 서비스에서는 특정 게시물의 조회수 등을 빠르게 보여주고, 문제가 될 때만 파일로그의 상세 정보를 검사해보면 된다. 이런 하이브리드 형태의 로깅 운영의 부작용으로는, 특히 조회수 조작이라는 측면에서, 누가 언제 몇 번 조회/접속했는지에 대한 정보를 실시간으로 감시하기 어렵다는 점이다. 이런 측면에서 업체들에서 (실시간) 죄회수 조작을 막는 것이 거의 불가능하다고 주장하고 있다. 물론, 또다른 형태의 하이브리드 방법을 도입해서 적발/방어가 충분히 가능하지만 더 많은 비용이 소요되기 때문에 어려움이 있을 따름이다. 즉, 조회메타정보에 대한 DB와 상세한 파일로그와 함께, 상세한 조회정보를 DB에 한시적으로만 저장해두는 방법이 있다. 추측건데, 많은 업체들이 조회수 조작이라는 부작용 때문에 이런 형태로 실시간 대응 전략을 세웠으리라 본다. ... 이 단락을 요약하면, 분석의 용이성 및 신속성의 측면에서 DB를 활용하지만 DB에 저장될 수 있는 데이터의 용량에 한계가 있고 실시간 서비스를 위해서는 최소한의 데이터만을 DB로 남기고 있기 때문에 DB로그가 조회수 조작 대응에 실효성이 많이 떨어진다.

 P.S.
 앞에서 간단히 조회수 조작을 찾는 방법에 대해서는 이미 다루었다. 특정 IP를 사용하는 경우 또는 특정시간대에 활동하는 경우에 대해서 조회수 조작을 충분히 확인할 수가 있다. 그렇지만 이런 기본적인 방법 외에도 조회수 조작 적발 또는 조작된 조회수의 원상복구 등에 대해서도 다양한 전략들이 있을 것이다. 실시간으로 조회수 조작 사용자를 찾아서 해당 IP를 막는다는 등의 실시간 대응 뿐만 아니라, 시간이 경과한 후에 아파치로그 등을 분석해서 불필요한 조작된 조회수를 DB 메타정보에서 제거하는 후속 대응도 현재 운영중인 걸로 알고 있다. 재미있는 것은 후속대응으로 인해서 때로는 조회/추천수가 감소하는 경우도 존재할 수도 있다. 업체 측에 의한 조회/추천수 조작설 등의 다양한 음모론이 펼쳐질 여지가 충분히 있는 것같다. 그리고 또 다른 음모설에 대해서 언급하자면... 현재 다음 아고라 게시판과 같은 경우 여러 대의 컴퓨터를 병렬적으로 연결시킨 분산컴퓨팅을 활용하고 있다 (일반적으로 하나의 서비스를 위해서 최소 두대의 서버가 필요하다. 분산처리 뿐만 아니라, 서비스 백업을 위해서). 그래서 각 서버별로 별도의 로그기록을 남겨두고 있기 때문에, 실시간으로 모든 서버의 로그 데이터를 취합하기란 사실상 불가능하다. 이런 분산 데이터의 싱크 문제로 인해서 조회/추천수가 일시적으로 증가/감소하는 현상이 종종 발생할 수도 있다. (게임에서 잠시 랙이 걸리는 것과 같은 현상)

 P.S.2
 아파치로그에 대한 기술적인 내용은 생략은 생략하겠다. 사용자들의 IP, 접속시간, referer 등의 정보들이 보통 남게 된다. 아파치로그에 대한 자세한 사항은 아파치 홈페이지에서 참조하기 바랍니다.