소프트웨어 개발자가 빅데이터 기술에 관심을 가져야 하는 이유

지난 주에 다음커뮤니케이션에서 주최하는 DevOn 의 구루와의 대담에 참여하면서 여러가지 얘기를 나누고 답변을 하다가  한가지는 얘기하고 넘어가야겠다는 생각을 하게 되었습니다.

주로 제 블로그의 글들이 빅데이터는 무엇이고 빅데이터는 무엇이 아닌지 그리고 이를 하기 위해서는 어떠한 기술들이 필요한 것 인지 등등 장황하게 설명을 늘어놓았지만 사실 빅데이터 분야에 뛰어들고 관련된 기술들을 배워서 써먹고 싶어하는 분들에게 필요한 글을 포스팅해야 하겠다는 생각이 들더군요.. 특히 소프트웨어 개발자분들에게 말이죠.

최근 신입 사원이나 경력직 지원자들의 이력서를 보다보면 Hadoop 을 해보았다든가 MongoDB 와 같은 데이터베이스를 사용해보았다든가 하는 내용들도 포함되어 있다보니 더욱 관련된 얘기를 써보는게 좋다는 생각이였습니다.

그런데 그전에 잠깐만 빅데이터에 대한 저의 견해에 대해서 다시한번 얘기하는 것이 필요할 것 같습니다.

저는 여전히 빅데이터는 대용량 데이터를 다루는 것을 기본이라고 생각하고 있습니다. 최근 기조를 보면 ‘빅’ 데이터는 예측 분석(Predictive Analytics) 을 의미하는 경우가 많이 있긴 하지만 이것 역시 적은 데이터를 가지고 하느냐 대용량의 데이터를 가지고 하느냐에 따라서 얻어내는 가치가  분명히 달라지기 때문이죠.

기존의 통계 분석을 기반으로 샘플링을 통한 추정과 예측 역시 데이터 분석과 이해를 위해서 매우 중요하고 필수적인 것이고 빅데이터 분석에 있어서 기본이 되는 것이기도 합니다. 하지만 이미 이러한 통계적 기법과 하드웨어, 소프트웨어, 데이터베이스, 데이터웨어 하우스와 같은 기술과 방법들이 있었는데 왜 최근에 빅데이터가 주목받고 있는지에 대해서 많은 분들이 다른 관점에서 설명하고 있는 것은 아닌지  곱씹어 보게 되었습니다.

빅데이터에에서 말하는 데이터 분석에 대한 접근과 기존 통계적인 접근과 데이터 마이닝에서의 큰 차이점은 (적어도 제 생각에는) 샘플링을 통한 통계적 분석과 추정이냐 아니면 전체 모수 데이터를 다루면서 보다 정확한 데이터 분석과 추정이 가능해진 것이 아닌가 합니다.

따라서 어느 규모 이상의 대용량 데이터를 적당한 비용을 들여서 분석할 수 있는 하둡(Hadoop) 이라는 플랫폼과 이를 바탕으로 하는 다양한 기술과 알고리즘은 빅데이터를 얘기할 때 빼먹어서는 안되는 것이죠. 그런데 몇몇 분들은 하둡은 데이터 플랫폼을 구성하는 하나의 구성요소로만 폄훼하시거나 그냥 간단히 기술적 요소로만 취급하시는 것을 보았습니다.

물론 무한대의 예산, 자원, 기술 그리고 시간이 있다면 기존의 데이터 플랫폼(고가의 하드웨어, RDBMS, 데이터웨어하우스, 통계분석 시스템) 을 가지고 빅데이터를 처리할 수 있을 수도 있겠죠. 하지만 현실적으로 우리는 한정된 예산과 자원을 가지고 문제를 해결해야 합니다.  그렇게 때문에 하둡, NoSQL (몽고DB 등등) 와 같은 각종 오픈소스 기반의 대용량 데이터 플랫폼, 데이터 프로세싱 엔진이 주목을 받게 된 것입니다.

