집에서 개발 공부와, 테스트를 위해서 개인 노트북이 필요했는데, 아무래도 업무와 개인 공부를 분리하는것이 좋을것 같아서, 얼마전 부터 개인 노트북을 사용하기 시작했다.
여러가지 고민을 하다가, 딸에게 주었던 한성 U35S를 돌려받고, 딸에게는 ASUS 라이젠 노트북을 사주었다.
I7에 16G 메모리, 128G SSD로 나쁘지 않은 스펙이었지만, 대략 7년정도 된 노트북이라 우분투를 깔고 사용은 했지만, 일반적인 문서 작업이나 코딩들도 가능했지만, 아무래도 서버를 여러개 올리거나 컴파일을 많이 거니, 팬 소리가 너무 귀에 거슬리기 시작했고, 이참에 노트북을 하나 바꿔야 하겠다하고 개발용 노트북을 찾기 시작했다.
아무래도 개발용으로 사용할 노트북이기 때문에, 성능이 좋아야 하고, 쿠버네티스등 여러 서버를 띄울 것이기 때문에, 메모리가 충분해야 한다 (32G), 디스플레이는 개인적으로 IPS를 선호하고, IO는 nvme 디스크를 정해놓고 찾기 시작했다.
고 스펙으로 검색을 하다보니, 게이밍 노트북이 주로 올라왔는데, 이런 노트북은 I7-8550H (6코어)를 지원하는데다가, GTX-1050 TI나 1060 GPU를 지원하였다. 아무래도 GPU 지원만 잘된다면, 텐서플로우나 케라스같은 머신러닝 작업에 적합할것이라고 생각했다.
카페에서도 가끔 코딩을 하기 때문에 노트북이 너무 게이밍 스러우면 안되고, 그래서 좁혀진것이 레너보 Y530과 한성 TFG155 모델이었다.
예전과 다르게 요즘 랩탑들은 우분투 호환이 안되는 것들이 생각보다 많고 멀티 부트가 안되는 모델들이 많다. 특히 일반 노트북들은 크게 문제가 없지만 GTX GPU가 들어가는 경우에는 듀얼 부트가 문제가 많았다.
<그림. 레노버 Y530>
Y530은 다양한 모델 선택이 가능하고, 디자인도 괜찮은 편이고 냉각팬도 많이 달려있지만, 해외 커뮤니티를 살펴보니 우분투 설치가 쉽지는 않았지만, 여러 설정값을 조정하면 설치가 가능하다는 것을 찾았지만, 듀얼 부팅이 안되는 문제점이 있었다. 그리고 IPS 패널이기는 하지만 3 종류의 IPS 패널을 지원하는데, 60HZ, 250 nits 모델은 화면이 누렇다는 이야기가 많았다. 가격도 좋았지만, 결국 윈도우만 돌리고 있을거 같아서 아쉽지만 패스
<그림. 한성 TFG155>
다음 모델은 TFG155 모델인데, 알루미늄 상판에 디자인되 괜찮고, 스펙도 훌륭하다. 그러나 역시 누런 IPS 문제가 고질적인데, 이건 순전히 뽑기 운에 달려있고, 무엇보다 리눅스 설치에 성공했다는 사용자가 없었다. 특히 국내 내수용 모델이기 때문에 해외에서 몬가 관련된 문서도 없었다. 발열 문제도 꽤 심각한걸로 보이고, U35S를 기존에 사용해본 결과, 내구성에 문제가 있다고 판단하고 패스
6 코어 CPU를 가지고 싶었지만, 개발용 장비가 필요한거지 우분투 드라이버나 커널설정에 시간을 보내는게 목적이 아닌만큼, 6 코어를 포기하고 4 코어 제품을 살펴보기 시작하였다.
ASUS 노트북이 가격도 저렴하고 디자인도 깔끔해서 물망에 오르기는 했지만, nvme를 지원하지 않고, 16G 메모리까지 밖에 확장이 안되는 이유로 패스.
리누즈 토발즈가 DELL XPS 시리즈를 사용한다고 해서 살펴보았는데, 역시나이다.
디자인도 깔끔하고 9750 CPU를 지원하고, 우분투 설치도 보장이 된다.
결국은 가격이 문제 260만원이다.. 아.. 가지고 싶지만. 다른 랩탑보다 100~150만원은 비싼듯.. 이 돈이면 애들 학원을 하나 더 보내지..
그래서 하급 기종을 살펴보니 CPU를 8300까지 내려고 200만원..
아무리 스펙을 내려봐도 답이 안나온다. 그나마 미국에서는 가격이 저렴한 모델도 있고 Developer Edition이라고 따로도 있는데.. 한국에는 수입이 안된다. (DELL 관계자 여러분 Developer Edition좀 수입 해주시면 안되실까요? ) 개발자 전용 모델이라 스펙이 정말 개발용으로 딱이다. 미국 출장가서 사서 핸드캐리할까도 생각했지만, 글로벌 AS 가 안된다고 들어서.. 그냥 포기..
그래서 우분투에서 인증 받은 노트북을 찾아보니, 그나마 인스피리언 7580 시리즈가 눈에 들어왔다.
삼성, LG를 제외한 한성이나 다른 브렌드들은 AS가 안좋다는 말이 많은데, DELL은 AS가 좋기로 소문이 나있었고, 공식 우분투 지원이라니 괜히 모험을 할 필요가 없었다.
설치 스트레스가 훨씬 덜할듯. 네이버에 후기를 찾아보니.. 헐.. 이 노트북 후기는 거의 없다. 110~120만원대에서는 약간 포지셔닝이 애매할듯. 보통 유사 스펙이면 이것보다 가격이 살짝 낮은데.. 일반적인 사용자들이 메모리 32G에 NVME를 꼽을일은 거의 없다. 그정도 스펙이면 게이밍인데, 대부분 게이밍 노트북으로 넘어가서 GTX GPU를 쓰겠지... (국내 노트북 시장은 개발자 마켓들을 따로 안보나보다..)
<그림 DELL Inspiron 7580 핑크 버전. 한국은 안판다.>
거기다 행사 기간이라고 무선 마우스까지 덤이다. 이것도 제대로 된거 사려면 3~4만원은 줘야 하는데, 윈도우 라이센스는 집에 정품이 있기에 필요는 없지만 그래도 윈도 프로가 들어있다.
그런데 판매하는 제품은 메모리 16 G 옵션밖에 없고 디스크도 128 SSD + 1TB HDD 또는 512 G 메모리만 지원이 된다. 250G 정도면 딱인데…
메모리 스펙을 찾아보니, 대략 16G 삼성 정품으로 10만원 정도면 구입이 가능한데, 인터넷에서는 8G 추가하는데 10만원(??) 호갱인가??? 그리고, 256 삼성 nvme도 10만원이면 따로 구입이 가능하다.
128SSD + 1TB → 512 모델 업그레이드가 10만원 차이인데… 디스크 모자르면 직접 사서 바꿀것으로 생각하고, 그냥 16GB 메모리 두개만 추가해서 구입.. (남는 8G는 당근 마켓에 싸게 팔아버릴 요량..)
코딩할때 화면이 적어서 모니터도 하나 구입하기로 하고, 32인치를 사고 싶었지만.. 책상이 좁고 가격 때문에 27인치 결정. IPS에 무결점 그리고 책상 두께만 많이 차지 않으면 괜찮아서, 무난하게 알파 스캔 모니터 주문. 결정적으로 모니터암을 달 수 없는 구조지만.. 그냥 싸니까..
이렇게 해서,
DELL 7580 I7, 8G 메모리, 128 nvme + 1TB 디스크 + 마우스는 위메프에서 할인 쿠폰이 나와서 다나와 보다 싸게 115만원
삼성 DDR4 16G 메모리 2개 = 22만원
27인치 알파스캔 모니터 = 25만원
잘만 쿨러 24000원
이렇게 해서 대략 165만원 정도. 32 기가, 27인치 IPS 모니터, 알루미늄 바디 노트북 세트로 이정도 가격이면 대단히 선방한듯..
다음에는 더 많이 벌어서. 리누즈 토발즈 처럼 XPS15 풀스펙 모델을 쓸 수 있기를 바라며..
(4/13 추가. 모니터 자체는 크게 문제는 없는데, 노트북은 15인치인데, 모니터가 27인치다 보니 둘이 글자 크기가 너무 난다. 27인치로 하려면 더 고해상도를 쓰거나 아니면 모니터를 24인치로 하는 선택이 더 좋았을듯)
===
업데이트 노트북이 도착해서 인스톨 작업을 진행하였다.
128G SSD에 우분투를 인스톨하고 윈도우 듀얼 붓을 사용하려니 윈도우 파티션이 이것저것 나눠지고 깔리고 복잡해서 용량이 모잘라서 결국은 삼성 EVO 970 PRO를 추가 주문하였다. (+20만원). 돈 아끼려다가.. 그냥 초반에 512 NVME SSD (10만원추가)를 주문하는 것을 추천한다.
다음 인스톨 과정인데, 바이오스에서 RAID를 제외하고 ACHI모드인가로 인식하면 인식은 잘 된다. 다음 윈도우를 다시 인스톨 해야 하는데, 델 사이트에서 제공하는 리커버리 윈도우즈 이미지를 사용하면, 설치가 안된다. (디스크에 대한 드라이버를 찾지 못한다. ) 한참을 씨름하다가 마이크로 소프트의 윈도우즈 정식 이미지를 다운 받아서 사용하니 바로 인식도 되고 한번에 인스톨이 된다. (https://www.microsoft.com/ko-kr/software-download/windows10ISO)
트랙패드, 마우스, 디스플레이 모두 완벽하게 작동한다. 단 돌다가 가끔 커널 패닉에 빠지면서 멈추는데..
이건 NVIDIA GPU와 충돌 때문에 발생한다. 소프트웨어 업데이트 메뉴에 가서 드라이버 업데이트 메뉴를 보면 NVIDIA 드라이버 업데이트가 가능하다.
End2End 머신러닝 플랫폼 Kubeflow
조대협 (http://bcho.tistory.com)
머신러닝 파이프라인
머신러닝에 대한 사람들의 선입견중의 하나는 머신러닝에서 수학의 비중이 높고, 이를 기반으로한 모델 개발이 전체 시스템의 대부분 일 것이라는 착각이다.
그러나 여러 연구와 경험을 참고해보면, 머신러닝 시스템에서 머신러닝 모델이 차지하는 비중은 전체의 5% 에 불과하다.
실제로 모델을 개발해서 시스템에 배포할때 까지는 모델 개발 시간보다 데이타 분석에 소요되는 시간 그리고 개발된 모델을 반복적으로 학습하면서 튜닝하는 시간이 훨씬 더 길다.
머신러닝 파이프라인은 데이타 탐색에서 부터, 모델 개발, 테스트 그리고 모델을 통한 서비스와 같이 훨씬 더 복잡한 과정을 거친다. 이를 머신러닝 End to End 파이프라인이라고 하는데, 자세하게 그 내용을 살펴보면 다음 그림과 같다.
Data ingestion : 머신러닝에 필요한 학습 데이타를 외부로 부터 받아서 저장하는 단계
Data analytics : 수집된 데이타를 분석하여, 의미를 찾아내고,필요한 피쳐(특징)을 찾아내는 단계로 주로 빅데이타 분석 시스템이 많이 활용된다. EDA (Exploratory Data Analytics) 방법을 많이 사용하는데, 저장된 데이타를 그래프로 시각화해서 각 값간의 관계나 데이타의 분포등을 분석한다.
Data Transformation : 수집된 데이타에서 학습에 필요한 데이타만 걸러내고, 학습에 적절하도록 컨버팅 하는 단계. 예를 들어 이미지 데이타의 크기를 정형화하고, 크롭핑 처리를 한후에, 행렬 데이타로 변환하는 과정등이 이에 해당한다.
Data Validation : 변환된 데이타가 문제는 없는지 데이타 포맷이나 범위등을 검증하는 단계
Data Splitting : 머신러닝 학습을 위해서 데이타를 학습용,테스트용,검증용으로 나눈다.
Build a Model : 머신러닝 모델을 만들고 학습하는 단계
Model Validation : 만들어진 모델을 검증하는 단계
Training at scale : 더 많은 데이타를 더 큰 인프라에서 학습 시켜서 정확도를 높이고, 하이퍼 패러미터 튜닝을 통해서 모델을 튜닝하는 단계로 주로 대규모 클러스터나 GPU 자원등을 활용한다.
Roll out : 학습된 모델을 운영환경에 배포하는 단계
Serving : 배포된 모델을 통해서 머신러닝 모델을 서비스로 제공하는 형태. 유스케이스에 따라서 배치 형태로 서빙을 하거나 실시간으로 서빙하는 방법이 있다.
Monitoring : 머신러닝 모델 서비스를 모니터링 해서 정확도등에 문제가 없는지 지속적으로 관찰하는 단계
Logging : 모델에 서비스에 대한 로그 모니터링
이 과정을 데이타의 변동이 있거나 모델을 향상시키고자 하거나 정확도가 떨어지는 경우 첫번째 과정부터 반복을 한다.
위에서 설명한 파이프라인 흐름을 시스템 아키텍쳐로 표현해보면 다음과 같다.
먼저 GPU를 지원하는 인프라 위에 머신러닝 플랫폼이 올라가게 되고, 빅데이타 분석 플랫폼이 같이 사용된다.
머신러닝 플랫폼은 데이타를 분석하는 EDA 단계의 데이타 분석 플랫폼 그리고, 분석된 데이타를 변환 및 검증하고 학습,테스트,검증 데이타로 나누는 Data Processing 시스템이 붙고, 이 데이타를 이용해서, 모델을 개발한후에, 이 모델을 학습 시키기 위한 학습 (Training) 플랫폼이 필요하다. 학습된 모델을 검증하고, 이 검증 결과에 따라서 하이퍼 패러미터를 튜닝한 후에, 이를 운영환경에 배포하여 서비스 한다. 데이타 분석 및 모델 개발 학습 단계는 주로 데이타 사이언티스트에 의해서 이루어지는데, 이러한 엔지니어들이 사용할 개발 환경이 필요한데, 주로 노트북 기반 (예. 파이썬 주피터 노트북)의 환경이 많이 사용된다.
학습이 완료된 모델을 서빙하는 Inference 엔진이 필요하고, 이를 외부 API로 노출하기 위해서 API 키 인증, 오토스케일링, 로깅 및 모니터링을 위한 API Serving 플랫폼이 필요하다.
컴포넌트가 많은 만큼 여기에 사용되는 프레임웍도 많다. 먼저 모델 개발 및 학습을 위해서는 머신러닝 프레임웍이 필요한데, Tensorflow, PyTorch, Sklearn, XGBoost등 목적에 따라서 서로 다른 프레임웍을 사용하게 되며, 완성된 모델을 서빙하는 경우에도 Tensorflow Serving, Uber에서 개발한 Horovod 등 다양한 플랫폼이 있다. 또한 모델을 서빙할때 REST API등으로 외부에 서비스 하려면 보안 요건에 대한 처리가 필요하기 때문에 별도의 API 인증 메커니즘등이 추가되어야 하고, 스케일링을 위한 오토 스케일링 지원 그리고 모델의 배포와 테스트를 위한 배포 프레임웍, A/B 테스트 환경등이 준비되어야 한다.
일부만 이야기한것이지만 실제 운영 환경에서 사용되는 머신러닝 시스템은 훨씬 더 복잡하고 많은 기술을 필요로 한다.
Kubeflow comes in
이러한 복잡성 때문에 머신러닝 플랫폼은 높은 난이도를 가지고 있고, 데이타 분석과 모델 개발에 집중해야 하는 머신러닝 엔지니어 입장에서는 큰 부담이 된다. (배보다 배꼽이 크다)
그래서 이러한 복잡성을 줄이고 머신러닝 엔지니어의 원래 업인 데이타 분석과 머신러닝 모델 개발에만 집중할 수 있도록 플랫폼을 추상화 해놓은 오픈 소스 프레임웍이 Kubeflow이다.
위에서 설명한 머신러닝 파이프라인의 End to End 전체를 커버할 수 있게 하고, 모든 단계의 컴포넌트를 패키지화 해놔서, 어려운 설치 없이 머신러닝 엔지니어는 머신러닝 모델 개발의 각 단계를 손쉽게 할 수 있도록 해준다.
Kuberflow는 Kubernetes(쿠버네티스) + ml flow 를 합한 의미로, 쿠버네티스 플랫폼 위에서 작동한다.
쿠버네티스는 도커 컨테이너 관리 플랫폼으로, 이 컨테이너 기술을 이용하여 머신러닝에 필요한 컴포넌트를 패키징하여 배포한다. 쿠버네티스에 대한 자세한 설명은 링크를 참고하기 바란다.
이로 인해서 가질 수 있는 장점은 다음과 같다.
클라우드나 On-Prem (데이타 센터), 개인 개발 환경에 상관 없이 동일한 머신러닝 플랫폼을 손쉽게 만들 수 있기 때문에 특정 벤더나 플랫폼에 종속되지 않는다.
컨테이너 기술을 이용해서 필요한 경우에만 컨테이너를 생성해서 사용하고, 사용이 끝나면 컨테이너를 삭제하는 방식이기 때문에 자원 활용율이 매우 높다. 특히 쿠버네티스의 경우에는 스케쥴링 기능을 이용해서 비어있는 하드웨어 자원에 컨테이너를 배포해서 (꾸겨넣는 방식으로) 사용하기 때문에 집적률이 매우 높다.
컨테이너로 패키징이 되어있기 때문에 내부 구조를 알필요가 없이 단순하게 컨테이너만 배포하면 된다.
또한 쿠버네티스는 오픈소스 플랫폼이기 때문에 여러 종류의 머신러닝 관련 기술들이 손쉽게 합쳐지고 있다.
Kubeflow 컴포넌트 구성
그러면 간단하게 Kubeflow의 컴포넌트 구성을 살펴보자.
IDE 환경
IDE 개발환경으로는 JupyterLab을 지원한다. JupyterLab은 Jupyter 노트북의 확장 버전으로 코드 콘솔뿐 아니라 파일 브라우져나 시각화창등 확장된 UI를 지원한다.
개인적으로 기존 노트북 환경에 비해서 좋은 점은 주피터 노트북을 필요할때 마다 손쉽게 생성이 가능하며, 생성할때 마다 GPU 지원 여부나 텐서플로우 버전등을 손쉽게 선택이 가능하다.
<그림. 노트북 생성시 텐서플로우와 GPU 지원 여부를 선택하는 화면>
또한 아래 그림과 같이 노트북 인스턴스의 하드웨어 스펙 (CPU, Memory, GPU)를 정의할 수 있다.
GPU 드라이버
그리고 쿠버네티스상에서 GPU를 사용할 수 있도록 GPU 드라이버를 미리 패키징 해놓았다. 머신러닝 프레임웍을 사용하면 항상 까다로운 부분이 GPU 드라이버 설정이나 업그레이드인데, 이를 미리 해놓았기 때문에 머신러닝 엔지니어 입장에서 별도의 노력없이 손쉽게 GPU를 사용할 수 있다.
머신러닝 프레임웍
머신러닝 프레임웍으로는 현재 텐서플로우, 파이토치, MxNet등을 지원하는데, 플러그인 컴포넌트 형태이기 때문에 앞으로 더 많은 프레임웍을 지원할 것으로 기대된다.
데이타 프로세싱
데이타 프로세싱에서 데이타 변환 (Transformation)과 데이타 검증 (Validation)은 텐서플로우의 확장팩인 TFX에서 지원하는 TFDV (Tensorflow Data Validation)과 TFT (Tensorflow Transform)을 이용해서 지원한다.
학습 환경
개발된 모델을 학습할때 특히 분산학습의 경우에는 텐서플로우 클러스터와 우버에서 개발된 텐서플로우용 분산 학습 플랫폼인 Hornovod를 지원한다.
모델 검증
학습된 모델 검증은 데이타 프로세싱과 마친가지로 텐서플로우 확장팩인 TFX의 TFMA (Tensorflow Model Analysis)를 지원한다.
하이퍼 패러미터 튜닝
학습된 모델에 대한 하이퍼 패레미터 튜닝은 katLib라는 컴포넌트를 이용해서 지원한다.
모델 서빙
학습이 완료된 모델은 TFX 패키지의 일부인 Tensorflow Serving 을 사용하거나 모델 서빙 전문 플랫폼인 SeldonIO를 사용한다. SeldonIO는 텐서플로우뿐만 아니라 Sklearn, Spark 모델, H2O 모델, R 모델등 좀 더 다양한 모델을 지원한다.
API 서비스
서비스된 모델에 대한 API 키 인증이나 라우팅등을 위해서 API 게이트 웨이가 필요한데, API 게이트 웨이로 Ambassador라는 오픈 소스를 이용한다. 이를 통해서 API 키등의 인증을 지원하고, 쿠버네티스 위에 네트워크 플랫폼인 ISTIO를 사용하여, API 서비스에 대한 모니터링 및 서비스 라우팅을 지원하는데, 서비스 라우팅 기능은 새 모델을 배포했을때 새모델로 트래픽을 10%만 보내고 기존 모델로 트래픽을 90% 보내서 새모델을 테스트하는 카날리 테스트나 API 통신에 대한 보안등 여러기능을 지원한다. Istio에 대한 자세한 설명은 링크를 참조하기 바란다.
워크플로우
이러한 컴포넌트를 매번 메뉴얼로 실행할 수 는 없고, 워크플로우 흐름에 따라서 자동으로 파이프라인을 관리할 수 있는 기능이 필요한데, 이를 워크플로우 엔진이라고 하고, Kubeflow에서는 argo라는 컨테이너 기반의 워크플로우 엔진을 사용한다. 자세한 내용은 링크 참조.
그런데 argo는 일반적인 워크플로우를 위해서 디자인된 플랫폼으로 머신러닝 파이프라인에 최적화되어 있지 않다. (예를 들어 학습 단계 종료후, 학습 결과/accuracy등을 모니터링 한다던지, Tensorflow Dashboard와 통합된다던지.) 그래서 argo위해 머신러닝 기능을 확장하여 개발중인 오픈소스가 Kubeflow pipeline이 있다. Kubeflow pipeline에 대해서는 나중에 더 자세히 설명하도록 한다.
컴포넌트에 대한 정의
Kubeflow에서 사용되는 거의 모든 컴포넌트에 대해서 설명하였다. 그러면 이런 컴포넌트를 어떻게 쿠버네티스에 배포하고, 어떻게 실행을 할것인가? 매번 쿠버네티스의 설정 파일을 만들어서 하기에는 파일의 수도 많고 반복작업이면서 또한 쿠버네티스에 대한 높은 전문성을 필요로하기 때문에 어렵다.
그래서 이러한 반복작업을 줄여주고, 템플릿화하여 실행하도록 해주는 엔진이 ksonnet 이라는 오픈소스를 사용한다. ksonnet은 jsonnet 템플릿 엔진 기반으로, 위에서 나열한 컴포넌트들을 쿠버네티스에 설치할 수 있도록 해주고, 각 단계별 컴포넌트를 손쉽게 실행할 수 있도록 해준다.
이 솔루션들을 앞에서 설명한 머신러닝 플랫폼 아키텍쳐에 맵핑 시켜보면 다음과 같은 그림이 된다.
Kubeflow는 현재 개발중인 버전으로 이글을 쓰는 현재 0.4 버전이 개발중이다.
컨셉적으로 매우 훌륭하고 0.4 버전인것에 비해서는 매우 완성도가 높지만 1.0 릴리즈 전이기 때문에 다소 변화가 심하기 때문에 버전간 호환이 안될 수 있다. 이점을 염두하고 사용하기 바란다.
Kubeflow를 이해하기 위해서는 먼저 Kubeflow의 컴포넌트를 배포하고 실행하게 해주는 ksonnet에 대한 이해가 먼저 필요하다. 다음 글에서는 이 ksonnet에 대해서 알아보도록 하겠다.
일반적으로 모바일 로그 분석은 클라우드 기반의 무료 솔루션을 이용하다가 자체 구축으로 가는 경우가 많다.
클라우드 기반의 무료 로그 분석 솔루션으로는 구글 애널러틱스, 야후의 플러리, 트위터의 패브릭 그리고 구글의 파이어베이스 등이 있다.
이런 무료 로그 분석 솔루션들을 사용이 매우 간편하고, 핵심 지표를 쉽게 뽑아 줄 수 있으며, 별도의 운영이 필요 없다는 장점을 가지고 있다.
그러나 이런 클라우드 기반의 무료 솔루션의 경우에는 요약된 정보들만 볼 수 있고 또한 내가 원하는 지표를 마음대로 지정을 할 수 없기 때문에, 어느정도 서비스가 성장하고 팀의 여력이 되면 별도의 로그 수집 및 분석 솔루션을 만드는 것이 일반적이다.
오픈 소스 기반의 분석 솔루션
오픈 소스를 조합해서 모바일 로그 수집 시스템을 만들면 대략 다음과 같은 모양이 된다.
API 서버에서 로그를 수집해서 카프카등의 큐를 통해서 로그를 모으고, 실시간은 스파크 스트리밍, 배치는 하둡이나 스파크 스트리밍 프레임웍을 이용합니다. 대쉬 보드는 만드는 곳도 있지만, 주피터 노트북이나 제플린 노트북과 같은 노트북을 이용한다.
요즘은 데이타 저장 및 분석에 ELK (Elastic Search + Logstash + Kibana)와 같은 솔루션도 많이 사용하고 있다.
그런데 이런 오픈 소스 솔루션 기반으로 로그 분석 시스템을 개발하면 몇가지 문제가 발생한다.
개발에 드는 노력 이런 오픈소스 스택으로 시스템을 개발하려면, 이 프레임웍에 대해서 잘 아는 전문가가 필요합다. 일반적인 스타트업에서는 구하기도 힘들고, 기업이 어느정도 규모가 되더라도 빅데이타 관련 기술을 다룰 줄 아는 엔지니어는 여전히 귀한 엔지니어이고, 이런 엔지니어들이 있다하더라도, 시스템 설계및 구현에는 수개월의 기간이 소요 되게 된다.
시스템 구매와 운영 다음 문제는 모바일 데이타는 양이 많기 때문에, 위에서 언급한 빅데이타 관련 오픈 소스를 사용하게 되는데, 이러한 시스템은 하드웨어 자원이 수십에서 수백대가 필요하거니와, 이를 설치하고 운영하는 것 역시 쉽지 않다. 로그를 수집하고 분석하는 로직을 만들어야 하는 엔지니어들이 정작 데이타 분석 보다는 시스템 운영과 유지보수에 많은 시간을 낭비해야 한다는 문제가 발생한다. 규모가 작은 스타트업이나 엔지니어링 능력이 되지 않는 기업들은 이런 빅데이타 분석은 엄두도 내지 못하는 상황이 되고, 디테일한 데이타 분석을 하지 못하게 되니 자연히 경쟁력이 떨어지게 될 수 있다.
연산 시간 그리고 수집 수백대의 서버를 가지고 있다하더라도, 데이타 연산 시간은 수십분에서 수시간이 소요된다. 특히 데이타 분석 서버들이 분석을 하고 있을때는 다른 분석을 하고 싶은 사람들은 연산이 끝날때 까지 기다려야 하고, 수시간을 들여서 연산한 결과라도 연산이 잘못되었으면 다시 로직을 수정해서 수시간 동안 다시 연산을 해야 한다. 비지니스 조직 입장에서는 지표 분석 결과를 얻는데, 수시간이 걸리니 의사 결정의 민첩성이 떨어지게 된다.
클라우드 기반의 분석 솔루션
근래에 이런 빅데이타 분석이 클라우드 컴퓨팅 기술과 만나면서 한번의 큰 변화를 겪게 되는데, 흔히들 빅데이타의 민주화라고 이야기 한다. 빅데이타 분석이 클라우드 컴퓨팅과 만나면서 겪은 큰 변화는 다음과 같다 .
클라우드 스케일의 연산
먼저 스케일이 달라집니다. 클라우드의 대용량 자원을 이용하여, 연산을 하기 때문에, 훨씬 더 빠른 연산을 저 비용에 할 수 있다.
예를 들어 구글의 빅쿼리의 경우에는 1000억개의 문자열(ROW)를 Regular expression을 이용하여 스트링 Like 검색을 하고 이를 group by 로 그룹핑하여 연산 하는 쿼리를 수행할때
“8600개의 CPU, 3600개의 디스크, 350GB의 네트워크 대역폭"
이 사용이 되고, 쿼리 수행 시간은 약 20~30초, 클라우드 사용 비용은 20$ (2만원) 정도가 소요 된다.
오픈 소스 기반으로 왠만한 규모로는 동시에 단일 연산으로 이렇게 수천개의 CPU를 같이 돌릴 수 있는 인프라를 사내에 가지고 있기도 힘들뿐 더러, 이만한 리소스를 20$라는 저렴한 비용에 사용하기란 거의 불가능에 가깝다.
이런 빠른 연산으로 인해서, 현업에서는 연산 결과를 기다리지 않고 바로바로 볼 수 있고, 비용 역시 저렴하기 때문에, 어느정도 자금력과 개발력이 있는 기업이 아니더라도 고성능의 빅데이타 분석 시스템 구현이 가능하게 된다.
NoOPS
다음 장점으로는 운영이 필요 없다는 것인데, 앞에서도 설명했듯이, 오픈 소스를 이용해서 빅데이타 분석 시스템을 직접 구축한 경우에는 시스템 인스톨과, 구성, 그리고 운영에 많은 시간이 소요 되는데, 클라우드 기반의 빅데이타 솔루션은 설정과 운영을 클라우드 서비스 제공자가 대행을 하기 때문에, 엔지니어링 팀은 별도의 설정과 유지보수 없이 본연의 역할인 데이타 분석에만 집중할 수 있게 된다. (아마 직접 하둡이나 스파크 클러스터를 운영해본 사람이라면 이 의미를 잘 이해하리라 본다.)
이렇게 클라우드가 빅데이타 영역에 도입되면서 이제는 빅데이타 분석이 뛰어난 엔지니어링 지식과 자금력이 없더라도 단시간내에 저비용으로 효율적인 데이타 분석이 가능하게 되었기 때문에, 이를 빅데이타의 민주화라고 부른다.
파이어베이스 애널러틱스
파이어베이스는 얼마전에 구글이 인수해서 클라우드 서비스 형태로 제공하고 있는 통합 모바일 개발 프레임웍이다. 웹은 지원하지 않고 모바일만 지원하는 형태의 프레임웍이며, 리얼타임 데이타 베이스, 광고 네트워크 통합, 푸쉬 서비스, 사용자 개인 인증 서비스등 여러가지 기능을 가지고 있는데, 그 중에서, 파이어베이스 애널러틱스는 모바일 빅데이타 분석에 최적화된 시스템이다.
빅쿼리와 파이어베이스의 조합
게임 체인저
파이어베이스는 모바일 데이타 분석에서 거의 게임 체인저라고 할만한 기술인데, 기존의 클라우드 기반의 모바일 데이타 분석 솔루션은 가장 큰 문제점이, 개발자가 정의한 로그 이벤트 (커스텀 로그)를 수집할 수 없다는 문제와 그리고 수집한 원본 데이타를 볼 수 없기 때문에, 원하는 지표를 마음대로 수집하고 분석하는 것이 불가능했다.
그런데 파이어베이스 애널러틱스는 이 두가지 기능을 지원하기 시작하였다.
커스텀 이벤트 정의를 통해서 개발자가 원하는 로그를 손쉽게 정의해서 수집이 가능하고, 또한 수집한 로그는 모두 구글의 빅데이타 저장 및 분석 플랫폼인 빅쿼리에 저장되고 바로 분석이 가능하다.
빅쿼리
파이어베이스 애널러틱스의 데이타는 빅쿼리에 저장이 되는데, 앞에서 예를 든것과 같이, 빅쿼리는 한번 연산에 수천개의 CPU와 디스크를 사용하여, 하둡이나 스파크에서 수시간이 걸리는 연산을 불과 수십초만에 처리가 가능하다.
빅쿼리의 또 다른 장점중의 하나는 이런 연산 속도 뿐만 아니라 RDBMS와는 다르게 JSON과 같이 트리형 (계층 구조를 가지는) 데이타형을 그대로 저장하고 쿼리가 가능하다는 것이다.
파이어베이스 애널러틱스는 뒤로는 빅쿼리 연동을 통해서 모든 원본 데이타의 수집과 분석을 지원하고 앞으로는 파이어베이스 에이전트를 모바일 디바이스에 탑재 하는 방식으로 최소한의 코드 개발로 모바일 앱으로 부터 모든 데이타를 수집할 수 있다. 파이어베이스 애널러틱스는 안드로이드와 iOS 플랫폼을 지원한다.
게임 프레임웍 지원
반가운 소식중의 하나는 파이어베이스 애널러틱스가 이제 유니티3D나, 언리얼(C++) 과 같은 게임 엔진을 지원한다. 현재 두 플랫폼에 대한 지원은 베타로 공개되어 있다.
기본적으로 gradle 빌드 스크립트에 파이어베이스 애널러틱스 모듈을 import 하고, FirebaseAnalytics 객체만 선언해주면 기본적인 사용자 로그 (앱 실행, 종료등), 일일 방문자, 동시 접속자, 접속 디바이스 종류, 사용자 연령과 성별들을 모두 수집해준다.
빌드 스크립트 수정 및 소스코드에 한줄의 코드만 추가해주면 된다.
다음으로, 각각의 이벤트를 추가하고자 한다면, 위와 같이 Bundle 객체를 정의해서, 넘기고자 하는 인자를 정의해주고 logEvent라는 메서드를 호출해주면 파이어베이스로 로그가 전달된다.
유니티 3D 예제 코드
유니티 3D에서 파이어베이스에 로그를 남기는 것도 다르지 않다.
다음 코드를 보자
Firebase.Analytics.Parameter[] param = {
new Firebase.Analytics.Parameter("sessionid", sessionid),
new Firebase.Analytics.Parameter("score", (string)ApplicationModel.score.ToString())
Parameter라는 배열로, 파이어베이스에 남길 로그의 인자들을 정의한후에, LogEvent 메서드를 이용하여 이벤트 명과, 앞에서 정의된 인자들 (Parameter)를 남겨주면 로그는 자동으로 파이어베이스로 전달된다.
파이어베이스 애널러틱스를 이용한 모바일 데이타 분석
그러면 파이어베이스를 이용하여 모바일 로그 분석을 어떻게 할 수 있는지 알아보자. 마침 유니티 3D가 얼마전 부터 베타로 지원이 되기 때문에, 간단한 게임을 이용한 로그 수집을 설명한다.
샘플 게임 설명
샘플에 사용한 게임은 간단한 RPG 형태의 게임으로 다음과 같이 구성된다.
시작 화면
시작화면에서는 로그 분석을 위해서, 사용자의 나이와 성별을 입력 받는다.
게임 화면
다음 게임이 시작되면, 화면을 터치하여 토끼 캐릭터를 이동 시키고, 돼지를 클릭하면 돼지를 공격한다.
돼지를 공격할때 마다 데미지는 돼지의 종류에 따라 일정 값 범위내에서 랜덤으로 판정되고, 생명 값이 남아있지 않으면 돼지가 죽게 된다.
맵내에 돼지는 7개가 유지되도록 되어 있으며, 돼지가 줄면, 돼지는 하늘에서 부터 떨어지게 되어 있다.
게임은 120초 동안 진행되며, 120초가 지나면 자동으로 종료된다.
종료 화면
게임이 종료되면 점수를 표시한다.
데이타 분석 지표 디자인
그러면 이 게임으로 어떻게 데이타를 분석할것인지에 대해서 고민해보자.
일일 접속 사용자나 사용자에 대한 사용 시간,횟수등은 파이어베이스 애널러틱스에서 기본적으로 수집이 되기 때문에, 조금 더 의미 있는 데이타를 수집해보도록 한다.
캐릭터 이동 히트맵
이 예제에서 다소 중점을 둔 부분중의 하나는 캐릭터 이동 히트맵이다.
게임에서 난이도 조정등에 사용할 수 있는 정보중의 하나가 NPC 캐릭터의 이동 동선과, 플레이어 캐릭터의 이동 동선이다. 주로 플레이어가 죽는 위치를 데드존 (Dead zone)이라고 하면, 이 데드존 위치를 찾아낼 수 있고, 이 데드존에서 플레이어와 NPC의 타입,레벨 등을 조사하여 난이도를 조정한다거나, 또는 AI(인공지능) 플레이어 캐릭터의 경우에는 이동 동선을 추적함으로써 맵 내에서 AI가 원하는 데로 잘 움직이는지를 추적해볼 수 있다.
아래는 데드존을 기반으로 캐릭터와 NPC의 레벨을 분석해놓은 예제이다.
<그림. 게임맵상에서 데드존의 플레이어와 NPC 캐릭터간의 레벨 분석 >
아래는 흥미로운 분석중의 한예인데, 게임맵에서, 각 위치별로 자주 발생하는 채팅 메세지를 표시한 내용이다.
<그림. 게임맵상에서 자주 사용되는 채팅 메세지 분석>
그림 출처 : http://www.cs.cornell.edu/courses/cs4152/2013sp/sessions/15-GameAnalytics.pdf
이런 시스템 역시 쉽게 개발이 가능한데, 파이어베이스 애널러틱스를 이용하여 채팅 로그를 수집한 후, 자연어 분석 API를 이용하면, 명사와 형용사등을 추출하여 자주 오가는 말들을 통계를 낼 수 있다.
다음으로 일반적인 분석 시스템에서 수집되지 않는 커스텀 로그 분석 시나리오중 사용자 나이별 점수대를 분석해본다.
게임실행에서 종료까지 실행한 사용자
마지막으로 유용하게 사용되는 퍼널 분석의 예로 게임을 시작해서 종료할때까지의 도달율을 측정해봤다.
게임을 인스톨하고 시작한다음, 캐릭터를 움직이고, 캐릭터를 이용하여 공격을하고, 2분동안 플레이해서 게임을 종료한 사용자의 비율을 분석해본다.
로그 메세지 디자인
그러면 이러한 게임 로그를 분석하기 위해서 수집할 로그 메세지는 어떤 형태가 될지 디자인을 해보자.
로그 이벤트는 아래와 같이 7가지로 정의한다.
START_SESSION,END_SESSION 은 게임을 시작과 끝날때 발생하는 이벤트이다.
NPC_CREATE,NPC_MOVE,NPC_DIE 는 NPC(돼지)를 생성하고 이동하고, 그리고 죽었을때 각각 발생하는 이벤트이다. 이동은 이벤트의 수가 많기 때문에, 10초 단위로 수집하였다.
PLAYER_MOVE,PLAYER_ATTACK 은 플레이어 캐릭터의 이동과 NPC를 공격하는 이벤트를 수집한다.
각 이벤트를 플레이하는 판과 연결하기 위해서 각 플레이는 고유의 sessionid가 생성되서 게임이 시작될때부터 끝날때 까지 모든 이벤트에 저장된다.
Event name
Param
Key
Value
Type
Note
START_SESSION
This event is triggered when player press “START” button after submitting player’s age & gender
sessionid
Unique session Id for this play
String
age
Player’s age
String
sex
Player’s gender
String
true : man
false : woman
PLAYER_MOVE
It record location of player in game map periodically (every 2sec)
sessionid
Pos_X
Pox_Z
PLAYER_ATTACK
This event is occurred when player attack NPC.
sessionid
Unique session Id for this play
npc_id
Attacked NPC ID
type
Type of NPC
pos_X
NPC location X
pos_Z
NPC location Y
damage
Damage that NPC get in this attack
life
Left life for this NPC
NPC_CREATE
When new NPC is created, this event is logged.
sessionid
Unique session Id for this play
npc_id
Attacked NPC ID
type
Type of NPC
pos_X
NPC location X
pos_Y
NPC location Y
NPC_MOVE
Every 2sec for each NPC, it records the location of NPC.
sessionid
Unique session Id for this play
npc_id
Attacked NPC ID
type
Type of NPC
pos_X
NPC location X
pos_Y
NPC location Y
NPC_DIE
It is triggered when NPC is dead by attack
sessionid
Unique session Id for this play
npc_id
Attacked NPC ID
type
Type of NPC
pos_X
NPC location X
pos_Y
NPC location Y
END_SCENE
It is triggered when game stage(session) is over
sessionid
Unique session Id for this play
score
Score for this play
이렇게 정의된 로그는 파이어베이스 애널러틱스에 의해서 빅쿼리로 자동으로 저장되게 된다.
실시간 디버깅
이런 로깅을 삽입하면, 로그가 제대로 저장이 되는지 확인이 필요한데, 파이어베이스 애널러틱스는 특성상 로그 이벤트가 1000개가 쌓이거나 또는 컨버전 이벤트가 발생하거나 또는 1시간 주기로 로그를 서버에 전송하기 때문에 바로 올라오는 로그 메세지를 확인할 수 없다.
그래서 이번에 새로 소개되니 기능이 “DEBUG VIEW”라는 기능인데, 이 특정 디바이스에 디버깅 옵션을 지정하면, 실시간으로 올라오는 로그를 확인할 수 있다.
로그는 모바일앱에서 업로드한 후 약 10~20초 후에, 화면에 반영된다.
대쉬 보드를 이용한 지표 분석
대쉬 보드는 파이어 베이스 애널러틱스에서 기본으로 제공되는 지표로 모바일 서비스에 공통적으로 필요한 지표들을 분석하여 웹으로 출력해준다.
DAU/WAU/MAU 분석
가장 기본적인 지표로는 월간,주간,일간 방문자 수로를 그래프로 출력해준다.
평균 플레이 시간 분석
다음은 평균 플레이 시간으로, 사용자가 하루에 평균 얼마나 앱을 사용하였는지, 동시 접속자수 (Session)과, 한번 접속했을때 얼마나 오래 앱을 사용 하였는지 (Session duration)등을 분석하여 그래프로 출력해준다.
국가별 접속 내역 분석
다음은 국가별 접속 내용으로, 글로벌 서비스에는 필수로 필요한 분석 내용이다.
사용자 데모그래픽 정보 분석
사용자에 대한 데모 그래픽 정보 즉 성별과, 나이를 분석해주는데, 앱에 별도로 사용자 로그인 기능이 없거나, 사용자 정보를 추적하는 기능이 없더라도, 파이어베이스 애널러틱스는 여러군데에서 수집한 로그를 기반으로 사용자의 성별과 나이를 분석해 준다.
특정 이벤트에 대한 분석
다음은 특정 이벤트에 대한 분석이 가능하다. 게임에서 사용자가 스테이지를 넘어가는 이벤트등 파이어베이스에 정의된 이벤트 이외에도 사용자가 정의한 이벤트에 대한 분석이 가능하다.
또한 이벤트가 발생한 사용자에 대한 데모 그래픽 정보 (연령,성별,국가)를 같이 분석해서 해당 이벤트가 어떤 사용자 층에서 발생하였는지를 분석해 준다.
예를 들어 게임의 보너스 스테이지를 많이 클리어한 사용자의 통계만을 볼 수 있고, 그 보너스 스테이지를 클리어한 사용자의 나이,성별, 국가 정보등을 볼 수 있다.
게임 플레이 완료율에 대한 퍼널 분석
다음은 앞에서 데이타 분석 모델을 정의할때 정의한 문제로 사용자가 게임을 시작해서 플레이를 끝낸 사용자 까지를 퍼널(깔때기) 분석을 적용한 예이다.
해당 시간에 총 93번의 게임이 플레이 되었으며, 캐릭터까지는 이동하였으나, 공격을 하지 않은 플레이는 3번, 그리고 끝까지 게임 플레이를 끝낸 사용자는 총 62번으로 측정되었다.
이외에도 상품 구매에 대한(인앱)에 대한 분석이나, 디바이스 종류, 앱 버전, 그리고 어느 광고 네트워크에서 사용자가 인입되었는지 등의 분석등 다양한 분석이 가능한데, 대쉬보드의 자세한 지표에 대해서는 http://bcho.tistory.com/1132 를 참고하기 바란다.
노트북을 이용한 커스텀 로그 분석
앞에서는 파이어베이스에서 제공되는 로그와 분석 방법에 대해서만 분석을 진행하였다. 이번에는 커스텀 로그와 원본(raw)데이타를 이용한 데이타 분석에 대해서 알아보자.
모든 원본 데이타는 앞에서도 언급했듯이 구글의 빅쿼리에 저장되기 때문에, SQL 쿼리를 이용하여 자유롭게 데이타 분석이 가능하고 그래프로도 표현이 가능하다.
별도의 개발이 없이 자유롭게 쿼리를 실행하고 그래프로 표현할 수 있는 도구로는 노트북이 있는데, 빅쿼리는 주피터 노트북과 제플린이 지원된다. 주피처 노트북 오픈소스를 구글 클라우드에 맞춘 버전은 Google Cloud Datalab이라는 것이 있는데, 여기서는 데이타랩을 이용하여 분석하였다.
캐릭터 이동 히트맵 분석
앞에서 NPC_MOVE와 PLAYER_ATTACK을 이용하여, NPC의 이동 동선과, PLAYER가 공격을 한 위치를 수집하였다.
이를 히트맵으로 그려보면 다음과 같다.
좌측은 NPC가 주로 이동하는 경로이고 우측은 플레이어가 NPC를 주로 공격한 위치로, 많이 간곳일 수록 진하게 칠해진다.
NPC 캐릭터는 전체 맵에 걸쳐서 이동을 하는 것을 볼 수 있고, 주로 우측 나무 근처를 많이 움직이는 것을 볼 수 있다. 오른쪽 사용자가 공격한 위치를 보면 주로 중앙에 모여 있기 때문에 우측 나무 근처로 움직인 NPC는 생존 확률이 높았을 것으로 생각해볼 수 있다.
그리고 NPC 이동 맵에서 중간중간에 진하게 보이는 점은 NPC 가 생성되는 위치이기 때문에, 이동이 많이 관측되었다.
연령별 플레이 점수 분석
다음으로 플레이어 연령별 점수대를 보면, 최고 점수는 30대가 기록하였고, 대략 4900점대인데 반해서, 전체적인 평균 점수는 40대가 높은 것을 볼 수 있다. (이 데이타는 연령별로 수집된 데이타의 양이 그리 많지 않기 때문에 정확하지는 않다. 어디까지나 분석 예제용으로만 이해하기 바란다.)
분석에 사용된 코드는 아래에 있다. 이 코드는 데모용이고 최적화가 되어있지 않기 때문에, 운영 환경에서는 반드시 최적화를 해서 사용하기 바란다.
참고로, 모든 데이타 분석은 주로 파이썬을 이용하였는데, 근래에 빅데이타 분석용 언어로 파이썬이 많이 사용되기 때문에, 파이썬을 공부해놓으면 좀 더 쉽게 데이타 분석이 가능하다. 또한 파이썬으로 데이타를 분석할때 많이 쓰이는 프레임웍으로는 팬다스 (pandas)와 넘파이 (numpy)가 있는데, 이 둘 역시 같이 익혀놓는것이 좋다.
파이어베이스 노티피케이션 서비스를 통한 이벤트 기반의 푸쉬 타게팅
파이어베이스 애널러틱스와 연계해서 유용하게 사용할 수 있는 기능은 파이어베이스 노티피케이션 이라는 서비스가 있다.
파이어 베이스 노티피케이션 서비스는 파이어베이스에서 제공되는 웹 콘솔을 이용하여 관리자가 모바일 서비스에 손쉽게 푸쉬 메세지를 보낼 수 있는 서비스이다.
푸쉬 타게팅을 위한 별도의 서버 시스템을 개발하지 않고도 마케팅이나 기획자등 비 개발인력이 타게팅된 푸쉬 메세지를 손쉽게 보낼 수 있게 디자인된 서비스인데, 특히 파이어 베이스 애널러틱스와 연계가 되면 세세한 타게팅이 가능하다.
이벤트 로그 기반의 타케팅
푸쉬 타겟을 정할때, 파이어베이스 애널러틱스에서 수집한 이벤트를 조건으로 해서 푸쉬를 타게팅할 수 있다.
예를 들어
게임 스테이지 3 이상을 클리어한 플레이어한 푸쉬를 보낸다.
NPC를 10,000개 이상 죽인 플레이어에게 푸쉬를 보낸다.
아이템을 100개이상 구매한 사용자에게 푸쉬를 보낸다.
와 같이 서비스에서 수집된 이벤트에 따라서 다양한 조건을 정의할 수 있다.
<그림. 파이어베이스 노티피케이션에서 특정 사용자 층을 타게팅 해서 보내는 화면 >
이런 타게팅은 파이어베이스 애널러틱스에서 Audience로 사용자 군을 정의한 후에, (로그 이벤트 조건이나 사용자 이벤트 조건 등), 이 조건에 타겟해서 푸쉬를 파이어베이스 노티피케이션 서비스에서 정의한다.
사용자 정보 기반의 타게팅
서비스의 로그 이벤트 정보뿐 아니라, 사용자에 대해서도 푸쉬 타게팅이 가능한데, 특정 성별이나 나이에 대해 푸쉬를 보내거나, 특정 단말을 사용하는 사용자, 특정 국가에 있는 사용자등 다양한 사용자 관련 정보로 푸쉬를 보낼 수 있다.
사용자 정보 역시 앞의 이벤트 로그 정보처럼 개발자가 커스텀 필드를 추가하여 사용자 정보를 로그에 수집할 수 있다.
스케쥴링
이런 타게팅 푸쉬는 바로 웹에서 보낼 수 도 있지만, 특정 시간에 맞춰서 미리 예약을 해놓는 것도 가능하다.
비용 정책 분석
파이어베이스 애널러틱스에서 원본 데이타를 수집 및 분석 하려면 빅쿼리를 연동해야 하는데, 빅쿼리 연동은 파이어베이스의 무료 플랜으로는 사용이 불가능하다. Blaze 플랜으로 업그레이드 해야 하는데, Blaze 플랜은 사용한 만큼 비용을 내는 정책으로 다른 서비스를 사용하지 않고, 파이어베이스 애널러틱스와 빅쿼리 연동만을 사용할 경우에는 파이어베이스에 추가로 과금되는 금액은 없다. (0원이다.)
단 빅쿼리에 대한 저장 가격과 쿼리 비용은 과금이 되는데, 빅쿼리 저장 가격은 GB당 월 0.02$ 이고, 90일동안 테이블의 데이타가 변하지 않으면 자동으로 0.01$로 50%가 할인된다.
노트북은 비지니스에 전달하기 위한 멋진 액셀이나 대쉬보드와 같은 리포트 보다는 데이타를 다루는 데이타 과학자와 같은 사람들이 사용하는 분석도구인데, 제품의 이름 처럼 노트북의 개념을 가지고 있다.
예를 들어서 설명해보자 우리가 수학문제를 풀려면 연습장을 펴놓고 공식을 사용해가면서 하나하나 문제를 풀어나간다. 이처럼, 빅데이타 분석을 하려면, 여러데이타를 분석해가면서 그 과정을 노트하고 노트한 결과를 기반으로 다음 단계의 문제를 풀어나가는 것이 통상적인데, 노트북 소프트웨어는 문제 풀이에 있어서 기존의 연습장 노트와 같은 사용자 경험을 제공한다.
이러한 노트북 소프트웨어의 특징은 메모를 위한 글과, 계산을 위한 소스 코드를 한페이지에 같이 적을 수 있고, 이 소스 코드는 노트북 내에서 실행이 가능하고 결과도 같은 페이지에 출력해준다.
다음 화면은 본인이 작성했던 노트북의 일부로 딥러닝 프레임웍인 텐서플로우에 대해서 공부하면서 간단하게 문법과 샘플 코드를 노트북에 정리한 예이다.
데이타랩
구글의 데이타랩(https://cloud.google.com/datalab/) 은 오픈소스 주피터 노트북을 구글 클라우드 플랫폼에 맞게 기능을 추가한 노트북이다. 기본이 되는 주피터 노트북이 오픈소스이기 때문에, 데이타랩 역시 오프소스로 코드가 공개되어 있다.
데이타랩은 기본으로 파이썬 언어를 지원하며, 빅쿼리 연동등을 위해서 SQL과, 자바 스크립트를 지원한다.
또한 머신러닝의 딥러닝 프레임웍인 텐서플로우도 지원하고 있다.
데이타랩에서 연동할 수 있는 데이타는 구글 클라우드상의 VM이나, 빅쿼리, Google Cloud Storage
데이타랩은 오픈소스로 별도의 사용료가 부가되지 않으며, 사용 목적에 따라서 VM에 설치해서 실행할 수 도 있고, 로컬 데스크탑에 설치해서 사용할 수 도 있다. 도커로 패키징이 되어 있기 때문에 도커 환경만 있다면 손쉽게 설치 및 실행이 가능하다.
이번에는 차트를 사용하는 방법을 알아보자, 안드로이드 로그에서 이벤트 로그중에, 많이 나오는 로그 20개에 대한 분포도를 파이 차트로 그려내는 예제이다.
%%sql --module events
SELECT event_dim.name as event_name, COUNT(event_dim.name) as event_count
FROM [firebase-analytics-sample-data:android_dataset.app_events_20160601]
GROUP BY event_name
ORDER BY event_count DESC
LIMIT 20
쿼리 결과를 --module 명령을 이용하여 events라는 모듈에 저장한후
%%chart pie --fields event_name,event_count --data events
title: Event count
height: 400
width: 800
pieStartAngle: 20
slices:
0:
offset: .2
구글 차트 명령을 이용하여 pie 차트를 그린다. 필드는 앞의 모듈에서 쿼리한 event_name과 event_count 필드를 이용하고, 데이타는 앞에서 정의한 “events” 모듈에서 읽어온다.
차트 실행 결과는 다음과 같다.
이외에도 Tensorflow 연동이나 GCS를 연동하는 방법, 그리고 구글 차트 이외에 일반 plot 함수를 이용하여 그래프를 그리는 등 다양한 기능을 제공하는데, 이에 대한 자세한 설명은 데이타랩을 설치하면 /docs/README.md 파일을 참조하면 다양한 가이드를 찾을 수 있다.
이번 회사는 노트북을 한대밖에 안주는 관계로.(?) 집에서 작업용으로 노트북을 한대 구입했습니다. 기존의 맥을 팔고 한 10만원 보태서 구매했습니다.
집에 있는 맥북은 와이프 전용이 되어 버렸고.. 집에서 공부겸 잔업겸으로 전용 노트북이 한대 필요했거든요..
주문하려도 몇가지 고민좀 하다가 주문 당일 되니까는 I3 코어 모델이 나와서 구매했습니다. I3 치고는 싼건지.. 아니면 델이 싼건지는 잘 모르겠습니다만, 삐까뻔쩍한게 기분은 좋습니다. 키보드 터치도 마음에 들구요. 카메라도 달렸군요. 출장가면 유용하겠습니다.
포트들을 보니까는 약간 싼티가 납니다. ㅜㅡ
전체적으로 메탈 소재라서 지금은 멋집니다만, 나중에 기스나고, 지문 묻으면 장난 아니겠군요.
오늘 매우 피곤한데, 그래도 개봉이라도 해보고 잘라고 켰습니다만, 가격대비 대략 만족합니다.
그나저나 노트북에 개발툴이랑 환경 세팅하려면 또 하루 보내야겠군요.
댓글을 달아 주세요
헙. 구글 뉴스에 올라오셨네요.
"결국은 가격이 문제 260만원이다.. 아.. 가지고 싶지만. 다른 랩탑보다 100~150만원은 비싼듯.. 이 돈이면 애들 학원을 하나 더 보내지.."
같은 딸 둘 아빠로써 짠하네요..
일반 윈도우 OS에서 모바일과 웹/cs/DB관련 개발한다면 Y530 vs Inspiron7580 둘 중 어느게 좋을까요?
휴대용이라면 insprion, 놓고 쓰실거면 Y530
Y530 강추드립니다
확장해서 2tb hdd 512 ssd 우분투 기반
멀티 오에스해도 끄덕 없어요 ㄷㄷ
매우 좋습다
거기에 1060
개발자분들 학습용으론 최고에요 두번쓰세여
근데 땅크라서 못들고다녀요
제가 It 이제 배우고있는데 노트북이 필요할것같은데 무게는상관없이 좋은노트북좀 추천좀 해주실수있으실까여
발열 문제가 심하다던데 괜찮나요?ㅎㅎ
발열은 잘 모르겠고, 배터리가 많이 약하네요
안녕하세요 1년이 지난 시점이라 안 보실 공산이 높다고 생각하지만 그래도 궁금해서 댓글 남깁니다.
현재도 우분투 윈도 듀얼부트로 사용하시나요?
윈도 WSL이 많이 좋아졌다고 들어서 윈도만 깔아서 WSL 배워볼까 하는데 어떻게 생각하시나요?