이번 포스팅에서는 실시간 분산 처리 시스템인 Storm과 CEP 처리 시스템인 Esper의 성능 테스트에 대해 적고자 한다. 지난 포스팅 중 Storm-Esper에 관한 연구 결과가 있으니 참조 바란다.

테스트 진행 구조상 어쩔수 없이 성능테스트에 Kafka까지 포함되었는데, Kafka 단일 테스트가 궁금하다면 여기를 참조하길 바란다.

이번 성능 테스트를 통해 이벤트 발생률과 양에 따른 Engine의 성능 변화분산 환경에서 노드 증가에 따른 성능 변화를 알아보고자 한다.


구조


이벤트가 Kafka로 들어가는 순간부터 이벤트가 Kafka를 통해 나오는 순간까지의 구간을 측정하였으며, Kafka로 이벤트를 보내고 받는 부분은 Performance Tester를 구현하여 사용하였다.

    * Kafka 단일 테스트는 여기 참조


테스트 환경


성능 테스트를 진행한 장비의 환경은 다음과 같다.


테스트 방법


먼저 이벤트 발생률과 양에 따른 Engine의 성능 변화를 알아보기 위해, 아래 (1)과 (2) 테스트를 진행하였다.

(1) 이벤트 발생 빈도

- 방법 : 이벤트가 발생하는 빈도를 0.01%, 25%, 50%, 75%, 100%로 증가시키며 TPS 측정

- 가설 : 이벤트 발생 빈도가 증가 할수록 성능 감소

(2) 이벤트 개수

- 방법 : 이벤트 개수를 50만개부터 250만개까지 50만개씩 증가시키며 증가시키며 TPS 측정 

- 가설 : 이벤트 개수가 증가해도 성능 일정


다음으로는 분산환경에서 노드 증가에 따른 성능 변화를 알아보기 위해, 아래 (3) 테스트를 진행하였다. 

(3) Worker 개

- 방법 : Worker 개수를 1부터 4까지 하나씩 증가시키며 TPS 측정

- 가설 : Worker 개수가 증가 할수록 성능 증가


Storm Topology 구성


(1) 이벤트 발생 빈도, (2) 이벤트 개수 테스트의 Topology 구성

(3) Worker 개수 테스트의 Topology 구성


테스트 결과


(1) 이벤트 발생 빈도

  • 고정 변
    1. 이벤트 개수 : 100만개
    2. Worker 개수 : 1개
  • 이벤트 발생 빈도가 증가할수록 성능은 감소한다는 가설과 일치


(2) 이벤트 개수

  • 고정변수
    1. 이벤트 발생 빈도 : 25%
    2. Worker 개수 : 1개
  • 이벤트 개수가 증가해도 성능은 일정하다는 가설과 일치


(3) Worker 개수

  • 고정 변수
    1. 이벤트 발생 빈도 : 50%
    2. 이벤트 개수 : 100만개
  • Worker 개수가 증가 할수록 성능은 증가한다는 가설과 일치한다.
  • 참고로 1-2 구간과 2-4 구간의 Throughput의 증가량이 다른 이유는 테스트에 사용된 장비의 성능이 일정하지 않기 때문이다.


결과 정리


테스트 모두 가설과 일치하는 결과가 나왔으며, 한번 더 간단히 정리하면 아래와 같다.

(1) 이벤트 발생 빈도

  이벤트 발생 빈도가 증가할수록 성능은 감소

(2) 이벤트 개수

  이벤트 개수가 증가해도 성능은 일정

(3) Worker 개수

  Worker 개수가 증가 할수록 성능은 증가

  


Reference 


  Storm    https://storm.apache.org/

  Esper     http://www.espertech.com/




Posted by 알 수 없는 사용자
,

2015년 4월 18일 spring camp가 양재 AT센터에서 열렸습니다. 


2013년부터 참가했던 기술 세미나라서 요번 년도에도 먼가 등록해야 할 거 같은 의무감이 생기더군요. 


물론 세미나에 좋은 세션들이 많아서 그렇습니다.  ^^ 




3개의 Track 중에서 오픈소스를 다루고 있는 Track B를 선택해서 들었습니다.  


Track  B에 세가지 세션을 들었는데 아래와 같습니다.  


첫번째, XSS는 네가 맡아라, XSS 공격 방어 라이브러리 소개


두번째, 내가 써본 nGrinder


세번째,대규모 분산 시스템 추적 플랫폼 Pinpoint 


세션에 대한 간단한 소개를 해볼까요?


1. XSS는 네가 맡아라, XSS 공격 방어 라이브러리 소개 


XSS에 대해서는 처음 들어봤던 저는 바로 구글신에 검색을 해봤는데요. 아래와 같습니다. 


웹 애플리켜이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다. 


더 알아보고 싶으면 위키에서 더 보실수 있습니다. 


이 세션에는 악의적인 XSS 코드의 위험으로부터 웹 애플리케이션을 보호 하는 작업을 간단한 XML설정만으로 XSS공격을 방어해주는 Java 필터 라이브러리  lucy - xss filter를 소개하는 시간이었습니다. 




2 . 내가 써본 nGrinder

