전체 글 477

Apache Kafka에서 topic의 partition 개수 줄이는 방법?

아파치 카프카에서 topic의 partition 개수 줄이는 방법?정답 : 없다(~2.1 version)Apache Kafka는 partition number을 줄이는 것을 지원하지 않는다. Topic에 대한 data 처리량을 늘리기 위해 partition을 쉽게 늘릴 수 있지만, partition number을 줄이는 것 즉 partition 삭제에 대한 정책은 지원하지 않는다. Partition을 삭제하게되면 그 즉시 파티션에 존재하는 data가 삭제되기 때문이다. 이 때문에 partition의 삭제가 가능하기 위해서는 kafka에서 능동적으로 partition삭제에 대한 처리(data rebalancing)을 해야하는데 이는 아직(현재 version 2.1) 개발되지 않았다. LinkedIn의 Se..

빅데이터/Kafka 2018.12.26
안드로이드에서 외부 jar file import하는 방법

이번포스팅에서는 Android studio에서 jar file을 import하는 방법에 대해 알아보겠습니다. #1 Android studio open #2 Android studio 우측에 있는 structure에서 Project 클릭 #3 libs folder 안에 추가하고자 하는 jar file copy&paste #4 붙여넣은 jar file을 우클릭하여 아래쪽에 있는 Add As Library 클릭 #5 library로 추가하고자 하는 module 선택 및 OK #6 cmd+; 단축키를 눌러 Project Structure을 확인하면 Library import 완료된 것을 확인 할 수 있다.

아파치 Kafka Consumer의 데이터 처리 내부 architecture 설명 및 튜닝포인트

지난 포스트에서 Kafka producer의 데이터 처리 내부 architecture에 대해서 알아보았다. ☞ 아파치 Kafka Producer architecture 설명 포스팅 이번 포스트에서는 kafka architecture의 Consumer 내부 데이터 흐름에 대해 알아보려고 한다. Kafka Consumer 데이터 내부 처리 순서 #1 : poll(record 취득 api) 호출#2 : 가져오고자 하는 record가 Fetcher queue에 없는 경우, Fetch request를 발동하여 broker에서부터 record를 가져온다.#3 : record batch를 Fetcher queue에 저장#4 : 어디까지 읽었는지에 대한 offset을 consumer측에서 보관#5 : record ba..

빅데이터/Kafka 2018.12.24
아파치 Kafka Producer의 데이터 처리 내부 architecture 설명 및 튜닝포인트

지난 포스트에서 Kafka architecture 및 개요에 대해 알아보았다. ☞ 빅 데이터 처리를 위한 아파치 Kafka 개요 및 설명 포스팅 이번 포스트에서는 kafka architecture의 Producer 내부 데이터 흐름에 대해 알아보려고 한다. Kafka Producer 데이터 내부 처리 순서 #1 : User application thread에서 Record 추가#2 : Record Batch단위로 Record를 압축#3 : 복수의 Record Batch를 묶어 Broker로 보냄#4 : Record Batch를 각 Partition에 저장#5 : 지정시간에 request 에 대한 완료(ack)를 회신 - acks=0 : ack 응답없음(속도가장빠름, 데이터유실확률 가장 높음) - acks..

빅데이터/Kafka 2018.12.24
빅 데이터 처리를 위한 아파치 Kafka 개요 및 설명

Apache Kafka LinkedIn에서 최초로 만들고 opensource화 한 확장성이 뛰어난 분산 메시지 큐(FIFO : First In First Out) → 분산 아키텍쳐 구성, Fault-tolerance한 architecture(with zookeeper), 데이터 유실 방지를 위한 구성이 잘되어 있음→ AMQP, JMS API를 사용하지 않은 TCP기반 프로토콜 사용→ Pub / Sub 메시징 모델을 채용→ 읽기 / 쓰기 성능을 중시 → Producer가 Batch형태로 broker로 메시지 전송이 가능하여 속도 개선→ 파일 시스템에 메시지를 저장하므로, 데이터의 영속성 보장→ Consume된 메시지를 곧바로 삭제하지 않고 offset을 통한 consumer-group별 개별 consume..