국내에서 빅데이터 전문가라하시는 분들중 일부는 하둡은 그냥 데이터 플랫폼중 하나일뿐이야라고 폄훼할 수 있는 이유 중의 하나는 사실상 몇몇 도메인을 제외하고는 대부분 충분히 큰 대용량의 데이터를 다루고 있지 않아서가 아닐까요?

물론 이러한 곳도 하둡과 같은 플랫폼을 잘 활용하면 비용을 절감할 수도 있고 시간이나 자원을 절약할 수도 있죠. 하지만 여전히 이러한 빅데이터 기술을 가지고 있는 엔지니어나 데이터 분석가(요즘은 데이터 사이언티스트) 라고 하는 분들이 많지 않은 것도 중요한 이유이기도 합니다.

RDBMS로 충분히 할 수 있는데 굳이 하둡을 쓸 필요는 없으니까요.

각설하고 원래 하고 싶었던 말씀을 드리자면

빅데이터라는 것이 각광을 받으면서 하둡이나 NoSQL 이라는 것이 부각되면서 제가 흥미롭게 본것은 자연스럽게 기술적인 측면에서 분산 컴퓨팅 기술이라는 것이 부각되었다는 것입니다. 소프트웨어 개발자나 시스템 엔지니어 입장에서 보면 사실 이러한 영역은 또다른 도전이고 새로운 기술을 이해할 수 있는 좋은 기회가 생긴 것이라고 봅니다.

아 그전에 데이터의 처리 방법(프로세싱)들에 대해서 얘기를 좀 해보죠.

빅데이터라는 기술 트랜드로 인해서 자신들이 비록 대용량의 데이터를 가지고 있지도 않고 다루지 않고 있다하더라도 오라클이나 MySQL 과 같은 RDBMS에 데이터를 저장해서 처리만 하던 개발자 입장에서보면 매우 다양하게 데이터를 다룰 수 있는 기술들을 접할 수 기회가 늘어난 것 같습니다.

사실 관계형 데이터베이스가 다양한 분야에 폭넓게 쓰여진 것은 1995년 이후라고 저는 보고 있습니다. 그리고 이러한 관계형 모델의 강력함 때문에 기술을 모르는 사람들도 데이터 모델을 할 수 있고 컨설팅도 하게 되었고 이를 기반으로 개발자들이 개발하고 구현하는 정말 무시해서는 절대 안되는 것입니다만 너무나도 천편일률적으로 데이터에 대한 처리방식이 관계형데이터베이스로만 풀려고 하지 않았나 하는 것도 있지  않았나 생각됩니다.

2000년도 이후 웹기술이 발전하면서  HTML/XML 과 같은 데이터를 전달하고 저장하는 보다 유연한 semi-structure도 등장하고 최근에는  JSON 이 매우 폭넓게 사용되고 있고  많은 NoSQL 들이 이러한 데이터를 기본 데이터 형태로 담을 수 있도록 만들어지기도 했습니다. 더불어 CSV(comma-seprated value) 역시 데이터 원본 포맷으로 많이 활용되고 있습니다.

결국 빅데이터 빅데이터라고 하지만 여기에서 말하는 원본데이터들은 – 바이너리 포맷도 있긴 하지만 –  많은 경우 이러한 semi structured 데이터 포맷으로 저장되고 처리되고 있습니다. 즉 이러한 데이터를 처리하는 것에서부터 빅데이터 프로세싱이 시작을 하게 됩니다.

다시 말하지만 많은 소프트웨어 개발자들은 워낙에 LAMP(Linux, Apache Server, MySQL, PHP) 가 유행을 하면서 raw data을 직접 처리하는 것보다는 관계형 데이터베이스에 더 많이 익숙해있고  데이터를 다루는 역시 관계형 데이터베이스에 넣고 빼는 것을 기준으로 생각하게 설계들을 하고 있습니다. 최근에는 RubyOnRails 같은 것이 유행을 하면서 ORM(Object-Relational Mapping) 을 많이 사용하다보니 데이터베이스의 최적화에 대해서도 소흘해 지지 않았나 싶기도 하더군요.

