0.
퇴물 개발자가 새로운 기술을 배운다는 건 늘 어렵다. 새로운 기술 트랜드가 뭔지도 모르지만 과거에 조금 배웠던 지식을 가지고 현재를 평가하는 오류를 범하기도 하기 때문이다. 따라서, 앞으로 적는 내용은 IT를 잘 모르는 오래된 퇴물 개발자의 넋두리이자 불평이며 잘못된 내용에 대해선 겸허히 수용하여 내용을 수정할 생각도 있으니 비난보다는 코멘트를 주시면 편이 더 좋을 듯 하다.
1.
꽤 오랫동안 빅데이터에 대해 생각을 했지만, 빅데이터 기술들이 왜 필요한 지에 대한 의문이 한동안 내 머리에 있었다. 그러다 올해 들어 빅데이터 기술이 왜 필요한지 그리고 어떻게 봐야 하는 지에 대한 방향이 생겼다고 할 수 있다. 몇 년 전 ‘빅데이터’란 용어를 접했을 때도 그랬지만 지금도 이걸 제대로 설명을 해주는 사람이 많지 않았고 기술적인 측면에서 이를 논리적으로 설명해주는 사람도 없어서 쉽게 이해가 안되었는데, 어쩌면 다들 이미 알고 있어서 나처럼 이런 의문을 가지고 있는 사람이 적어서 그럴지도 모르겠다.
2.
찬찬히 생각을 해보니 빅데이터 기술들은 최근에 폭발적으로 성장하고 있는 데이터를 다루기 위한 기술들이다. 데이터가 폭발적으로 증가한다는 것은 어떠한 의미인지 몰랐는데 이를 10여년쯤 대규모 데이터를 처리하면서 얻은 교훈을 적용해보니 이해가 되기 시작했다.
기존의 데이터베이스 기술은 ‘쓰기’보다는 ‘읽기’에 최적화된 기술이고 이를 위한 이른바 정규화와 구조화를 한다. 그러한 예를 대표적으로 보여주는 것이 정규화(normalization)과 SQL(Structured Query Language)인데, 엄청난 규모의 데이터를 처리하는데 있어 정규화나 구조화는 상당히 문제가 많다. 앞서 이야기 한 것처럼 쓰기보다 읽기에 중점이 맞추어진 기술이다 보니 일정 규모 이상의 데이터를 쓰는데 한계가 발생할 수 밖에 없고 이를 개선하기 위해서 등장한 것이 이른바 빅데이터 관련 기술이라고 본다.
3.
그렇다면 쓰기 중심으로 데이터 저장공간을 바꾸기 위해서 해결해야 이슈는 무엇일까? 데이터의 특징을 선행적으로 예측할 수 있었던 때와 다르게 이를 예측하기 어려우니 정규화는 어느 정도 포기를 해야 하고, 구조화도 일정 부분 포기를 해야 한다.
정규화가 생겨난 배경을 생각해보니 과거 상대적으로 비싼 하드웨어 중 하나였던 보조 기억 장치의 저장 공간을 줄임과 동시에 읽기에 최적화된 방법을 찾는 과정에서 나온 것인데, 지금처럼 하드웨어를 값싸게 구매할 수 있다면 상대적으로 정규화 과정을 줄일 수 있다고 생각하게 된다. 하지만, 구조화의 경우에는 약간 다른 것이 무조건 구조화를 없애게 되면 쓰기에는 매우 효율적이긴 하겠지만 데이터를 읽는데 많은 시간이 소요될 수 있기 때문에 적당한 타협점을 찾아야 하고, 그 중 가장 적합한 자료구조가 해시 테이블이라고 본 것이다.
4.
빅데이터 기술을 데이터베이스 관련 기술과 비교하여 본다면 도서관 정리와 열람과 비슷하지 않을까 한다. 예를 들어 도서관을 꾸밀 때 과거의 경우에는 분류표에 의해서 책을 구분하고 열람카드를 이용해서 책을 찾았다고 하면, 일단 대략적으로 책을 그룹핑하여 구분한 뒤 열람카드 없이 책을 찾아가는 방식이라고 할 수 있다. 따라서, 과거와 달리 데이터를 저장하는데 시간을 절약할 수 있는 반면 데이터를 찾는데 상대적으로 시간이 걸리게 되는데 이를 해결하기 위한 방안으로 고민한 것이 소팅, 병렬 처리. 샤딩, 인메모리 처리 방식이라고 할 수 있다.
5.
소팅이 필요한 이유는 처음 데이터를 저장할 때 일정한 규칙에 의해 분류하지 않았기 때문이기도 하지만, 정렬이 되지 않을 경우 데이터를 일정 규칙에 의해 나누어 병렬처리 하기 매우 어렵기 때문이다. 따라서, 빠르게 데이터를 정렬할 수 있는 방법이 필요로 하게 되고 이러한 소팅 과정이 빨리 끝날 수 있어야만 전체 처리 시간이 감소하게 된다.
데이터를 병렬 처리하는 것은 과거에 비해 매우 저렴해진 다수의 하드웨어를 이용하는 기술이기도 하지만, 실제 응용을 하기 위해서는 네트워크 최적화에 기술이 필요하고 요즘 회자되고 있는 SDN(Software Defined Networking)과도 밀접한 관계가 있다. 네트워크 장비라는 것이 실은 dedicated server의 일종이라는 점을 생각해본다면 병렬 처리에 네트워크 최적화에 더불어 SDN에 대한 동적 운영 능력이 필요하다는 점을 고려해 볼 필요가 있을 것 같다.
6.
대규모 데이터에서 데이터를 빠르게 읽어 내기 위해서는 자주 사용하는 데이터를 가급적 캐시 메모리에 보관하고 있거나 아니면 아예 메모리에 올려놓는 방식을 생각해 볼 수 있는데, 이 때 필요한 기술이 샤딩과 인메모리라고 본다. 아직까지 메모리는 비싼 하드웨어라 제약이 많긴 하지만 과거에 비해 상당한 많은 데이터를 올릴 수 있을 정도로 비교적 싸진 상황이고, 데이터들을 활용할 때 Hot, Warm, Cold 상태를 가진다는 것을 생각해보면 현재의 기술만을 가지고도 어느 정도 속도를 내면서 처리가 가능하지 않을까 한다.
7.
또 다른 마지막으로 생각해 볼 수 있는 영역이 데이터 아카이빙인데 많은 데이터를 가지고 있다고 하더라도 다 사용하는 것이 아닌 만큼 사용 빈도에 따라 저장 매체의 성격을 달리하며 저장을 할 필요가 있다고 본다. 데이터의 손실을 어느 정도 감안한다면 복잡한 아키텍처를 고려할 필요는 없겠지만, 그렇지 않은 경우라면 보존을 위해 몇 개의 백업 본이 필요할 수도 있고 이럴 경우 값싼 저장매체로의 이동과 재이동에 대한 자동화 방안과 더불어 무손실을 보장할 수 있는 아키텍처 설계가 필요할 듯 하다.
8.
마지막으로 생각해 볼 수 있는 영역이 최적화, 실시간 처리, 머신 러닝인데, 최적화 영역은 빅데이터 기술을 이용해서 각 변수에 대한 분산과 평균 그리고 첨도와 왜도를 구할 수만 있다면 R이나 Excel을 가지고 최적화 할 수 있는 방안을 찾을 수 있다고 보여진다. 실시간 처리를 위해서는 패턴(Pattern)에 기반한 이벤트를 발생 시키기 위한 CEP(Complex Event Processing)이 매우 중요한데, 이 패턴을 구하기 위해서는 전문가 시스템(Expert System)이나 이보다 더 발전시킨 머신 러닝 기술이 필요할 것이라고 본다.
9.
여담이긴 하지만 과거 IDC(Intrusion Detection System)이 등장했을 때도 제대로 된 패턴이 없었고 지금 금융권에서 한참 화두가 되고 있는 이상 금융거래 탐지 시스템(FDS, Fraud Detection System)도 머신 러닝은 고사하고 제대로 된 전문가 시스템도 갖추고 있지 못한 실정이라고 본다. 빅데이터 기술에 앞서 선행 기술에 대해 무시한 결과이기도 하거니와 이를 체계적으로 다를 수 있는 인력 양성을 못한 문제가 복합적으로 만나서 만들어진 현상인데, 당분간 국내에서 이 문제를 해결할 수 있는 업체가 등장한다는 건 어불성설이지 않을까 한다.
글 : 5throck
원문 : http://goo.gl/Z3RRUF
You must be logged in to post a comment.