[제8회 ACC]"몽고DB로 실시간 빅데이터 다루려면"

일반입력 :2012/09/12 16:45

몽고DB는 분산처리기술 하둡과 함께 떠오른 NoSQL 데이터베이스(DB) 기술중 하나다. 이를 통해 대표적인 비정형데이터인 웹로그데이터를 효율적으로 다뤄 빅데이터 환경에 대응되는 실시간 대시보드를 구현하는 노하우가 공개돼 관심을 모았다.

채드 틴들 텐젠 솔루션 아키텍트는 12일 서울 잠실 롯데호텔 '제8회 ACC' 현장에서 '몽고DB를 활용한 실시간대시보드 구축'을 주제로 발표했다.

그에 따르면 몽고DB 특징은 스케일아웃 방식의 아키텍처를 갖고 있어 오라클DB같은 대형 고용량 서버가 필요 없다는 것이다. 수백개 몽고DB 인스턴스가 데이터를 잘게 나눠 여러 클러스터로 보내는 식이다. 각 서버는 소량의 데이터만 갖고 있으며 전체를 보려면 모든 시스템을 취합해야 한다. 1분에 한번씩 메모리의 자료를 디스크로 흘려보내 빠른 쓰기 작업을 구현한다. 제각각 다른 서버에 3개 카피를 두고 있어 그중 한 서버에 문제가 생겨도 자료를 보호할 수 있다. '업서트'라는 기능은 데이터가 이미 DB에 들어가지 않을 땐 삽입(인서트)를 하겠지만 이미 있다면 새로운 데이터로 갱신시키는 것이다.

틴들 아키텍트는 몽고DB 특징 소개에 이어 샘플데이터 입력 코드를 소개했다. 오리지널 이벤트 데이터는 HTTP의 GET방식으로 나오게 되는데 이를 제이슨(JSON) 형태로 객체 일련번호, 호스트 주소, 발생시각, 객체 주소, 참조용 주소, 사용자에이전트(브라우저와 운영체제) 부호 등으로 쪼개 다루게 된다.

이런 식으로 저장한 이벤트들은 동적인 쿼리를 통해 모든 로그상의 주소(URL)를 찾아낸다거나, 특정 시간범위 안의 모든 내용을 찾아낸다거나, 특정 호스트상의 개별 조건에 맞는 이벤트를 표시한다거나 할 수 있다.

틴들 아키텍트는 모든 로그를 시간순으로 통합해 애그리게이션하는 기능도 소개됐다. '프로젝트'로 묶어 일간 URL을 요청하는 코드를 예시하며 날짜중 특정 연도, 월, 일에 대한 이벤트 발생을 주소별로 집계하는 내용이었다. 간단한 프레임워크를 사용해서 결과값 역시 연월일별 히트수를 집계 가능하다는 설명이다.

이와 별개로 하둡과 비슷하게 '맵리듀스'를 사용해 일단위가 아닌 연월일'시'별 정보취합 요령도 소개됐다. DB에 저장된 문서별로 각 키값마다 발생한 히트수를 추적, 종합해 새로운 DB에 이를 저장하게 된다. 결과값은 관계형DB에 들어가는 테이블과 유사한 형식으로 생성할 수 있다. 이런 프레임워크를 통해 특정 주소에 대해 동일한 연월일에 1시간 간격으로 발생한 히트수를 출력한 결과가 제시됐다.

텐젠이 제시한 맵리듀스 프레임워크의 이점은 원래 자료인 로그를 통해 맵리듀스 작업으로 시간당 통계를 만들어내고, 그 별도로 저장된 결과를 또 맵리듀스 작업으로 일간 통계를 만들어내기도 편리하다는 점이다. 다만 이는 특정 시간대에 대한 작업을 일정주기로 수행했을 경우다. 회사는 실무 환경에 더 유용한 실시간 현황 추적 기능을 구현하는 요령을 소개했다.

관련기사

'프리 애그리게이션'이라는 작업을 통해 히트가 발생했다는 이벤트를 DB에 즉시 기록하고 '업서트' 명령어를 통해 모든 카운터에 한꺼번에 업데이트한다. 매일 특정시간에 당일 카운터를 기록하는 문서를 생성할 수 있을 것이다. 다만 한 서버에서 히트수를 발생시키는 URL 주소가 수천개라면 문서 역시 수천개를 일시에 만들어야 할 수 있다. 이 경우 DB 과부하가 걸릴 수 있는데 이를 위한 시간대를 분산시킴으로써 문제를 해소할 수 있다고 틴들 아키텍트는 설명했다.

데이터를 저장하고 취합한 뒤에는 사람이 확인할 수 있는 형태로 리포팅시키는 작업이 필요하다. 펜타호, 재스퍼소프트같은 업체의 차트 솔루션을 적용하거나 자바스크립트 기반 차트 생성 프레임워크를 쓸 수 있다. 또 아파치 하둡과의 연계도 가능하다. 로그DB를 수집하는데 '플룸'을 쓰거나 이미 하둡 프레임워크를 내부에 사용중인 기업들도 가능하다.