nGrinder는 성능테스트를 할때 쉽게 설치하여 무료로 테스트 할 수 있는 거기다가 UI가 이쁘기 까지 한 솔루션입니다. 
nGrinder를 잠깐 써봤던 저는 다른 사람은 어떻게 nGrinder를 쓸까 궁금해서 들었던 세션입니다. 



3,대규모 분산 시스템 추적 플랫폼 Pinpoint




Pinpoint 는 대규모 분산 시스템의 성능을 분석하고 문제를 진단,처리하는 플랫폼입니다. 


Embian 내에서 Pinpoint 이야기가 나와 들었던 세션입니다. 



Github: https://github.com/naver/pinpoint


이렇게 세션에 대한 간단한 소개를 해 보았습니다. 


2013년 학생 시절 부터 Spring Camp에 참가했었는데요. 


처음 학생 시절 참가 했을 때 보다 주니어 개발자가 된 지금 세션에 대해 전 보다 많은 내용을 이해 할 수 있게 되었습니다. ^^


2016년 Spring Camp 에서는 이번 세미나보다 더 많은 내용을 이해하고 또 좋은 질문을 할 수 있도록 성장하도록 노력해야겠습니다.


그리고 Spring Camp 2016에 자원 봉사자로도 활동 해 보고 싶네요 :)


이상 Spring Camp 2015  참가 후기였습니다. 

















Posted by 알 수 없는 사용자
,

최근 프로젝트에서 웹에서 차트를 그릴 일이 있어 javascript library들을 이것 저것 찾아보고 써본적이 있다.

그중 가장 돋보이던 것이 D3.js 였는데, 그동안 항상 보아오던 그래프들 이외에도 정말 다양한 형태의 차트들과 아름답기까지한 실제 적용 사례들을 하루종일 처다본적이 있었다.

지금 당장은 아니더라도 나중에 어딘가에 꼭 써먹을 수 있을 것 같아, 몇가지 차트와 예제들을 정리해 보기로 했다.


1. Box Plots

주식을 하는 사람들에게는 정말 친숙한 차트인것 같다.

Box Plots은 다섯가지의 통계 지표와 양적 분포를 한눈에 쉽게 파악 할 수 있도록 디자인된 그래프로 주식을 하는 사람들에게는 정말 친숙한 그래프인것 같다.

출력되는 정보를 보면 "최대값", "최소값", "평균값", "상위사분위수", "하위사분위수"를 표현할 수 있으며, 간혹 알 수 없는 원인으로 인해 튀는 값으로 인해 최소값이나 최대값의 신뢰도가 떨어지는 경우를 대비해 "튀는 값"들에 대한 디스플레이는 작은 원으로 따로 표시 할 수도 있다.

예제1: Box Plots이 실시간 변동되는 그래프 예제 링크




2. Bubble Chart

수치 데이터를 원으로 표현하는 그래프로 Bar Chart에 비해 데이터에 대한 수치적 표현력은 떨어지지만, 더 작은 공간에 더 많은 데이터를 표현 할 수 있다.

그리고 Bar Chart로 표현했을 때보다 조금 더 감성적으로 데이터를 표현 할 수 있어, 수치 데이터보다 감정적인 측면을 어필 하고 싶을 때 사용하면 좋을 것 같다.

예제2: Box Plots이 Bubble Chart 예제 링크




3. Bullet chart

Stephen Few라는 사람이 작은 공간에 풍부한 데이터를 출력하기 위한 디자인한 차트라고 한다.

전체범위와 분위를 바탕으로 목표치와 현재 달성치, 지난 달성치등을 표시하기에 적합한 차트로, 주로 매출 현황이라던가 프로젝트 진행 상황등을 표현하기에 적합한것 같다.

예제3: Bullet Chart가 실시간 변동되는 그래프 예제 링크



4. Chord Diagram


Chord Diagram은 그룹간의 Relationship을 직접적으로 표현 할 수 있는 그래프로 바로 이전 스템과 현재 스템 사이에서 그룹간에 어떤 변화가 있었는지를 직관적으로 표현이 가능하다. 이건 글로 설명하는 것 보다 직접 예제를 보는 것이 이해가 빠를 것 같다.

예제는 약 2,000명 정도의 스마트폰 유저를 대상으로 현재 사용중인 스마트폰의 제조사와 바로 이전에 사용하던 스마트폰의 제조사를 조사한 결과를 Chord Diagram으로 표현한 것이다.

예제4: Chord Diagram으로 설명하는 스마트폰 제조사간 점유율 추이 링크



5. Treemap


Treemap은 사각형 반복적으로 배치해서 데이터를 그룹핑해 보여주는 그래프로, 여러개의 그룹으로 구성된 구조나, 양파껍질 같은 스택 구조를 표현하기에 적합하다. 가장 쉽게 접할 수 있는 예제가 소프트웨어 스택인데, 위의 그래프는 Flare visulaization toolkit의 package정보를 Treemap으로 보여주는 그래프이다.

예제5: 실시간으로 변동하는 Treemap 예제 링크



6. Sunburst Partition


Treepmap을 원형(해바라기 모양)으로 표현한 그래프가 Sunburst Partition으로 Treemap 보다 시작적으로 더 아름다운 표현이 가능하다. 예제는 쇼핑몰의 웹페이지 Access Log를 바탕으로 사용자의 웹페이지 방문 패턴을 Interactive하게 표현했다.