빅데이터/Kafka 2018.12.24
Hadoop에서 hadoop job은 어떻게 각 data node에서 job을 수행할까?

Hadoop에서 가장 많이 쓰이는 명령어로 아래와 같이 job을 수행하는 것이 있다. /bin/hadoop jar [jar file] [arguments..]상기와 같이 jar를 실행하게되면 hadoop은 어떤 node로 어떤 job을 보내게 되는걸까? Client 혹은 interface server에서 hadoop jar와 함께 command를 입력Client는 실행에 대한 신규 application Id를 발급받. 그리고 jar file은 HDFS의 job resource로 복사(by default 10 on large clusters)Cluster(각 데이터노드)에서 실행됨. (다만 hadoop config에 local 설정을 하게 되면 해당 호스트에서 실행됨)

빅데이터/하둡 2018.12.17
모든 것을 측정하는 방법 - Bigdata시대에 부족한 data로 예측하기

이 포스트는 모든 것을 측정하는 방법을 읽고 정리한 글입니다. 해당 서적 : How to Maesure Anything(amazon.com) 근사값 밖에 구할 수 없는 상황에서는 완벽한 정확성을 추구하는 것보다 가능한 수준의 정밀도로 만족하는 것이 지식인에게 필요한 태도이다. - 아리스토텔레스(BC. 384 - BC. 322) 왜 측정이 필요한가?모든 것은 측정 가능하다. 대체로 측정 불가능하다고 여겨지는 많은 문제들이 간단한 측정 방법을 통해 해결될 수 있다. 특히 사업 경영에서 흔히 접하는 '보이지 않는' 것들에 대해 측정이 가능하다. 다음과 같은 것들이 일반적으로 생각되는 보이지 않는 것들의 예이다. # IT 프로젝트가 실패할 위험# 수집한 정보의 가치# 품질# 대중적 이미지 위의 예들은 사업의 의..

빅데이터 2018.12.16
Custom listview의 각 item에 animation 적용하기

개요안드로이드 custom listview를 사용하면서 parent item view에 각종 animation effect를 주고 싶을때 사용 제공 애니메이션# Alpha with translate animation : 좌측으로 이동 + 투명도가 변하면서 스르륵 나타나는 애니메이션# Alpha animation : 투명도가 변하면서 스르륵 나타나는 애니메이션# Scale animation : 점점 커지는 애니메이션 주요 코드ListViewAdapter.javacustom list view를 사용하기 위해 BaseAdapter를 상속받은 ListViewAdapter에서 parent view에 animation을 적용하면 각 item에 animation이 적용된다. @Override public View g..

Hdfs dfs 명령어 정리 및 설명(ls, cat, du, count, copyFromLocal 등)

Hadoop을 적절히 사용하기 위해서는 hdfs 명령어를 알아야 한다. 아래에 정리를 해 보았다. ※ 2.6.0 version을 기준으로 정리함 Hadoop 명령어 Hadoop filesystem command를 사용하기 위함. Usage : hdfs dfs [GENERIC_OPTIONS] [COMMAND_OPTIONS] HDFS 명령어 File System(FS) shell은 Hadoop Distributed File System(HDFS)를 여타 파일시스템처럼 관리하기 위한 목적으로 command를 사용할 수 있다. Hadoop-2.6.0에서는 총 33개의 HDFS 명령어를 지원한다. 1) appendToFile Local 파일들을 hdfs에 append 저장하기 위한 목적 Usage: hdfs df..

빅데이터/하둡 2018.12.11
지난 2년(17, 18년) 동안의 개발 블로그 운영 회고