하지만 빅데이터에서 언급되는 여러가지 데이터 형태와 이러한 데이터를 다루는 다양한 방식과 기술들이 많이 알려졌기 때문에 소프트웨어 개발자들이라면 한번쯤 들여다보고 만져볼 필요는 있다는 것입니다. 비록 대용량데이터를 다루지 않는다고 해도 말이죠. 대용량의 데이터를 배치형태로 처리하는 방식과 스트리밍 형태의 데이터를 실시간으로 처리하는 방식과 데이터 플랫폼 아키텍처는 틈틈히 살펴보면 시스템 아키텍쳐링을 하고 데이터 플로우를 설계하는 여러가지 지식이 쌓여지게 될 것이기 때문이죠.

더불어 Lucene/Solr 은 검색엔진이라고도 말할 수 있지만  텍스트데이터를 매우 효과적으로 처리하고 인덱싱할 수 있는 NoSQL 이라고 할 수 있는데 이러한 것을 접해보시면  관계형데이터베이스의 인덱스만으로 쉽게 해결할 수 없는 것들을 생각보다 빠르게 해결할 수 있는 방법을 배울 수 있게 됩니다.

그러면  프로그래밍 모델에 대해서 한번 애기를 해보겠습니다.

사실 이 부분은 저 역시 옛날 사람이라서 – 더 정확히 말하면 객체지향프로그래밍에 익숙해 있기 때문에 –  이쪽에 대해서는 잘 익숙하지도 않고 잘 모르지만 분산 컴퓨팅, 병렬 프로그래밍이 빅데이터쪽에서 많이 언급되면서 사용되는 언어들에 있어서도  함수형 언어들이 많이 등장하고 이에 대한 저변이 폭넓어지고 있습니다.

빅데이터의 대용량 실시간 프로세싱 프레임워크로 알려진 Storm은 JavaVM 기반의 Lisp 이라고 알려진 Clojure 로 구현되어 있고 여러가지 NoSQL 들은 Erlang 이라는 함수형 언어로 구현되어 있습니다. Spark 이라는 빅데이터 처리 시스템은 Scala 라고 알려진 역시 JavaVM 위에서 실행되는 함수형 언어로 구현되어 있죠. 구글의 Go 라는 언어 역시 병렬프로세싱을 보다 쉽게 구현하기 쉽게 되어 있다고 합니다. 참, Go는 함수형언어는 아닙니다.

제 생각에는 빅데이터가 아니더라도 앞으로 소프트웨어 개발자라면 Java , C/C++ 뿐만 아니라 이러한 함수형 언어정도는 하나 배워두어야 하지 않을까 생각됩니다.

기본적으로 이제 우리는 멀티코어, 멀티머신기반에서 데이터를 처리하는 시대에 살고 있고 심지어 클라우드 컴퓨팅 환경에서 손쉽게 다수의 VM을 운용하면서 프로그래밍을 하고 데이터를 다루는 시대에 살고 있습니다. 빅데이터를 다루는 기술이 기본적으로 이러한 분산 환경, 멀티코어를 극대화할 수 있는 기술들입니다. 앞으로 이러한 기술들이 매우 폭넓게 활용되고 적용될 것입니다.

물론 여러가지 프레임워크나 프로그래밍언어들이 이러한 복잡한 것들을 단순하게 표현하고 쉽게 구현할 수 있게 도와줄테지만 소프트웨어 개발자라면 빅데이터에서 언급되는 최근 기술에 대해서 관심을 가지고 익혀보는 것이 미래에 대한 투자라고 생각됩니다. 빅데이터 관련 프로젝트를 하지 않더라도 말이죠.

마지막으로 인공지능, 데이터 마이닝에 대한 것입니다.