예제6: Interactive한 Suburst Partition 예제 링크



7. Sankey Diagram

Sankey Diagram은 각 노드 사이의 데이터 흐름을 시각화한 그래프로 예제는 2050년 영국의 에너지 생산과 소비에 대한 예측치를 표현한 것이다. 그래프를 보면 2050년에는 에너지 원료중 핵이 가능 높은 비중을 차지하고 있는 것을 볼 수 있으며, 핵에너지는 모두 열로 변환되고, 변환된 열중 절반정도는 손실되며, 나머지는 거의 대부분 전기로 변환 되는 것을 알 수 있다.

예제7: 2050년도 영국 에너지 생산과 소비 예측 링크



8. The Wealth & Health of Nations

마지막 예제는 Data Visualization을 이야기 할 때 많이 소개되는 그래프로 1800년부터 2009년까지 각 나라의 경제력과 국민들의 평균 수명을 조사한 데이터를 그래프로 설명한 작품이다.

처음 페이지에 접근하면 1800년도부터 2009년까지 그래프가 차츰차츰 변화하면서, 각 나라의 경제력과 수명이 어떻게 변화해 가는지를 시각적으로 잘 표현하고 있다.

우리나라의 데이터를 집중적으로 따라가 보는 것도 재미 있을 것이다.(1800년부터 한국과 북한이 따로 표기되어 있는 점이 좀 이상하긴 하다.)

예제8: The Wealth & Health of Nations 링크


9. 마무리

종이에 이차원으로 표현되던 정적인 데이터가 IT 기술과 미디어의 발달에 힘입어 실시간으로 변화하는 데이터까지 표현할 수 있게 되면서, Data Visualization은 이제 하나의 예술 분야로 까지 인식되고 있는 것다.

비록 아직도 그래프를 그리라고 하면, Bar Chart, Line Chart 같은 클래식한 그래프들을 먼저 생각할 수 밖에 없는 비루한 미적 감각을 가지고 있지만, 이런 다양한 그래프와 작품들을 보다보면, 언젠가는 나도 멋지고 훌륭한 그래프를 그릴 수 있지 않을까 기대해 본다.


*참고사이트

D3.js - http://d3js.org

Mike Bostock - http://bost.ocks.org

VISUAL CINNAMON - http://www.visualcinnamon.com



Posted by 알 수 없는 사용자
,

eBay Pulsar

Pulsar – an open-source, real-time analytics platform and stream processing framework. Pulsar can be used to collect and process user and business events in real time, providing key insights and enabling systems to react to user activities within seconds. In addition to real-time sessionization and multi-dimensional metrics aggregation over time windows, Pulsar uses a SQL-like event processing language to offer custom stream creation through data enrichment, mutation, and filtering. Pulsar scales to a million events per second with high availability. It can be easily integrated with metrics stores like Cassandra and Druid.



01234567891011121314151617181920



SlideShare : http://www.slideshare.net/kyoungmoyang/ebay-pulsar


References: 

http://www.ebaytechblog.com/2015/02/23/announcing-pulsar-real-time-analytics-at-scale/#.VQIuqBCsVW2

http://gopulsar.io/

http://gopulsar.io/html/docs.html

https://github.com/pulsarIO/realtime-analytics/wiki

https://spark.apache.org/

https://storm.apache.org/

http://www.espertech.com/

Posted by 알 수 없는 사용자
,

naver pinpoint

Newbie's Log 2015. 3. 7. 19:04

 

 

얼마 전 Naver pinpoint 오픈 소스가 공개 되었다.

pinpoint는  어플리케이션 성능 측정 (Application Performance Management: APM) 도구로서 java로 쓰여진 대규모 분산된 어플리케이션 에서 수행괴는 트랜잭션을 추적하여 프로파일링 데이터를 제공한다. 현재 인프라에서 어플리케이션까지 다양한 네이버 내부 시스템의 장애 분석 및 성능 개선에 사용되고 있다고 한다.

pinpoint는 Google의 Dapper paper를 모델로 하였으며, 시스템의 전체 구조를 분석하고 그 안의 분산 어플리케이션 구성 요소를 통해 트랜잭션을 추적함으로서 어떻게 상호간에 연결되는지를 보여주는 솔루션을 제공한다.

단 한줄의 코드를 변경하지 않고 agent를 설치할수 있으며, 성능에 미치는 영향을 최소화 (자원 사용량이  약 3% 증가) 한다고 한다.

 

Overview

요즘 서비스들은 자체 통신 뿐만 아니라 외부 서비스에 대해 API를 호출하는 서로 많이 다른 구성요소들이 존재한다. pinpoint는 이런 구성요소들 사이의 트랜잭션이 흘러 문제가 생기는 영역과 병목 현상을 볼 수 있는 명확한 뷰를 제공하고 있다.

제공하는 뷰들에 대해 알아보자.

 

ServerMap

각 구성 요소가 어떻게 상호 연결 되어있는지 시각화 함으로서 분산된 시스템의 Topology를 이해하며, 각 노드를 클릭하여 현재 상태, 트랜잭션 수 등과 같은 구성요소에 대한 세부 사항을 확인할 수 있다.

Request/Response Scatter Chart

Request 수, Response 패턴을 시각화 해주며, 트랜잭션은 차트를 드래그 함으로서 상세 정보를 확인할 수 있다.

 