개발 블로그의 시작처음 시작은 Effective Java 스터디를 시작하면서 공부했던 내용을 정리하자는 차원에서 시작하였다. # 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라.# 예외는 예외적 상황에만 사용하라# 불필요한 점검지정 예외 사용은 피하라# 표준 예외를 사용하라# 메서드에서 던져지는 모든 예외에 대해 문서를 남겨라# 어떤 오류인지를 드러내는 정보를 상세한 메시지에 담으라# 실패 원자성 달성을 위해 노력하라# 예외를 무시하지 마라# int상수 대신 enum을 사용하라# 작명 패턴 대신 어노테이션을 사용하라# Override 어노테이션은 일관되게 사용하라# 자료형을 정의할 때 표식 인터페이스를 사용하라 처음에는 에버노트에 할지, 네이버 블로그, google blogger, 티스토리 ..

개발이야기 2018.12.04
Java 시큐어 코딩 - 공격 종류 및 해결방안

1. SQL injection 취약점 발생 원인외부입력값을 동적으로 SQL실행문을 만들어서 사용할때 주로 나타남. /* SQL injection에 취약한 코드*/ String userId=request.getParameter("userId"); String password=request.getParameter("password"); ... Statement stmt = conn.createStatement(); ResultSet result = stmt.executeQuery("select count(*) as count from student where userid='"+userId+"' and password='"+password+"'"); userid에 admin' OR '1'='1 을 입력하면 그..

Java 시큐어 코딩 - 개론 및 보안사례

개요 및 단어 설명시큐어 코딩에 앞서 단어설명을 한다. 보안약점(weakness) - 개발자가 개발을 하는 단계, 구현을 하는 단계에서 나타나는 bug - 코드 리뷰를 통해 보안약점을 찾겠다. - But, LOC(Line of code)가 너무 많으므로 정적분석도구를 사용한다. - ex) findBug, findSecurity plugin - Secure coding이 필요한 단계 보안취약점(vulnerability) - 서비스가 나가고 난 뒤 침해관련 사고 - 실제 침해사고로 일어난 사례 - 공격자(해커)가 의도하는 공격(해킹)이 일어나는 곳 Secure coding(보안 약점 구간)에서 이슈를 알아 낼 수 없는 경우도 있다. 예를 들어 논리적인 & 구조적인 이슈(ex. sms를 통한 인증)로 인해 보..

JVM에서 MapReduce를 간편하게 쓸수 있는 오픈소스 라이브러리 Cascading

CascadingCascading은 opensource library로서 JVM에서 쉽게 bigdata처리를 가능캐 한다. 오픈소스이며 apache license를 보유하고있다. # Website : https://www.cascading.org/ # Github : https://github.com/Cascading/cascading # twitter : https://twitter.com/Cascading Source-pipe-sink 패러다임을 채용하여 객체지향 프로그래밍 언어에서도 data처리를 직관적으로 구현할 수 있다. 기존에 많이 사용하던 MapReduce code와 비교해보자. Old MapReduce code Bigdata를 다룰 때 맵리듀스(MapReduce)는 흩어져 있는 데이터를 수..

빅데이터 2018.11.19
Spring boot에 AWS Elasticbeanstalk의 ebextensions 적용하기

Elasticbeanstalk란? Elasticbeanstalk는 Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker를 사용하여 Apache, Nginx, Passenger, IIS와 같은 친숙한 서버에서 개발된 웹 애플리케이션 및 서비스를 간편하게 배포하고 조정할 수 있는 서비스이다. Tomcat 배포시 web server configuration?Spring boot MVC를 war package하여 Elasticbeanstalk(tomcat)을 통해 배포하면 자동으로 WAS, WEB 서버가 프로비져닝되어 배포된다. 아주 간편하고 쉬운 배포지만 was control 뿐만아니라 web server을 어떻게 컨트롤 할지 의문이든다. 이 때를 위하여 Elasticbe..

개발이야기/AWS 2018.11.19
Spring boot scheduler를 활용한 kafka producer/consumer 예제