의외로 이 분야는 통계학과 분들에게는 익숙한 얘기이긴 하지만 많은 이 분야의 분들은 SPSS, SAS 그리고 R과 같은 도구를 사용해서 데이터를 다루고 뽑아내는 것에만 익숙하지 않나 생각이 듭니다. 물론 아니신 분들도 많고 이쪽 역시 제 전공은 아닌지라 조심스럽긴 하지만요. 소프트웨어 개발자분들도 이 분야에 대해서 다시 한번 깊이 공부를 하는 것이 도움이 될 거라는 생각이 들더군요. 결국 데이터를 다루는 것이 컴퓨터를 사용하는 가장 큰 이유이기에 그렇습니다.

이 역시 우리가 데이터베이스를 가지고 데이터를 저장하고 가져오는 것에만 익숙해서 그런데 다양한 관점에서 데이터를 추출해서 분석하다보면 또다른 가치를 찾아내는 것은 굳이 통계학과를 나오지 않더라고 가능한 것이고 데이터를 다룰 수 있는 측면에서 본다면 소프트웨어 개발자들도 뒤떨어지지 않기 때문이죠.
요즘엔 워낙에 미국의 여러대학들이 공개한 오픈코스들을 통해서 손쉽게 이러한 교육을 받을 수 있습니다.   물론 본인들 노력이 수반되어야 하겠지만 분명히 배울데가 없어서가 아니라 배우고자 하는 의지가 약해서라는 것이 맞을 것 같습니다. 저 역시 의지박약이라 쉽지 않긴 합니다만 … ^^;

중요한 것은 이러한 측면에서 공부를 하고 관심을 가지시게 되면  되면 기존의 데이터베이스를 설계하는 측면 뿐만 아니라 데이터가 축적되었을 때를 고려해서 분석관점에서도 데이터 모델을 고려하게 되는 역량이 쌓여지지 않을까 생각됩니다. 특히 B2C 서비스(웹서비스, 모바일 앱/웹)를 개발하시는 분들이라면 꼭 한번 이쪽에 대해서 관심을 가지실 필요가 있지 않을까 합니다.

바빠서 먹고 살기도 힘든데 써먹지도 못할 거 뭐하러 배워라고 하신다면 …
노코멘트~

Advertisements
이 글은 IT 카테고리에 분류되었고 , 태그가 있습니다. 고유주소 북마크.

소프트웨어 개발자가 빅데이터 기술에 관심을 가져야 하는 이유에 1개의 응답

  1. 김우용댓글:

    혹시 학습 커리큘럼 등을 추천해주실 수 있으신가요?
    관련 도서나 배울만한 곳, 학습순서 등..
    알려주시면 많은 도움이 될 것같습니다.
    그리고 좋은 글 감사드립니다. : )

    • kimws댓글:

      아 죄송합니다. 커리큘럼까지 제가 꼼꼼히 말씀드리기는 힘들 것 같습니다. 다만 관련한 프로그래밍 언어와 하둡에 관련된 책들은 이제 국내에도 많이 소개가 되었으니 쉬운 책부터 보시면 어떨까 하네요. 최근에는 기계학습, 데이터마이닝 책들도 많이들 번역되고 소개되어 있구요. 아무래도 이쪽 책들은 정공법으로 공부하는 것이 좋다는 생각입니다.

      그밖에 스탠포드나 MIT등에 공개된 강좌들도 한번 구글로 검색해보시면 쉽게 찾으실 수 있을 것입니다.

  2. 이승환댓글:

    좋은 글 감사합니다. 키워드는 계속 들어봤었는데,
    앞으로 관심을 가지고 알아봐야겠습니다^^

  3. 손태근댓글:

    빅데이터에 대한 깊이있는 시각의 좋은 글 감사히 잘 읽었습니다.

  4. 정한모댓글:

    좋은글 감사합니다. 잘 배워갑니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중