대용량 데이터 처리

2009. 4. 28. 11:56사는게 뭐길래/Data & Intelligence


제가 회사에서 하고 있는 일과 관련된 이야기입니다.
그리고, 주변에서 자주 질문을 받는 내용이기도 합니다.

오늘도 제가 아는 사람이 질문을 해 오더군요.

아마존에서 하는 것 같이...
"Customers Who Bought This Item Also Bought"(함께 주문하는 경향이 높은 상품들)을
간단히 찾아내는 방법이 없냐고...

(결론부터 말하면, 간단한 방법은 있지만 쓸모가 없습니다. T.T)

참고로,
울 회사... 넷스루...
축구 회사 아닙니다. 축구 데이터 분석하는 회사도 아닙니다.
웹로그 및 고객행동 분석하는 회사입니다.
(저두 축구팀장 아닙니다.)

저희가 일하는 분야가 대용량 데이터를 처리해서, 그 데이터로부터 유용한 정보를 정리하고 뽑아내는 것입니다만, 흔히 이 분야를 소개하다보면 의외로 '대용량' 데이터 처리에 대해 쉽게 생각하시는 분들이 많습니다.

왜냐면... 우리에게는 DBMS라는 훌륭한 도구가 있기 때문입니다.
그렇기 때문에 "DB에서 Query 날리면 되지 않나?" 라는 반응을 심심찮게 접할 수 있지요.

DBMS는 아주 훌륭한 도구지요.
단 기간에 IT가 발전하고, 지금 우리가 살고 있는 풍요로운 웹 서비스가 가능하게 만든
핵심적인 소프트웨어의 하나입니다.

DBMS는 기본적으로 많은 데이터 무리들 중에서 특정 데이터를 빨리 찾는 일에 능합니다.
그리고 데이터들을 멋지게 구조화된, 개념적인 모델이 잘 갖추어진 관리체계를 제공합니다.
그렇기 때문에 데이터가 100건이건 100만건이건, 더 나아가 몇 억건이 되더라도
이해하기 쉬운 구조로 관리할 수 있으며 아주 빠른 시간에 찾아내 주지요.

문제는... 웹 로그 데이터와 같이 대용량 데이터를 분석하는 일은
많은 데이터에서 특정 데이터를 빨리 찾아내는 것이 아니라,
많은 데이터를 모두 훑어 내려가면서 유용한 것을 가려내고, 정리하고, 분류하는 작업이 대부분입니다.
그러니까, DBMS에서 제공하는 멋진 Indexing 기술이나 Join 기능들이 별만 무소용일 경우가 많습니다.

한 가지... 간단한 예를 들어 보겠습니다.

1초는 1000ms 입니다.
1시간은 3,600초. 즉, 3,600,000ms입니다.

이 말은...
3백 6십만건의 데이터가 있을 때, 하나의 데이터 건을 처리하는 데 1ms씩만 걸린다고 하더라도
전체 3백 6십만건을 모두 훑으면서 처리하려면 1시간이 걸린다는 말이 됩니다.
분석할 내용이 많거나 복잡해서 데이터 하나를 처리하는 시간이 2ms, 3ms... 이렇게 늘어나게 되면
처리 시간은 2시간, 3시간... 이런식으로 걸리는 일이 다반사입니다.

그런데, 요즘은 3백 6십만건을 넘어가는 데이터는 너무 흔합니다.

큰 웹사이트의 경우 가입자 3백 6십만명은 일도 아닙니다.
대형 인터넷 오픈마켓에서 한달치 주문건수도 이쯤은 가뿐하게 넘을겁니다.

하물며, 웹로그에서 고객행동을 분석하려면 데이터 량은 훨씬 많아집니다.
하루에 수천만건, 더 나아가서 억 단위의 웹로그 데이터를 처리해야 합니다.

우리나라의 대표적인 통신사에서 하루에 발생하는 통화건수나 SMS 건수는 몇 개나 될까요?
한 은행에서 발생하는 인터넷 뱅킹 기록은 하루에 몇 건이나 될까요?
하루에 발생하는 주식 거래건수는?

처리할 데이터의 수를 줄일 수는 있겠지만
데이터를 하나씩 하나씩 까보면서 훑어 내려가야 한다는 점은 변함이 없지요.
그것도... 한 번만 훑으면 좋은데, 여러번 훑어 내려가게 되면 더 난감해 집니다.

그러니... DBMS를 사용하든, 아니면 전용 프로그램을 사용하든 간에
섬세한 기술을 가지고 처리하지 않는다면
엄청난 분석 시간이 걸리거나, 아예 분석 자체가 불가능할 수도 있습니다.
비용도 만만치 않을 것이구요.

더구나, 대부분의 1일 분석은 밤 12시를 기준으로 마감한 데이터를 모아서
그 다음날 업무시간 전에 (예를 들어 오전 8시까지) 분석을 끝내야 활용가치가 높습니다.
경우에 따라서는 이보다도 짧은 시간에 분석되어야만 가치있게 활용할 수 있는 경우도 많고요.
뿐만아니라, 분석에 쓰일 데이터가 풍부할 때라야 가치 있는 분석 결과가 나올 때가 많습니다.
한 가지 분석만 하는 것이 아니라, 여러 가지 다양한 지표를 분석해야 합니다.

비즈니스 규모가 작고, 또한 처리해야할 데이터량이 적다면 별로 문제가 되지 않겠지만,
대형 웹사이트와 같이 대용량 웹로그가 발생하는 경우에는
특별한 분석소프트웨어를 사용하는 이유가 여기에 있습니다.

설사 비즈니스 규모가 작다고 하더라도, 그 데이터가 몇 달간만 누적되면
수백만 건으로 늘어나는 경우도 많습니다.

데이터의 양이 많을 때는 접근하는 방법도 달라져야 합니다.
간단한 연산으로 보일지라도
신중하게... 보다 면밀하게 접근할 필요가 있습니다.

가랑비에 옷만 젖는게 아니라, 물벼락 맞고 홍수도 날 수 있다!