CallStack

분산 환경에서 모든 트랜잭션 코드 수준의 가시성을 얻을 수 있으며, 하나의 뷰에서 병목지점, 실패 위치를 볼 수 있다.

 

Inspector

CPU 사용량, Memory/GC, JVM arguments와 같은 어플리케이션 상세 정보를 제공한다.

 

Architecture

pinpoint의 전반적인 구조는 아래 그림 하나로 한번에 이해할수 있다.

 

우측 상단의 Host JVM이 사용자가 구현한 어플리케이션이 돌가가는 웹 어플리케이션 서버(WAS)이다. 바로 여기에 pinpoint의 agent가 올라가며, collector와 web UI는 HBase를 보고 있다.

 

Supported Modules

pinpoint가 지원하는  모듈들은 다음과 같다.

  • JDK 6+
  • Tomcat 6/7
  • Spring
  • Apache HTTP Client 3.x/4.x, JDK HttpConnector
  • MySQL, Oracle, MSSQL, CUBRID, DBCP
  • iBATIS, MyBatis
  • Arcus, Memcached, Redis

 

pinpooint에 다한 자세한 사항은 여기를 참조하길 바라며, 설치는 여기를 참조하면 된다.

다운받으면 안에 quickstart도 있어 간편하게 사용해볼수 있다. quickstart 사용에 대한 내용은 여기를 참조하길 바란다.

 

 

참조

 


Posted by 알 수 없는 사용자
,

친구가 본 "micro Software" 라는 정기적으로 받아 볼수 있는 잡지를 쭉 살펴 보던중 요즘 하던일과 살짝 관련있는 제목이 눈에 띄어 소개해 볼까 한다. 발행 일이 2014.06로 좀 지났지만 꽤 흥미있어 보여 읽어보았다.

 

제목은 위에도 써놨듯이 "데이터 분석이 게임 성패를 가른다로 5Rocks대표 겸 CTO 이창수씨가 쓴 글이다.

먼저 5Rocks로 말할것 같으면, 발음 그대로 오락으로 게임을 위한 데이터 분석 및 운영 플랫폼이며 기업과 기업간의 거래(B2B)를 하는 업체이다.

홈페이지는 그림을 클릭하면 바로 이동 가능하다.

 

스타트업--

5Rocks는 스타트업 업체들에서 좀처럼 찾기 힘든 B2B 서비스 업체 이다. 그것도 스마트폰 게임 관련 데이터 분석 서비스 겸 시각화 업체.

5Rocks의 개발팀은 코어 개발자 4명과 인턴등의 개발자들을 포함 8명으로 구성되어 있다. 특히 코어 개발자들을 중심으로 멀티 플레이어를 수행하고 있는 것이 인상적이다.

개발 업무를 들여다 보니 유니티 SDK를 하는 사람이 동시에 안드로이드 SKD를 개발하며 전체 서버를 보고있다. 또한 IOS SDK를 하는 사람은 하둡 MR 작업도 하고 있다.

이들이 다루는 데이터 양도 어마어마하다. 대용량 데이터 처리 플랫폼인 하둡을 사용하는데, 하둡 노드를 기준으로 평소에 20노드를 사용하다가 과부하가 걸릴 경우 50노드까지도 확대해 사용 한다고한다.

 

유니콘 개발자--

여느 스타트업이 그렇듯 5Rocks역시 개발자 구인난에 시달리고 있다. 인턴도 찾기 힘들다는 것이 엡계의 전언이다. 심지어 스타트업이 필요로 하는 개발자는 찾는 것이 불가능하다는 뜻에서 전설의 동물의 이름을 붙여 '유니콘 개발자'라고 부른다.

5Rocks는 유리판에 코드를 쓰게 하는 방식으로 개발자를 뽑는다. 겉으로 볼땐 쉬워보이지만, 제대로 못쓰는 지원자들이 태반이었다고..

"면접을 볼떄 코드를 짜게 하면서 가이드를 줍니다.

자바의 경우 10by7 매트릭스를 다이어고날(대각선)로 접근할 경우 그 사이에 들어가는 코드를 제일 편한 언어로 짜보라고 합니다. 그런식으로 문제를 주고 가이드를 제시하는데, 얼마나 잘 따라오는지를 중심적으로 봅니다.

 개발하는 분들 중에 특정 사이트에서 검색해 그대로 붙여쓰는 작업만을 해오시던 분들은 바로 실력이 들통납니다."

 

유료화 --

'유료화 고수'라는 점도 특이 했다. 아무리 유료 서비스라 해도 베타 서비스를 할때는 무료로 진행하는 것이 보통이다. 하지만 5Rocks는 클로즈 베타 때도 약간의 할인을 했을 뿐, 유료화를 포기하지 않았다.

이 대표는

 "클로즈 베타 때 무료로 서비스를 배포할 경우 중요한 테스트를 할 수 없기 때문에 유료화를 강행했습니다.

무료와 유료 사이의 간극이 상당히 큽니다. 클로즈 베타 때야말로 돈 받고 쓰게 할 것인지,

무료로 뿌리고 비즈니스 모델을 찾아야 하는지 결정해야 하는 중요한 시점이기 때문에 유료화를 포기할 수 없었습니다."