Kafka는 분산 메시징 플랫폼으로 폭넓은 확장성과 우수한 성능을 가진다. Kafka의 간단한 사용을 위해 Spring boot를 사용하여 consumer, producer개념을 익힐 수 있다. Spring boot의 scheduler기능을 통해서 producer가 kafka에 topic을 내려 주면, subscribe하고 있는 consumer가 해당 메시지를 받는 형태로 만들 것이다. Architecture Spring boot scheduler와 kafka의 연동 구성도 Kafka 설치 Kafka의 설치과정은 아래 posting에서 확인할 수 있다. Macbook에 Kafka 1분만에 설치하기(바로가기) Project directory 프로젝트 directory는 intellij의 spring boo..

빅데이터/Kafka 2018.11.06
Macbook에 Kafka 1분만에 설치하기

Kafka는 분산 메시징 플랫폼으로 폭넓은 확장성과 우수한 성능을 가진다. Kafka의 간단한 사용을 위해 local computer인 Macbook에 Kafka를 설치해보자. 1. Homebrew 설치Homebrew는 macOS 용 패키지 관리자로서 간단하면서도 강력한 기능을 가진다. 이미 Homebrew를 가지고 있는 사용자라면 바로 2번으로 넘어가도 좋다. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 상기 명령어를 terminal에 입력하면 순식간에 설치가 완료된다. 2. Zookeeper 설치Zookeeper는 kafka를 구동하기 위한 필수불가결한 존재이다. Kaf..

빅데이터/Kafka 2018.11.06
블로그에서 code block을 이쁘게 표현하기 위한 javascript library, google code-prettify

기술 블로그를 쓰다보면 code를 전달하기 위해 code block이 필요할 때가 있다. 이럴 경우 html tag를 조합해서 넣기도 해야하고 혹은 code script와 같은 web site의 힘을 빌리기도 한다. google의 code block을 위한 js library를 사용한다면 블로그에 code넣는 것이 한결 수월해진다. 그리고 간단한 css 옵션 추가를 통해 더 이쁘게 코드를 작성, 전달 할 수 있다. code-prettify.jsGithub url : https://github.com/google/code-prettify How to use?1) 설치방법블로그의 최하단에 아래의 script를 넣는다. 2) CSS 꾸미는 방법각자 나름대로 css를 통해 code block을 꾸미겠지만, gi..

예제로 알아보는 스칼라에서 Option monad

