본문 바로가기
Big Data

빅데이터를 가지고 무엇을 보나요?

by csk 2015. 3. 13.

이번주에는 로그 형태의 빅데이터로 주로 어떤 분석을 하고, 그렇다면 그 로그는 어떻게  설계하는게 좋은지 생각해 봤습니다. 


로그형태의 빅데이터 라는게 제가 주로 경험하는 한정된 예제이긴 한데, 데이터 모델링 주제이래로 계속 다루고 있는 '인터넷 쇼핑몰' 예시에 맞기도 하고, 어느정도는 일반적이라고 생각이 돼서, 한 번 정리해보려고 해요. :)


빅데이터로 분석할때에는 쇼핑몰에서 일어나는 의미있는 모든 이벤트에 대해서 로그를 남기고 이에 대해서 분석을 하게 됩니다. 로그 예제는 앞의 글에서도 다루었듯이 이런 형태라고 가정 할께요.


사용일자:사용자아이디:행동유형:관련금액

-----------------------------------------

20150305 0930:chulsoo:addToCart:0

20150305 1002:chulsoo:buy:33000

...


일단 이런 로그를 가지고 가장 많이 하는 것은 특정 지표를 구하고 그 추이를 보는 일 입니다. 

각 서비스에서 가장 중요하게 생각하는 수치가 있죠. 인터넷 쇼핑몰이라면 일단 매출이 무엇보다 중요할 거고 위의 로그에서 매출을 집계할 수 있긴 하지만, 사실 매출은 데이터베이스에서 자알~ 관리되고 있을거에요. 그래서 매출 보다는 오늘 다녀간 사람의 수 (DAU:Daily Active User)나 이번주간에 한번이상 방문한 사용자의 수(WAU:Weekly Active User) 등을 로그를 가지고 구합니다. 이걸 처리하기 위해 본 시스템에 기능을 개발해서 부담을 주는것은 원하지 않지만, 어쨋거나 매출에 간접적으로 영향을 미치는 요소이기 때문에 그 추이를 알아야 하니까 로그 분석에 가장 적합한 대상이 아닐까 합니다.


다음으로 이런 로그를 가지고 많이 하는 것은  사용자의 사용패턴을 발견하기위해 분석해 보는 일 입니다.  

이것도 당연히 사용자의 일거수 일투족을 데이터베이스에 관리하기는 어려울 거구요. 몇몇 사용자에 대해 쌓인 로그를 보면서 패턴을 찾아냅니다. 이걸 기계에게 시킬 수 있겠다고 생각하는 것이 기계학습 (machine learning)이지요. 뭐 하지만 거기까지 가지 않더라도 일단 눈으로 보면서 패턴을 찾을 수 있습니다. 적절한 사용자를 샘플링하고, 또 이런저런 추측/가설을 먼저 하면서 진행한다면 사람의 output도 훌륭할 수 있습니다. 20대 여성은 주로 수요일에 주말에 입을 옷을 많이 구매할거라는 가설을 세운다면 20대 여성을 골라 구매하는 시기를 보고 소감을 남긴것도 조회하고 하면서 확인을 해 볼 수 있습니다. 어느정도 맞는다는 확신이 든다면 전체적인 집계를 해봅니다. 20대 여성의 요일별 구매 횟수를 본다든지, 주말용 옷(구분이 가능하다면요)의 매출을 구매 요일별 구매 횟수를 본다든지 하는 식으루요. 이렇게 해서 가설이 완전히 확인되면 이 결과를 가지고 수요일에 레져용 옷의 세일을 진행하는 것과 같은 마케팅이나 전략으로 만들어 실행 해 볼 수 있겠죠.




그럼 이렇게 잘 사용할 수 있는 로그를 만들려면 어떤 정보를 담아야 할까요? 


처음 로그를 설계하는 것은 참 어려운 일인것 같아요. 하얀 도화지를 받았을때 처럼 긴장이되면서 망치지 않을까 걱정이되죠. 

일단 쌓아서 분석해보고 다시 로그 형태를 수정해 나가는 식으로 반복적인 싸이클을 도는게 정답입니다.... 마는.... 이건 그냥 열심히 공부하세요 같이 들리는 면이 없지 않아서요. :) 조금 더 팁을 드리고자 합니다.


제가 생각하는 로그 설계 시에 고려할 점은요.


먼저, 가급적 분석에 필요한 정보들은 붙여서 남기라는 거에요.  예를들어 쇼핑몰 로그에 사용자 아이디가 있잖아요? 그런데 보통 분석할때는 사용자의 연령이나 성별 별로 많이 보게 되거든요. 그런데 아이디만을 가지고는 그런 정보를 알 수가 없습니다. 그럼 로그를 분석하면서 데이터베이스를 연결해서 사용자의 추가적인 정보와  조합(JOIN)하는 작업을 해야하는데요. 이게 빅데이터 처리 프레임 워크에는 상당히 부담을 주는 작업 유형입니다. 그래서 사용자 아이디만 남기지 말고, 생년월일(나이보단 생년이 좋죠! :)), 성별 등의 분석할만한 정보를 붙여주는게 좋답니다. 

물론 정보를 덧붙일수록 로그의 싸이즈가 늘어나죠. trade-off를 잘 고려해 보시기 바랍니다.


다음으로 뽑고자 하는 지표들을 먼저 개략적으로라도 상상해보시고 난 후에 설계하시라는 거에요. 필요한 지표를 나열하고 현재 데이터베이스에서 뽑을 수 있는지 아닌지 확인하시고, 그리고 약간 오차가 있어도 수용할만한지도 확인해보세요. 현재 데이터베이스에서 뽑을수 있다면 거기서 뽑는게 훨신 빠르고 정확한게 보통입니다. 그러니까 빅데이터에서 괜한 작업을 하지 마시구요. 또 로그는 성격상 실패하거나 오류날 확률이 높아요. 처리 우선순위가 높지 않으니까요. 그래서 숫자가 칼같이 정확하진 않습니다. 그러니까 이걸 어느정도 감안하고 보실 수 있는 경우에만 로그로 분석하시는 것이 좋습니다.

이렇게 해서 로그를 통해 도출할 지표를 확정하고 나면 이것들을 뽑을 수 있는 형태로 로그를 설계하시면 되겠지요.


마지막으로 로그를 어디에 쌓을지도 매우 중요하니까 고민을 좀 하시라는 겁니다. 처음에 로그의 위치를 잘 잡으셔야 해요. 로그는 쌓이는 양이 어마어마 하다보니 ( 그래서 빅데이터 잖아요? :p ) 장기적으로 생각해서 적절한 서버에 두셔야 합니다. 만약 몇 년 내에 다른 서버로 옮기거나 해야 한다면 옮기는 비용이나 시간이 어마어마 할 수 있습니다. 예를들어, 아마존 웹 서비스(AWS)를 쓰시는 경우 주의하세요. 들어갈 땐 공짜지만 데이터를 꺼내 올 때는 짤없이 꽤 많은 비용을 물어야 하니까요. 

그리고 앞으로 로그를 분석할 일이 있다면 분석용 제품들도 로그가 있는 그 서버에 설치하게 될 거니까 그것도 감안하시구요.



오늘은 빅데이터의 대표주자인 로그를 주로 어떻게 빅데이터 분석이라는 일로 사용하는지와 그 로그를 설계할 때 고려할 사항은 뭐가 있는지 정리해봤습니다. 저도 이제 시작이라 제가 아는만큼 이다보니 틀린부분이 있을 수 있어요. 감안하고 봐주시고, 좋은 의견이나 정보는 알려주시면 더 좋겠습니다. :)