라고 강조했다.

 

게임 데이터 분석 --

이창수 대표는 왜 게임에 분석을 도입했을까. 여기에서 비즈니스적인 성과를 거둘 수 있단 말인가.

요즘엔 하루에도 수많은 게임들이 풀시되고, 사라진다. 이용자 데이터 분석이 게임의 흥망성쇠에 영향을 미칠 수 있다면 어떨까?

그의 설명에 따르면, 알푸(ARPU: 가입자당 평균 수익)가 최고점과 최저점을 기록하는 것만으로는 매출의 증감 여부를 알 수 없다. 매출이 최고점에 올라도 알푸가 오르지만, 이용자 숫자가 최저치를 쳐도 알푸는 올라가기 때문이다.

하지만 이용자의 게임 캐릭터 레벨별 알푸를 나눠서 보면 성공과 실패 여부를 판단 할 수 있다.

가령, 레벨1의 알푸가 0.3달러, 레벨3은 0.2달러, 레벨10은 0.1달러를 기록하면 이 게임은 곧 망한다. 하지만 레벨1이 0.3달러, 레벨3은 0.4달러, 레벨10은 0.5달러라면 이 게임은 성공한다.

 

과거에는 이용자의 데이터를 분석하는 게 큰 의미가 없었다. 돈을 주고 게임 CD를 사는 것이 전부 였기 때문이다. 온라인 게임의 경우도 마찬가지였다. 가입자의 수가 중요했다. 데이터 처리의 결루 서버로 몰려오는 트래픽을 잘 견디는 것이 지상 과제일 뿐이였다.

하지만! 스마트폰의 등장이후 그 기반의 게임 시장은 데이터를 바라보는 관점을 180도 바뀌에 했다. 분석을 통해 게임 이용자들이 어떤 레벨에 도달할 때 지갑을 여는 지 파악할 수 있게 됬다. 그리고 분석을 통해 게임사가 가입자를 더 유치하거나 구매율을 높이는 사례도 속속 등장하기 시작했다.

데이터 분석의 가치가 인정받는 생태계가 만들어진 것이다.

 

자체 로그 분석 서비스 개발 --

로그 분석 서비스 하면 따오르는 것은 대표적으로 구글 애널리틱스와 플러리 이다. 온라인 서비스를 하는 업체라면 누구든 빼놓지 않고 사용하는 서비스이기도 하다. 하지만 이 대표에게는 불편했다.

"앱으로 들어오는 데이터를 분석 할 경우 구글 애널리틱스와 플러리는 많이 불편합니다. 예전에 앱을 운영했을 때에도 의도했던대로 전혀 쓸수 없었습니다.

그러던 어느날 친한 지인이 데이터 분석 시스템을 게임에도 활용하면 좋을 것 같다고 조언을 했고, 이를 받아 들여 2013년 02월 부터 개발에 들어갔습니다."

그해 5월부터 국내 한두 회사가 5Rocks에 관심을 보이더니, 6월에는 5개 회사를 추가로 계약했다. 일본의 경우 9월부터 고객사가 하나 둘씩 생겼다. 그리고 2014년 04월 고객사는 400여곳에 이른다.

 

전 세계를 강타하고 있는 작은 거인 5Rocks의 1년 뒤가 더욱 기대 된다.

 

Posted by 알 수 없는 사용자
,

친구와 이야기를 하는 도중 데이터 마이닝이란 단어가 나왔다. 문득 "데이터 마이닝이 뭐지?"란 의문이 들어 알아보고자 한다.

 

데이터 마이닝이란 사전적 의미로는 다음과 같다.

 " 대규모로 저장된 데이터 안에서 체계적이고 자동적으로 통계적 규칙이나 패턴을 찾아 내는 것이다.

다른 말로는 KDD(데이터베이스 속의 지식 발견: Knowledge-discovery in databases)라고도 일컫는다. "

잘 모르겠다면 단어를 따로 따로 떼어서 살펴보자.

 

데이 (Data)   : 우리가 알고있는 그 데이터이다. 보통 연구나 조사 등의 바탕이 되는 재료를 말한다.

마이닝 (Mining) : 채굴, 채광, 채광 산업을 말한다. 채광이란 광산에서 광석을 캐내는것을 의미한다.

즉, 데이터마이닝이란 광산에서 광석을 캐내는 것에 비유한 것으로, 금광석에 극히 미량으로 포함된 금을 여러 단계를 거쳐 추출하듯이 "수 많은 데이터의 산에서 가치있는 유용한 정보를 찾아 내는 것" 이다.

 

그러면, 이런 데이터 마이닝은 왜 필요한 걸까?

 

요즘은 빅데이터의 시대라고 하여 정말 상상도 할수 없을 만큼의 많은 데이터가 만들어 지고 있다. 흔히들 사용하는 SNS중 하나인 Facebxxx만 해도 하루 평균 25억개의 컨텐츠 공유 및 500TB이상의 데이터를 처리한다고 한다. 그야말로 어마어마한 데이터 이다.

이렇게 데이터도 많아져 가며, 기업의 업무 또한 복잡해져 가면서 업무 전문가의 통찰력에도 한계가 오게 되고, 수 많은 데이터 속에서 유용한 지식을 찾아 내는 것을 사람의 손으로 하기엔 이미 너무 벅찬 일이 되었다.