Java에서 항상 우리가 하던대로 코딩하면 아래와 같이 나온다. Customer customer = Customers.findById(1234); return customer.getAccount(SOME_ACCOUNT).getLastInterest.getAmount 하지만 그냥 위와 같이 쓰게 되면 nullPointException에서 자유로울수 없기 때문에 보통 아래와 같이 사용한다. Customer customer = Customers.findById(1234); if(customer !=null){ if(customer.getAccount(SOME_ACCOUNT)!=null){ if(customer.getAccount(SOME_ACCOUNT).getLastInterest!=null){ return ..

[책 리뷰] 처음 시작하는 R 데이터 분석

해당 리뷰는 "한빛미디어"에서 제공하는 도서를 이용하여 리뷰를 진행하였습니다. 개발자에게 R은 계륵같은 존재인것 같다. Java나 C++처럼 생산성에 도움을 주는것도 아닌것이 데이터분석에 특화 된 언어도 아닌것 같고.. 그렇다고 어렵다고 안배우기엔 쉬운언어로 보이고.. 몇번에 걸쳐 R을 사내/외 강의를 듣기도 했지만 한두시간의 강의로는 제대로 공부했다고 알기 어려웠다. 하지만 이 책을 완독한 느낌을 짧게 정리하자면 아래와 같다. 1. 초급자용 책이라서 개발자에게 매우 쉽다.2. 기본기에 충실하기 위한 중요개념이 잘 설명되어 있다.3. 예제가 아주 멋지고 활용적이다. 개발자가 아닌분에게는 7일 완성으로 간단한 데이터분석을 R을 활용하는 방법을 잘 습득 할 수 있다.개발자라면 3일만에 R이 무엇인지 기본 개..

일상/책 리뷰 2018.10.29
Intellij에서 scala와 sbt를 사용시 반드시 알아야할 3가지

아래 글은 Intellij IDEA 2018.2 이후 버젼에서 scala를 사용하기 위한 sbt plugin이 동작하는 방식에 대해 설명한 글 입니다. 만약 이 글을 보시는 분이 intellij에서 scala와 sbt plugin을 쓰신다면 반드시 이 포스팅을 읽어볼 것을 권장합니다. 제가 삽질을 너무 많이해서.. 다른 분은 삽질을 덜 했으면 좋겠습니다. ㅠㅠ SBTSBT란. SBT는 최신 빌드 도구 중 하나이다. 스칼라로 작성되었고, 스칼라에 사용하기 편한 기능을 많이 제공하기는 하지만, SBT 자체는 범용 빌드 도구이다. 1. sbt project를 import 하기이미 존재하는 sbt로 빌드된 project를 intellij에서 사용하기 위해 import할 때 아래와 같이 진행한다. (1) Inte..

Kafka opensource 분석을 통한 replication assignment 로직 확인

Replication과 partition 개념은 Apache Kafka에서 fault tolerance 동작을 위한 핵심개념이다. 각 broker에 어떻게 partition들이 replication 되는지 github에 올라가 있는 Kafka의 opensource를 분석하여 알아 보자. Partition과 Replication # Partition : 어떤 토픽에 대해서 producer/consumer가 병렬처리방식으로 분산저장되는 단위 # Replication : 높은 가용성(High Availibility)을 얻기 위해 각각의 partition을 각기 다른 브로커에 복제하는 역할 Kafka에서 Topic을 생성하게 되면, 설정 한 partition, replication의 각각 개수에 따라 parti..

빅데이터/Kafka 2018.09.28
가격 최적화를 위해 맞춤형 회귀 분석 모델을 활용한 airbnb

Introairbnb는 게스트와 호스트의 연결해주는 서비스이다. 호스트는 자신의 집의 전체 혹은 일부를 website에 올려놓으면 게스트는 호스트에게 연락하여 계약이 이루어지는 방식이다. 여기서 중요한 포인트는 airbnb는 제공자(호스트)/소비자(게스트)로 이루어진 two-sided marketplace이기 때문에, 가격이 적절하지 않으면 예약율이 떨어지게 된다. airbnb의 플랫폼 사업이라는 특성상 호스트, 게스트의 균형을 맞추는 것이 중요했다. airbnb는 위와 같은 문제를 풀기 위해 적절한 가격책정을 위해 빅데이터를 통한 분석을 사용하였고 해당 결과에 대한 논문(Customized Regression Model for Airbnb Dynamic Pricing)을 발표하였다. 관련 논문 - Ho..

빅데이터 2018.09.19
HDFS(Hadoop Distributed File System) 아키텍쳐 개요 및 설명

IntroductionHDFS(Hadoop Distributed File System)는 분산 파일시스템을 하드웨어에 저장하고, 읽는 역할을 한다. 여타 다른 분산 파일 시스템과 비슷해 보이지만, HDFS는 아래와 같은 특징을 가진다. # Highly fault-tolerant# Deployed on low-cost hardware 상기와 같은 두개의 장점으로 인해 HDFS는 대용량 데이터에 대해 저장 및 조회 용으로 적절하게 사용 가능하다. HDFS의 GoalHardware Failure1개의 node가 365일 중 하루동안 고장이 난다고 가정하자, HDFS의 data node가 1000대라면, 확률적으로 하루에 3대가 고장난다. HDFS는 이러한 물리적 고장에 대해서 신속한 detection과 aut..

빅데이터 2018.09.17
app의 강제종료로 인해 FCM cloud messaging 푸시를 받지 못하는 이유?

FCM cloud messaging을 사용하면 google의 푸시서버를 활용하여 각 기기에 push를 날릴 수 있다. 그런데 QA를 하던도중 흥미롭게도 push를 받지 못하는 단말이 생겼다. # 단말 재시작 후# 안드로이드 settings에서 force kill(강제종료) 흥미로운 사실은, 카카오톡이나 라인과 같은 App들은 단말기를 껐다 켜도, 그리고 강제종료 하더라도 잘 된다는 사실이다. 이를 해결하기 위해 FCM 공식문서를 찾아봤지만 뚜렷하게 나올만한 해결책이 없었고 stackoverflow에서 아래와 같은 정보를 얻게 되었다. 원본 글 : Android app not receiving Firebase Notification when app is stopped from multi-task tray ..

IaC(Infrastructure as Code)를 통한 Enterprise환경에서 Infra 운영프로세스의 한계 해결방안

Enterprise환경의 infra 운영프로세스 지옥 - 사례1개발자 A씨는 운영하고 있는 5개의 서버에 대해 X라고 하는 네트워크 정책을 가져가려고 한다. 이때, 거쳐야 하는 과정은 아래와 같다. 1) 5개 서버에 대한 X 정책에 대해 정의하고 티켓을 만들고 보안담당자에게 할당한다.2) 해당 티켓을 보안담당자가 검토한다.3) 보안 확인 후 네트워크담당자에게 할당한다.4) 네트워크 담당자는 X 정책에 대해 확인하고 5개 서버에 적용한다.5) 적용이 되면 네트워크 담당자는 A씨에게 적용되었음을 알린다.6) A씨는 적용이 되었음을 확인하고 계속 일을 진행한다. Enterprise환경의 infra 운영프로세스 지옥 - 사례2사례1이 일어나고 5년뒤(이미 A씨는 퇴사) 개발자 B씨는 5개의 서버를 추가(scal..

Rest api에서 Content-Type 헤더의 역할 및 Spring boot 예제

Rest api를 개발할 때 사용하는 Content-Type의 역할, 그리고 예제를 통해 어떻게 헤더의 정보를 활용하는지 알아보자. Content-Type Header? The purpose of the Content-Type field is to describe the data contained in the body fully enough that the receiving user agent can pick an appropriate agent or mechanism to present the data to the user, or otherwise deal with the data in an appropriate manner. - w3.org Http request를 통해 data가 전달될 때, 데이터..

Elasticsearch와 Kibana, filebeat 를 활용한 쿠버네티스 로깅 아키텍쳐

Elasticsearch와 Kibana 그리고 filebeat를 활용하면 간단하고 효과적으로 쿠버네티스의 log를 수집하고 조회할 수 있다. 구성Log를 수집하여 데이터를 저장 및 조회하는 Elasticsearch pod쿠버네티스의 각 node에서 daemonset으로 띄워져 log를 수집하여 elasticsearch로 전송하는 Filebeat pod수집한 log를 visualize하여 확인할 Kibana pod그림. Elasticsearch와 Kibana, filebeat를 사용한 kubernetes logging 아키텍쳐 elasticsearch.yaml# 엘라스틱서치 image를 가져와서 pod으로 띄웁니다.# PVC를 사용하는 경우와 PVC를 사용하지 않는 경우로 사용할 수 있습니다. 1) PVC..

Amazon web service 한달 최대 2,500원으로 마음껏 쓸 수 있는 서버 호스팅 하기(Reserved Instance)

AWS에는 EC2 서비스를 통해 Linux서버(혹은 윈도우, 우분투 등)를 사용할 수 있다. 그러나 막상 쓸려고하니 금액이 어떻게 되는지도 모르겠고, 나중에 요금 폭탄을 맞을까바 두렵다. 이때는 Reserved Instance(예약 인스턴스)를 사용하면 아주 저렴한 가격(기존가격 -30%)에 요금폭탄 걱정없이 서버를 사용 할 수 있다. 준비물- AWS 계정- AWS 결제 가능한카드- 5분 Region을 선택하고, Reserved Instance를 선택(속도때문에 Seoul Region을 사용함) Reserved Instance 검색페이지가 나온다.가장 spec이 낮은 t2.nano를 선택한다. t2.nano instance에 대한 가격리스트를 확인 할 수 있다. 12개월에 35달러 - 4만 5천원(역산하..

개발이야기 2018.07.20