데이터 분산처리에 관하여
필자는 컴퓨터 관련 지식을 전공하지 않았다. 그래서 컴퓨터 아키텍처나 데이터 관리에 대해서는 매우 제한된 지식만을 가지고 있다. 하지만 데이터 분석을 하다보면 어쩔 수 없이 직면하게 되는 기술적 문제가 있는데 이는 크기가 너무 커서 내 노트북에서 로딩조차 되지 않는 데이터들이 있다는 것이다. 편의상 앞으로는 이정도 규모의 데이터들을 빅데이터라고 칭하도록 하겠다.
본문은 필자가 세미나 수업시간에 읽게된 논문의 내용을 이해한 것을 바탕으로 빅데이터 처리기술에 대해서 컴퓨터 지식이 없는 데이터 분석 입문자의 입장에서 서술하도록 하겠다. 논문의 제목은 <Data-intensive applications, challenges, techniquesand technologies: A survey on Big Data>이고 저자는 C.L. Philip Chen , Chun-Yang Zhang. Science Direct라는 저널에서 찾아볼 수 있다.
일단 빅데이터의 문제를 이해하기 위해서 알아야 할 것은 컴퓨터는 연산장치와 저장장치가 분리되어 있다는 것이다. CPU에서 처리한 자료 또는 처리해야 할 자료는 다른 어딘가에 저장이 되어있어야 한다. 컴퓨터 전원이 켜져있을때에는 이를 RAM이라는 휘발성 메모리에 저장하면 되는데 전원이 꺼지면 RAM에 존재하는 데이터는 날아가버린다. 그래서 지속적으로 저장이 필요한 데이터는 보통 디스크라고 하는 저장소에 저장하게 된다.(컴퓨터를 켜면 들리는 '윙'하는 소리는 아마 디스크가 회전하는 소리일 것이다)
이것이 무엇인 문제란 말인가? 문제는 데이터들이 이렇게 연산장치와 저장장치 사이를 반복적으로 왔다가 갔다가 해야 한다는데에 있다. 대형마트 안으로 사람들이 마구잡이로 달려드는 그림을 상상해보자, 마트는 순식간에 마비가 될것이다. 마트가 제대로 운영되려면 사람들은 계산대 앞에서 줄을서서 한명씩 빠져나가야 한다. 데이터 역시 마찬가지이다. 연산장치에서 제대로 계산이 이루어지려면 데이터는 줄을서서 차례차례 들어가고 나가야 한다. 그러면 어쩔 수 없이 데이터가 들어가고 나가는데 소요되는 시간이 증가한다. 물론 이마져도 보통 사람들이 하는 작업에는 큰 불편함이 없이 빠른시간에 완료된다. 하지만 어마어마하게 많은 데이터들이 이렇게 왔다갔다가를 반복해야 한다면 어떻게 될까? 이것이 컴퓨터가 가진 물리적인 한계이다. (연산장치와 저장장치의 구분이 없어지는 기술이 연구되고 있다고 하는데, 이는 컴퓨터 기술의 패러다임 자체를 바꾸는 엄청난 기술이라고 한다. 어쩌면 필자가 지금것 열심히 설명하고자 한 컴퓨터의 물리적 한계가 어느 미래 세대의 아이들에게는 마치 우리 세대가 책으로만 접한 애니악의 탄생처럼 멀게만 느껴지는 날이 오게 될지도 모르겠다)
데이터는 엄청난 속도로 늘어나고 있다. 그 중심에는 스마트폰의 사용, IOT, SNS서비스 등이 있다. 하지만 데이터가 엄청나게 늘어난다고 해도 이 데이터들 처리되기 위해서는 줄을 서서 기다려야 한다는 사실에는 변함이 없다. 데이터의 규모가 이슈가 되기 전까지 사람들은 DBMS를 발전시켜서 엄청나게 효율적인 방법으로 데이터를 처리해왔다. 하지만 데이터의 규모가 이슈가 되면서 많은 사람들은 이것보다 더 효율적인 방법을 생각해야만 했다. 그래서 탄생한것이 분산 컴퓨팅의 개념이다. 분산처리란 말 그대로 한사람이 해야 할 일을 여러명에게 시킨 후 각자가 만든 결과물만을 조합하는것이다. 백지장도 맞들면 낫다고, 그저 그런 컴퓨터도 여러대가 힘을 합치면 슈퍼컴퓨터 못지않은 컴퓨팅 파워를 만들어 낼 수 있다. 분산처리 방법으로 가장 많이 알려져 있는것이 아마 구글의 맵리듀스일 것이다. 자료를 Map하고 Reduce한다는 개념인데, 본질적인것은 위에서 설명한 개념과 크게 다를 것이 없다.
빅데이터의 패러독스 중 하나는 처리해야 할 데이터는 점점 더 늘어나는데 분석가들에게 주어지는 시간은 점점 더 짧아진다는 것이다. 그래서 빅데이터 처리를 위해서는 이러한 분산 컴퓨팅을 아주 효율적으로 활용해야 할 필요가있다.
아마 빅데이터와 항상 연관되어 출현하는 단어가 바로 Hadoop일 것이다. 그렇다면 Hadoop은 무엇인가? 필자의 컴퓨터 기술 관련지식은 매우 얕기 때문에 지식의 엄밀성을 따지자면 틀린 설명일 수도 있겠지만 개념적인 이해를 돕기 위해서 필자 나름대로 해석해보자면 다음과 같다. 첫째, 하둡은 사람들이 분산 컴퓨팅을 하기 편하도록 만들어진 하나의 프레임워크이다. 프로그래밍 언어를 이용해서 데이터를 관리 할수도 있지만 그 불편함이 어마어마하기 때문에 SQL을 쓸 수 밖에 없는 것 처럼 분산 컴퓨팅을 하기 편하자고 만든것이다. 둘째, 하둡은 플랫폼이다. 하둡 하나만으로는 목적을 이룰 수 없다. 그 위에서 동작하거나 혹은 하둡과 호환되는 다른 툴들을 많이 설치해야 한다. 셋째, 하둡은 효율적이라고 말하기는 힘들다. 하둡은 아주 큰 규모의 데이터를 처리하는데 유용하기는 하지만 작동의 효율성이나 작업의 편리함이 뛰어나다고 볼수는 없다.
분산컴퓨팅을 통해 우리는 곳곳에 나눠져 생성되고 저장된 데이터를 효율적으로 불러오거나 처리할 수 있다. 총 연산량에는 변함이 없지만 여러대의 컴퓨터나 나눠서 계산을 하니 시간도 더 단축된다. 하둡이라는 프레임워크는 이러한 작업을 조금 더 편리하게 도와줄 수 있다. 그리고 하둡 위에는 목적에 따라 작동하는 여러가지 툴 들이 있다. 대표적으로 DB관리의 HIVE, 스트리밍처리에 Spark, 머신러닝의 Mahout 등이 있다.
빅데이터 처리와 관련된 컴퓨터 기술 이슈에 대해서는 우선 여기까지만 정리하겠다. 다음 단계로 넘어가 더욱 Deep하게 공부할 수 있을 정도의 화두는 던졌다고 생각한다. 필자의 전공지식이 아니기 때문에 이렇게 설명하는것이 매우 조심스럽다는 것을 다시한번 독자 여러분께 강조드리며 앞으로 기회가 생기면 하둡을 이용해 진행한 데이터 분석 프로젝트에 대해서도 소개 해보고자 한다.