그래서 데이터 마이닝 기술이 탄생하였다.

 

데이터 마이닝 기법은 전적으로 데이터에 기반하여 지식 패턴을 추출하기 때문에 사람이 간과해 버릴 수도 있는 지식 패턴들까지 모두 찾아낼 수 있다. 

데이터 마이닝의 기법으로는 OLAP, 군집 분석, 연결 분석, 사례기반 추론, 연관성 규칙 발견, 인공 신경망, 의사 결정 나무, 유전자 알고리즘 등이 있다.

이 기법들에 대한 자세한 설명은 넘어가도록 하겠다.

 

데이터 마이닝의 절차는 다음과 같다.

 데이터 추출 → 데이터 정제 → 데이터 변경 → 데이터 분석 → 데이터 해석 → 보고서 작성

 

마지막으로 데이터 마이닝의 활용 분야 에 대해 3가지 정도만 알아보고 마치도록 하겠다.

1. 데이터 베이스 마케팅

데이터를 분석해 얻는 사람들이 원하는 정보를 이용하여 마케팅 전략을 구축한다.

그 예로는 목표 마케팅, 고객 세분화, 고객 성향 변동 분석, 교차 판매, 시장 바구니 분석등이 있다.

 

2. 신용 평가

특정인의 신용 상태를 점수화 하는 과정으로서 신용거래 대출 한도를 결정하는 것이 주요 목표이며, 이를 통해 불량 채권과 대손을 추정하여 최소화 한다.

그 적용 분야로는 신용카드, 주택 할부 금융, 소비자 대출, 상업 대출 등이 있다.

 

3. 통계적 품질 관리

불량품을 찾고 그 원인을 밝혀서 궁극적으로 이를 예방하는 것을 목적으로 한다.

그 예로는 의료 보험 조합에서는 불필요한 장기 입원이나, 보험료 과다 청구를 탐지하려 SPC를 사용하며, 제조 업체에서는 불량품 감소를 통한 이윤 증가를 추구하는 것들이 있다.

마무리 하며..

글쓴이는 간단하게 데이터 마이닝이 무엇인지 정리하였지만, 데이터 마이닝에해 더 깊이 알고 싶다면 강좌 또는 논문을 읽어보는 것을 추천한다.

 

 

참고할만한 블로그

(강좌) 데이터마이닝 (Data Mining) 소개

 

Posted by 알 수 없는 사용자
,

몇개월전, 우분투를 사용하고 있었을 당시, 플로우 차트를 그려야할 일이 있었다. 리눅스계다 보니, 사용하기 편하면서 결과물이 예쁘게 나올 수 있는 프로그램을 찾기 어려웠다. 이리저리 찾아보던중, 나의사랑 크롬 웹스토어에서 검색해보았더니 Gliffy Diagrams라는 앱이 있길래 설치를 해 보았다. 오늘은 Gliffy Diagrams를 리뷰해 보겠다.

Gliffy Diagrams 사용해보니 무료임에도 불구하고 고퀄리티의 플로우차트를 뽑을 수 있었다. 제공해주는 색상 스키마도 깔끔하고 자주 사용하는 색상 위주로 제공해 주기때문에 색상 선택으로 고민하는 시간을 줄여주는 느낌이다.

