데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

[빅데이터 실시간 처리와 분석] 왜 실시간인가

데이터 이야기
작성자
dataonair
작성일
2015-06-09 00:00
조회
7546


한국 스파크 사용자 모임 운영자 이상훈이 말하는 빅데이터 실시간 처리와 분석

1. [빅데이터 실시간 처리와 분석] 왜 실시간인가



안녕하세요. 오늘부터 빅데이터 실시간 처리와 분석에 대해서 이야기할 한국 스파크 사용자 모임의 운영자 이상훈입니다.

dbin_402.jpg

그림 1. Apache Spark 로고

먼저 한국 스파크 사용자 모임은 저보다 더욱 훌륭하신 두 분과 함께 작년부터 운영중인 커뮤니티로 (https://www.facebook.com/groups/sparkkoreauser/) 스파크와 관련된 정보를 나누고 있습니다. 스파크는 위의 그림에 표기된 Lightning Fast Cluster Computing라는 표어를 위시한 대용량 인메모리 처리/분석 오픈소스입니다. 표어에서 말하고 있듯이 스파크는 분산 환경에서 번개처럼 빠른 처리를 해주기 위해 만들어졌고 최근 국내외에서 많은 주목을 받고 있습니다.

처음 이 연재를 기획했을때는 ‘빅데이터 실시간 처리와 분석’이 아니라 단순히 ‘실시간 빅데이터 처리와 분석을 위한 스파크 이야기’였습니다. 그러나 막상 원고를 준비하다보니 ‘실시간 빅데이터 처리와 분석’을 위해서 꼭 이야기해야하는 내용들이 계속 떠올라서 약간 방향을 바꾸기로 하였습니다.

이 연재에서는 분산환경에서 매우 빠른 처리를 해준다는 스파크가 무엇이고 어떻게 활용하면 되는지에 대한 내용만을 다루지 않습니다. 모든것에 앞서서 첫번째 시간에서는 빅데이터 시대에서 말하는 실시간은 무엇이고 왜 실시간이어야 하는지에 대한 당위성을 이야기하겠습니다. 빅데이터 실시간 처리와 분석을 위해서는 빠르게 처리해주는 스파크 하나만으로 모든 것이 해결되는 것이 아니라 데이터 수집이 선행되어야 하고, 메시지 큐, 저장, 시각화 등 다양한 기술이 필요합니다. 이때 필요한 오픈소스에 대해서도 소개하도록 하겠습니다. 그리고 실시간 분석을 위한 알고리즘에 대한 이론적인 내용과 분석방법을 일부 소개하고, 일반적인 실시간 분석과 배치성 빅데이터 분석과 혼합하여야 하는 분야도 설명 하겠습니다.

참고로 저는 국책 연구소에서 수 년간 기계학습과 관련된 업무를 했었고, 현재 회사에서는 약 5년전부터 업무상 흔히 말하는 빅데이터 분야에서 일해오고 있습니다. 그래서 분산 컴퓨터에서 하루 십여 테라바이트(Tera Byte) 이상의 로그 수집과 처리를 하고, 페타단위(Peta Byte)의 데이터를 가져와서 분석하는 업무도 수행하였습니다.

그러나 빅데이터라는 단어는 항상 부담스럽습니다. 3V이나 단순히 대용량을 기준으로 빅데이터를 설명하기도 하지만 여전히 빅데이터는 모호한 것 같습니다. 그리고 앞으로 이야기할 알고리즘들은 기존에도 존재하던 것들이 많고, Deep Learning과 같이 정말 새로운 것을 제외하고는 빅데이터 분석이 아니라는 이야기도 하곤 합니다. 그러나 이러한 논란은 일단 접어두고 일정 수준 이상의 사이즈나 복잡도를 가진 데이터의 처리와 분석을 하기 위한 오픈소스와 간단한 이론을 설명하는 연재라고 생각해주시면 감사하겠습니다.



*용어 설명
- 3V : 메타그룹(현재 가트너)의 애널리스트 더그 레이니(Doug Laney)는 2001년 그의 연구 보고서[6]와 관련 강의에서 데이터의 급성장에 따른 이슈와 기회를 데이터의 양(volume),
데이터 입출력의 속도(velocity), 데이터 종류의 다양성(variety)이라는
세 개의 차원으로 정의하였다. <출처 : 위키피디아>



dbin_403.jpg

그림 2. 3V < 출처 : http://www.rosebt.com/blog/data-veracity>

실시간 컴퓨팅의 정의

실시간 컴퓨팅에 대해서 위키 피디아를 참고해보면 “사용할 수 있는 자원이 한정되어 있는 상황에서 작업 수행이 요청되었을 때, 이를 제한된 시간안에 처리해 결과를 내주는 것을 말한다. 즉, 작업의 요청에서 수행결과를 얻기까지의 시간적인 제약이 존재하는 시스템으로 그 제약의 엄격함에 따라서 경성 실시간 시스템과 연성 실시간 시스템으로 나뉜다.”라고 되어있습니다. 여기에서 경성 실시간 시스템(hard real-time system)은 무기, 우주선, 철도 등 아주 작은 시간까지 오차없이 지켜져야 하는 시스템을 의미하고 연성 실시간 시스템 (soft real-time system)은 데이터 통신, 게임, TV 등 주로 미디어와 같이 실시간으로 전달되어야 하나 일정 프레임이 밀리더라도 큰 문제는 없는 시스템을 의미합니다.

그러나 흔히 빅데이터 분석 환경에서 말하는 실시간 시스템은 이와는 다릅니다. 물론 최대한 시간 오차가 없어야겠지만 대략적으로 예상되는 시간내에 응답이 있으면 실시간 시스템이라고 부르는 경우가 많습니다. 빅데이터가 그렇듯이 약간은 마케팅적인 요소가 들어간 용어라 일부는 진짜 실시간의 의미와는 맞지 않을 수 있고 사람마다 기준이 조금씩 다르기도 합니다. 또한 빅데이터 분석 환경에서 의미하는 실시간 시스템은 아래와 같이 크게 2가지로 나눌 수 있습니다.

dbin_404.jpg

두 가지는 시간에 의해서 near real-time real-time으로 구분되었습니다. 좀 더 명확히 구분하면 단순히 속도가 빠른 처리와 streaming 처리로도 나눌 수 있는데 이 내용에 대해서는 다음 글에서 자세히 다루도록 하겠습니다.



왜 실시간인가

지금까지 간략하게나마 실시간이 무엇인지 알아보았고 이제 왜 실시간이어야 하는지 알아보도록 하겠습니다. 지난 10여년간 데이터 프로세싱 분야는 많은 발전이 있었습니다. 특히 하둡(Hadoop)은 대용량 데이터를 분산저장 및 분석함에 있어서 혁명을 가져 왔습니다. 현재는 하둡이 일반화된 기술이 될 정도로 해외 주요 IT 기업에서는 대부분 사용하고 있고 국내에서도 많은 기업 및 기관에서 사용하고 있습니다. 그러나 하둡은 배치성 처리에 특화된 시스템으로 실시간 처리에는 적합하지 않습니다.

예를 들어 사용자가 자신의 웹 페이지에 특정 시간대의 페이지 뷰 데이터를 요청한다고 생각해보면 됩니다. 클러스터가 잘 갖추어져 있으면, 사용자가 많더라도 테라바이트(TB) 단위의 데이터를 수 분 혹은 수십 분 안에 처리해 결과를 얻을 수도 있습니다. 그러나 단순히 자신의 웹 페이지의 페이지 뷰를 확인하기 위해 어떤 사용자가 수십 분을 기다릴 수 있을까요 게다가 본인뿐만 아니라 수만 명의 페이지 방문객이 동일한 상황에 직면하게 된다면 어떻게 될까요 위와 같이 매번 요청이 있을 때마다 전체 데이터를 읽어서 맵리듀스(Mapreduce)한다는 것은 매우 비효율적인 일입니다. 그래서 많은 기업이 중요한 데이터에 대해 맵리듀스로 매시간 혹은 매일 미리 모든 페이지의 페이지 뷰를 구하는 것과 같은 배치 작업을 수행합니다.

그래서 나온 것이 최근 이슈가 되고 있는 SQL On Hadoop 계열이나, 인메모리 처리, 컬럼 방식의 분산 DB 등이 있습니다. 분명 이 오픈소스들은 메모리 활용과 색인 등을 통해 빠른 응답성을 지원하지만, 필요할 때마다 대용량 데이터를 처리해야 하는 것은 마찬가지입니다. 또한 아래 그림처럼 일반적으로 인바운딩 데이터가 계속 들어오는 것이 아니라, 배치성으로 들어오므로 최신의 데이터로는 분석을 하지 못합니다.

dbin_405.jpg

그림 3. 배치영역과 실시간(streaming) 영역

데이터가 Continuous, unbounded, rapid, time-varying stream와 같은 속성을 가진다면, 기존의 맵리듀스와 같은 패러다임이 아닌, 새로운 접근이 필요합니다. 이와 같은 데이터들은 여러 분야에서 많이 발생하지만, 위와 같은 한계 때문에 상당수가 버려지고 있었습니다. (물론 HDFS의 출현에 따라 저장 비용 자체는 많이 낮아져서 저장은 충분히 가능합니다). 예를 들면 네트워크 모니터링, 센서 데이터, 통화 내역(Telecom Call Record), 웹 로그, 생산관리 데이터, 금융 데이터 등이 이에 해당합니다. 나열된 로그 예제에서는 최근 주목 받고 있는 IoT(Internet of Things) 관련 분야나 빅데이터 적용이 한창인 통신회사, 앞으로 전망이 높은 제조 분야 등이 포함됩니다.

다시 페이지 뷰 이야기로 돌아와서 새로운 접근법에 대해 고민해 보겠습니다. 만약에 정의돼 있는 비즈니스 로직에 대한 결과를 요청할 때마다 작업을 수행하는 것이 아니라, 클릭할 때마다 웹 페이지의 카운트를 늘려 나간다면, 전체 데이터를 매번 접근할 필요도 없고 거의 실시간(real-time)으로 사용자의 요청에 응답할 수 있지 않을까요 그래서 스트리밍(streaming) 으로 데이터를 계속 처리하기 위한 오픈소스들이 나오기 시작했고 그 대표적인 예로는 storm, spark streaming 등이 있습니다. 이것에 대해서는 차후에 자세히 알아보겠습니다.

지금까지 설명에서는 실시간과 배치를 구분하여 설명하였으나, 그 경계에 위치한 데이터 처리와 분석 방법도 있습니다. 또한 실시간은 꼭 고성능 컴퓨팅을 이야기하는 것은 아닙니다. 다음 시간에는 이것을 설명하기 위하여 시간과, 데이터 사이즈까지 고려하여 분류한 In-Memory Processing, Streaming Processing, Interactive Processing, Indexed Storage, Batch Processing 등에 대해서 알아보고 이에 해당 하는 오픈소스를 소개하도록 하겠습니다.



출처 : 한국데이터베이스진흥원

제공 : DB포탈사이트 DBguide.net