본문 바로가기
반응형

전체 글95

배치 파이프라인 도입을 위한 Workflow 리서치 (Airflow VS Azkaban VS Oozie) 현업에서 데이터 처리를 위한 Workflow가 잘 되어있지 않은 상황이다. 외부에서 데이터를 끌어와 변환하고 적재하는 ETL 작업 뿐만 아니라 비즈니스 로직에서 처리해야할 배치가 수십개가 넘어가는데, 이 플로우를 한 눈에 파악하고 수행할 도구가 없다 보니 손이 많이 간다. 개발된 배치의 형태는 다양하다. Spark Job 이 대부분이고 전처리 단계에서는 Shell Script, Python Script, Command Line 등 다양한 형태로 존재한다. 하나의 단위(Task)가 끝나면 다음 단위를 수행하고 마지막으로 처리할 단위를 끝으로 하나의 플로우가 마무리된다. 이들은 각각 Linux상에서 crontab 으로 구현되어 있다. Cron 표현식을 통해 한 단위를 주기적으로 Triggering 하는데, .. 2020. 6. 29.
IntelliJ SBT compile Error (Out Of Memory) Intellj 로컬에서 Scala Compile을 할 때 SBT compile을 사용한다. SBT Console SBT Action 에서 compile 커맨드로 컴파일을 하지만 다음과 같은 Out Of Memory (OOM) 오류가 발생했다. [debug] Forcing garbage collection... java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at sb.. 2020. 6. 23.
웹사이트 분석 도구 비교! Google Analytics VS Matomo 사용자 분석도구로 가장 많이 쓰이는 GA와 대체제인 Matomo를 비교해본다. 웹 기반의 서비스를 런칭한 후 어떤 툴이 비즈니스 적으로 더 도움이 되고 더 편리할지 리서칭을 하기 위함. Matomo Matomo: Complete Analytics. 100% Yours. 국제 개발자 팀이 개발한 오픈소스 웹 분석 프로그램이다. Google Analytics와 기능이 유사하며 Matomo 진영에서는 GA의 대안으로 주장한다. 특징 오픈소스 PHP, MySQL 기반 다양한 분석 기능 제공 visitor profile, heatmap, session recording, funnels 등 Customizing 가능 마켓플레이스 유/무료 플러그인 존재 및 제공 (https://plugins.matomo.org/) .. 2020. 6. 22.
Kotlin 30분만에 훑어보기 요즘 오랜만에 안드로이드를 다시 보고 있다. 한 때 스타트업을 하면서 빡씨게 개발하곤 했는데, 커리어가 바뀌면서 자연스레 잊혀져갔다. 최근에는 주로 서버 개발과 데이터 엔지니어링 위주로만 하다가 문득 다시 한번 안드로이드 앱을 개발해보고 싶은 마음이 들었다. 2014년, 스타트업 했을 당시 이클립스로 시작해서 안드로이드 스튜디오 2.0 으로 개발했었는데.. 다시 보니 꽤나 많은 것들이 달라져 있었다. 안드로이드 버전이 올라갔고 문서화, 라이브러리 지원도 꽤 잘되어 있어서 놀랐다. 무엇보다도 개발 언어에 차이가 있었는데 당시 자바로만 개발이 가능했으므로 (크로스플랫폼 제외) 당연히 요즘도 자바로 개발하겠거니 했는데, Kotlin 이라는 언어가 나오고 안드로이드 진영에서 적극 권장하더라. 요즘은 대부분 Ko.. 2020. 6. 20.
안드로이드(Android) JSON을 객체 배열로 변환하기 초기 DB를 구축하기 위해 각 라인당 json 텍스트가 있는 하나의 파일을 파싱하여 array object 형태로 변환하고자 한다. 이 때 Gson 라이브러리를 활용하여 사용해보자. 로또 데이터를 대상으로 변환해볼 것이다. 1. GSON 라이브러리 추가 Gson을 활용하기 전에 dependency를 추가해야한다. 아래와 같이 build.gradle에 추가한다. dependencies { implementation 'com.google.code.gson:gson:2.8.6' } 2. JSON 준비 변환할 json 파일을 준비한다. 이미 크롤링을 한 json파일을 Asset 폴더에 저장해둔다. Asset폴더가 없다면 new -> Folder -> Asset 으로 생성할 수 있다. 아래와 같이 lotto_of.. 2020. 6. 14.
자바스크립트(Javascript)로 Date 범위 다루기 시작일자부터 종료일자까지 Date 범위를 다루는 방법이다. 자바스크립트의 Date 클래스를 활용하여 필요한 function을 추가하여 구현한다. 구현하고자 하는 바는 정확히 다음과 같다. startDate ~ endDate 범위 내의 모든 일자를 출력 e.g. 2020년 5월 1일 부터 2020년 6월 8일 까지의 모든 날을 순차적으로 출력 addDays 함수 구현 Date 클래스를 활용하여 시작일부터 하루 증가해가며 구현하면 된다. N일을 증가하는 function을 제공하지 않으므로 직접 만들어보자. Date.prototype.addDays = function(days) { var date = new Date(this.valueOf()) date.setDate(date.getDate() + days);.. 2020. 6. 10.
파이썬(Python) 으로 피파온라인 유저랭킹 크롤링하기! (1) 크롤링? 크롤러? 웹상에는 수많은 웹페이지가 존재한다. 한 웹사이트만해도 수십, 수백개의 웹페이지로 이루어져있으며 각기 다른 형태, 종류의 정보를 가지고 있다. 우리는 이런 정보를 자동으로 읽어들인 후 입맛에 맞게 활용할 수 있다. 이러한 행위를 하는 프로그램을 웹 크롤러라 하며 수집하는 행위를 크롤링한다 라고 표현한다. 웹 크롤러 사전적 정의 wikipedia에서는 아래와 같이 정의한다. 웹 크롤러(web crawler)는 조직적, 자동화된 방법으로 월드 와이드 웹을 탐색하는 컴퓨터 프로그램이다. 대표적으로 검색엔진을 들수있다. 구글, 네이버 등의 검색엔진은 검색결과를 보여주기위해 웹상에 흩어져있는 수많은 웹페이지들을 수집하고 가공하여 검색엔진에 인덱싱(색인)한다. 이 순간에도 웹상의 정보들은 변화하는.. 2020. 6. 5.
자바스크립트(Javascript) 디자인 패턴 - 감시자/옵저버(Observer) 패턴 디자인패턴을 공부하면서 정리했던 옵저버 패턴 에 이어 이번엔 자바스크립트로 구현하는 방법에 대해서 알아본다. 옵저버 패턴의 정의와 Java로 구현하는 방법은 이 링크에 정리해두었다. 클릭과 같은 이벤트를 받아 전달할 때, 알려야하는 객체들에게 변경사항을 알릴 때 Publisher/Subscriber 패턴이라고 한다. MQTT같은 메시지 프로토콜에서 사용되는 패턴으로 주로 사용되는데 이 또한 옵저버 패턴이라 말할 수 있다. 주요 목적은 객체간의 결합도를 낮추기 위함이다. Publisher는 구독자 즉, 감시자(Observer) 가 되고 관찰되는 객체는 발행자, 감시대상(subject). 예시 (잡지 구독) 잡지 구독을 예시로 들어보자. 잡지를 구독한 사람들에게 잡지를 발행 할 때마다 알려준다. subscr.. 2020. 6. 3.
자바스크립트(Javascript) 디자인 패턴 - 중재자(Mediator) 패턴 중재자 패턴은 객체들이 어떻게 통신하는지 추상적으로 만들어 놓은 객체를 정의한다. 객체간의 결합도를 낮추고 유지보수를 쉽게 할 수 있는 효과를 가져온다. 객체간 직접 통신하지 않고, 중재자 객체 를 거치기 때문이다. (e.g. 자신의 상태가 변경될 때 중재자에 알릴 때, 중재자는 변경분을 알아야 하는 객체에게 알린다) 흡사 옵저버랑 유사해보인다. 예시를 통해 알아보자. 예시 게임을 예시로 들어 어떻게 활용할 수 있는지, 자바스크립트로는 어떻게 구현하는지 알아보자. 두 명의 플레이어 중 30초 동안 더 많이 버튼을 누르는 플레이어가 이기는 게임 을 만든다고 해보자. 3가지를 정의할 수 있다. 플레이어 객체 정의 Scoreboard 객체 정의 중재자(Mediator) 객체 정의 플레이어 function Pl.. 2020. 6. 3.
자바스크립트(Javascript) 디자인패턴 - 프록시패턴 (proxy pattern) 디자인패턴 중 하나인 프록시 패턴은 하나의 객체가 다른 객체에 대한 인터페이스로 동작하도록 한다. 이러한 패턴은 의외로 많이 볼 수 있는 패턴이다. 서버 구성을 할 때 프록시 서버를 두어 패킷양을 조절하거나 중간 레이어를 두어 완충 역할을 할 수도 있다. 프록시 패턴은 이전에 설명했던 퍼사드 패턴 과 비교했을 때 다음과 같은 차이가 있다. 퍼사드 : 메서드 호출 몇 개를 결합 시켜 편의 제공 프록시 : 클라이언트 객체와 실제 대상 객체 사이에 존재, 접근 통제 이는 즉 성능 개선에 도움을 준다. 왜냐면 실제 대상 객체를 보호하여 되도록 일을 적게 시키기 때문이다. 구체적으로 lazy한 초기화 이다. 초기화의 경우 비용이 발생하는데, 최초 초기화 요청을 대신 받지만 실제 객체가 정말로 사용되기 전까지는 요.. 2020. 6. 3.