뿐만아니라 다양한 다이어그램을 그릴 수 있다. UML이나 Entity-Relationship등 간단하고 예쁘게 그릴 수 있다. 공식홈페이지(http://www.gliffy.com)에 따르면, 다음과 같은 목적으로 사용 가능하다고 나와있다.

Use Gliffy As

Flow chart software

Network diagram software

Floor plan software

Org chart software

SWOT analysis

Wireframe software

Site map software

UML software

Business process modeling software

Venn diagram software

또한, Jira와 Confluence에서 사용할 수 있는 Plug-in도 제공을 하고 있다고 한다.


시작을 하게 되면 다음과 같은 화면이 뜬다.

<그림.1 시작>

가이드 라인이 나와서 쉽게 정렬이 가능하다.

<그림2. 플로우 차트 그리기>

<그림3. 플로우 차트>

<그림 4. 색상스키마 선택>

그 외의 다이어그램을 그릴때도 유용하다.

<그림 5. 다이어그램>

구글 드라이브와 연동도 가능하다.

<그림 6. 구글 드라이브와 연동>

프로그램이 죽거나 실수로 끈 경우 백업파일을 불러와서 계속 편집이 가능하게 해 준다.

<그림 7. 백업파일로부터 시작>


정리해보면 Gliffy는 다음과 같은 기능을 제공한다.

1. 가이드라인 보여주기, 그리드 보여주기, 그리드에 자동붙이기 기능등 기본적이면서 가장 필요한 기능을제공한다.

2. 그룹단위로 묶어서 이동 및 축소/확대가 가능하다.

3. 컬러테마를 제공하여 색상 스키마 변경을 원클릭으로 가능케 한다.

4. 로컬에 .gliffy확장자로 저장 및 불러오기가 가능하다.

5. PNG/JPG파일로 저장 가능하다.

6. 구글 드라이브에 저장이 가능하다. (https://www.gliffy.com/go/gdrive/open?code=4/JlD5UUAPZNzHKlWHPPb1BsNDLH_dNiidcTWdsSBtqIA.UvhDJGSm_nwYgrKXntQAax0staSwlwI)

7. 만약 실수로 저장하지 않고 프로그램을 종료한 경우에, 다음번 실행시 자동백업된 파일을 불러와서 계속 편집할것인지 물어본다.

 크롬 브라우저에서 지원하는 문서편집 툴들이 그러하듯, 내 컴퓨터에서 굳이 프로그램을 설치할 필요가 없다는 점이 장점이라고 본다. 또한 간단하면서 직관적인 UI를 제공하여 사용자로 하여금 친숙하게 접근할 수 있는 프로그램이다. 그동안 크롬 브라우저 웹스토어에서 사용한 프로그램들을 돌아보면, 주로 간단하면서 사용하기 직관적인 프로그램들이 오랫동안 살아남는것 같다. 

 



Posted by 알 수 없는 사용자
,

phpMyAdmin은 MySQL을 웹 상에서 관리할 목적으로 PHP로 작성한 오픈 소스 도구이다. 데이터베이스, 테이블, 필드, 열의 작성, 수정, 삭제, 또 SQL 상태 실행, 사용자 및 사용 권한 관리 등의 다양한 작업을 수행할 수 있다. PHP로 작성되어있기 때문에 코어파일들을 적절하게 튜닝하여 사용 가능하다. 

phpMyAdmin은 다음과 같은 기능을 제공한다.

직관적인 웹 인터페이스

MySQL 데이터베이스 관리

테이블 관리

일반사용자와 특정 권한 이용자 관기

CSV와 SQL로부터 데이터 가져오기

데이터를 다양한 형식으로 내보내기: CSV, SQL, XML, PDF (TCPDF 라이브러리를 통해), ISO/IEC 26300 - 오픈도큐먼트 텍스트 및 스프레드시트, 워드, 엑셀, LaTeX 등

다중 서버 관리

데이터베이스 양식의 PDF 그래픽 작성

쿼리별 조회(QBE)를 이용한 복잡한 쿼리 작성

데이터베이스 및 하부 집합 전역 검색

미리 정의된 함수 집합을 사용하여 저장된 데이터를 원하는 형식으로 변형 (BLOB 데이터를 다운로드 링크나 이미지로 표시 등)

쿼리 모니터 (프로세스)

현재 공식버전은 4.3.11.1이며 Alpha버전은 4.4.0까지 나와있다. 설치에 사용된 버전은 4.2.13.2버전이다.

그러면, phpMyAdmin을 설치해보자. 

1. 먼저 공식 사이트에서 zip파일을 다운로드한다. [phpMyAdmin 공식홈페이지]





2. 다운받은 zip파일 압축을 푼다.

3. phpMyAdmin 루트 폴더에 config.sample.inc.php파일을 복사 및 붙여넣기 한 후, config.inc.php로 변경한다.


5. 설정 변경을 원하는 필드를 변경 후 config.inc.php파일에 추가한다.

$cfg['McryptDisableWarning'] = true;

$cfg['PmaNoRelation_DisableWarning'] = true;

$cfg['ExecTimeLimit'] = 60;

$cfg['CheckConfigurationPermissions'] = false;


6. 서버에 폴더를 전송한다. 이때 웹서버가 phpMyAdmin을 띄워줄 경로에 폴더를 통째로 올려주면 된다.
(폴더 경로 예시:  /var/www/html)

7.  localhost/phpMyAdmin경로로 접근한 모습이다. 이 화면에서 언어 선택이 가능하다. 
DB계정과 패스워드를 넣고 로그인 하면 된다..


8. 로그인 후 메인 페이지에서는 서버정보 및 php버전 등이 자세히 나와있다. 이 페이지에서 테마 및 언어 설정이 가능하다. 

9. DB를 선택하면 테이블 리스트를 볼 수 있다.



phpMyAdmin은 일단 설치가 매우 간단하고, 인터페이스 역시 직관적이다. 그리고, 오픈소스 툴이지만 업데이트가 활발히 이루어 지고 있다. 또, php로 작성되어있기 때문에 용도에 맞게 커스터마이징이 가능하다. (e.g.사용자 활동로그 저장) 

이상, DB관리 툴인 phpMyAdmin 설치 및 사용하기에 대한 포스트를 마친다.


참조 :

http://www.phpmyadmin.net/home_page/index.php

Posted by 알 수 없는 사용자
,

요번 포스팅에는 저번 포스팅에 이어 HotspotJVM의 Garbage Collector에 대해 알아보도록 하겠다. 


HotspotJVM의 Garbage Collector에는 5가지 종류의 Collector들이 존재한다. 


1.Serial Collector 

2.Parallel Collector

3.Parallel Compaction Collector 

4. CMS Collector 

5. Garbage First Collector 


제일 먼저 Serial Collector에 대해 알아보자. 


1.Serial Collector 


Young Generation과 Old Generation의 Garbage Collection  모두를  Serial로 처리하는 방식이다. 

1개의 Thread를 가지고 GC수행하고, Hotspot JVM의 가장 기본적인 collector이다. 


Young Generation – Generational Algorithm의 동작원리를 살펴볼까?


Minor GC가  발생 하면  


Minor GC가  발생결과 


old Generation – Mark and Compacting 알고리즘의 동작원리를 살펴볼까?


Serial Collector가 나온 이후 IT환경이 급변하여, heap의 크기를 점점 크게 설정해야 하는 상황이 도래함에 따라 Serial Collector의 한계가 드러나기 시작하였다.가장 큰 문제는 GC를 수행 하는 중에 나타나는 suspend현상인데 

heap이 커짐에 따라 suspend현상은 두드러졌고 application은 점점 실시간에 가까운 성능을 요구하고 있었다. 


그래서 두가지 전략으로 분화 되었다.


*Throughput Collector

모든 리소스를 투입하여 garbage collector를 빨리 끝내자는 전략.

이는 대용량의 heap에 적합하며,

이 전략을 채택한 garbage collector는 병렬 처리를 수행하는 방법으로 채택. 


*Low Pause Collector 

Suspend를 분산시켜 체감 pause time을 줄이자는 전략. 

실시간을 요구하는 application에 적합. 이 전략을 채택한 Garbage Collector는 GC를 수행하는

동시에 application의 작업도 수행(concurrent)하는 방식을 사용하고 있음.


2.Parallel Collector 


Throughput Collector중 하나이다.
많은 CPU를 동원하여 Garbage Collection시간을 단축 시키자는 아이디어가 parallel collector로 구체화 되었고.
Multi-Thread가 동시에 Garbage Collection을 수행한다. 단 young generation에만 국한된다.

Young Generation은 Parallel Copy Algorithm을 사용한다.


*여기서 잠깐 


메모리의 특성상 같은 메모리 공간을 두 Thread혹은 Process가 접근하게 되면 Corruption이 발생!

이러한 Corruption을 회피하기 위해 동기화 작업이 수반되어야 하는데 이 경우 promotion의 성능이 떨어진다. 


Hotspot은 이를 위해 PLAB(Parallel Local Allocation Buffer)이라는 Promotion Buffer를 마련하였다.

Promotion Buffer란 Garbage Collection Thread가 Promotion시 배타적으로 사용하기 위해 Thread마다 

Old Generation의 일정 부분을 할당해 놓는 것을 말한다.



하지만 많은 수의 Thread가 자신의 buffer를 할당 받은 채 사용되지 않거나 

어쩔 수 없이 발생하는 buffer내의 자투리 공간이 heap단편화의 원인이 될 수도 있다.

이 문제가 발생할 경우 GC Thread를 감소 시키거나 Old Generation의 size를 늘이는 방범으로 문제를 회피할 수 있다.


Old Generation은 Mark-and-Compating 알고리즘을 사용한다.


3.Parallel Compaction Collector


Parallel Collector에서 Old Generation에 새로운 algorithm을 추가한 업그레이드 개념이다.

Oracle에서도 향후 Parallel Collector를 대체 할 수 있다는 전망을 내놓고 있다.

Multi CPU에 유리하고 Old Generation의 Collection시간을 감소시켜 전체적인 효율을 증가시킨다. 


Young Generation은 Parallel Copy Algorithm을 사용한다.

Old Generation은 Parallel Compaction Algorithm을 사용한다. 









4. CMS Collector


Pause Time Goal에 맞는 collector이다.

CMS Collector는 Garbage Collection시 수반되는 suspend time을 적절하게 분산하여 응답시간을 개선하는 방식을 사용한다.

Young Generation에서는 Parallel Collector와 동일한 Parallel Copy Algorithm

Old Generation에서는 Concurrent Mark-Sweep Algorithm을 사용한다. 





하지만 단편화 문제 발생, 이를 해결하기 위해 freelist를 사용하여 young generation에서 promotion된 

object와 크기가 비슷한 free space를 탐색하는 방법 고안하였다.

그러나 Young Generation의 부담만 가중되었다.





5. Garbage First Collector 


CMS GC를 대체하기 위해서 만들어 졌다. 

물리적인 Generation의 구분을 없애고 전체 Heap을   1Mb~32Mb단위의 Region으로 재편하였다.

Garbage First라는 말대로 Garbage로만 꽉 차있는 Region부터 GC를 시작한다.

Concurrent + Parallel + Compacting의 조합이다.



이렇게 Hotspot JVM의 Garbage Collector의 종류의 대해 알아보았다. 

끝!




참조문헌 

http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-g1-and-whats-new-in-java-8/

http://www.omsn.de/blog/brief-comparison-of-java-7-hotspot-garbage-collectors

Java Performance Fundamental 김한도 지음 ㈜엑셈 

http://helloworld.naver.com/helloworld/textyle/1329

http://blog.jelastic.com/2013/01/24/the-truth-about-paas-vertical-scaling-and-why-you-are-being-oversold/

https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&sqi=2&ved=0CCUQFjAA&url=http%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Ftech%2Findex-jsp-140228.html&ei=MMXaVL2TJOe5mwWZnoCADw&usg=AFQjCNHhFj3D5-BfVBPuZ6JL7JF7PCX-UA&sig2=z4gqAR4bu7LA-7IN2lLwbg&bvm=bv.85761416,d.dGc&cad=rja

http://www.infoq.com/articles/Java_Garbage_Collection_Distilled

http://blog.novatec-gmbh.de/g1-action-better-cms/


 




Posted by 알 수 없는 사용자
,