전체 글 194

Jenkins을 Batch Scheduler로 활용하기

Jenkins을 Batch Scheduler로 활용하기- 서비스를 개발을 하다보면 실시간성으로 데이터를 처리 하는 기능도 필요하지만 (api-server, streamming.. etc) 정해지 시간내에 Batch 성으로 돌아가야되는 서비스 기능이 있을수도 있다. 그 예로는 이관, 검증, 이벤트 등의 경우이다.- 정해진 시간에 실행되는 잡을 cron job이라고 하는데 보통은 리눅스 명령어인 crontab을 사용을 한다. - 하지만 shell을 이용한 batch 설정은 UI가 없고 로그 등을 확인하기가 어려운것이 있다. 직접 Schduler를 개발을 하는 방법도 있지만 여기에서는 Jenkins을 Batch Scheduler로 활용하는 방법에 대해 정리해보자. Jenkins 다운 받기- https://je..

Graphite

Graphite- 시계열 데이터베이스중에 하나로써 Metric 정보를 저장하는 곳이 특화가 되어있는 데이터베이스이다.- Graph Dashboard Grafana와 연동이 쉽다. 구성요소- carbon : a Twisted daemon that listens for time-series data - carbon-cache - carbon-aggregator - carbon-aggregator-cache - carbon-relay- whisper : a simple database library for storing time-series data- graphite webapp : A Django webapp that renders graphs on-demand using Cairo Installdocker..

AWS EC2 Auto Scaling

Auto Scaling 구성 요스- 그룹 : EC2 인스턴스는 그룹에 정리되어 조정 및 관리 목적의 논리적 단위로 처리할 수 있습니다.- 시작 구성 : 그룹에서는 시작 구성을 그룹의 EC2 인스턴스용 템플릿으로 사용합니다. EC2의 userdata 설정 등을 포함- 확장 계획 : 확장 계획은 Auto Scaling에 확장을 수행하는 시기와 방식을 전달합니다. 조정- 수동 조종 : ASG 그룹의 크기를 변경이 가능하다. AWS에서는 지원하지 않는 기능에 대해 이용하여 수동 조정을 하는 스크립트를 개발을 할수 있다.ex) AWS Autoscale 정채을 적용하기 힘든 경우, Elastic Search - Cluster Node가 빠져 나갈때 Replica의 복제를 기다려야 된다.- 예약된 조종 : 시간에 맞..

인프라/AWS 2018.06.13

객체지향 응집도와 결합도

객체지향적으로 모듈은 응집도가 높고, 결합도가 낮을수록 좋은 코드이다. 코드를 작성을 할때 자신의 작성하는 코드가 좋은 코드인지 나쁜 코드인지를 판단을 할수 있는 기준이 될수 있다. 응집도가 높은 코드, 결합도가 낮은 코드는- 이해하기가 쉽다- 수정하기가 쉽다- 하나의 모듈에서 다른 모듈에서의 코드 연관이 많이 없다.- 하나의 모듈 단위를 지웠을때 다른 모듈의 코드를 수정하지 않아도 된다.- 하나의 기능을 수정한다면 하나의 모듈만 수정을 하면 된다. 응집도가 낮은 코드, 결합도가 높은 코드는- 이해하기가 어렵다- 수정하기가 어렵다- 하나의 모듈 단위에서 다른 모듈 단위에서서의 코드 연관이 많이 있다.- 하나의 모듈 단위를 지웠을때 다른 모듈의 코드를 수정을 해야 된다.- 하나의 기능을 수정할려고 하면 여..

Programing 2018.06.13

Kafka Partition과 Offset

Kafka Partition과 Offset - 각각의 파티션은 순서, 불변적으로 순서대로 저장이 된다.- Produce가 Write할때마다 Partition Write하는 형식으로 데이터가 분산이 된다.- 각각의 Partition은 replica로 복제가 되어 다른 Kafka Node에도 존재한다. (Replica)- 연속적인 id (sequence id)를 offset이라고 한다.- Consumer 입장에서는 각각의 Partition에 해당하는 offset의 데이터를 가지고 와서 소비를 한다.- 하나의 Partition 당 하나의 Consumer가 소비를 하는 것이 제일 이상적인 모습이다.- 데이터가 밀리거나 처리가 안되는 것을 확인하기 위해서는 lag을 확인을 하면 된다.- Prdoucer가 Part..

인덱스 설계에 필요한 선택도와 카디널리티

선택도(Selectivity)- 전체 대상 레코드 중에서 특정 조건에 의해 선택될 것으로 예상되는 레코드 비율을 말한다. 선택도 -> 카디널리티 -> 비용 -> 액세스 방식, 조인 순서,. 조인 방법 등 결정 1 1선택도 = --------------------- = -------------- Distinct Value 개수 num_distinct 카디널리티 (Cardinality)- 키다널리티(Cardinality)는 특정 액세스 단계를 거치고 나서 출력될 것으로 예상되는 결과 건수를 말하며, 아래와 같이 총 로우 수에 선택도를 곱해서 구한다. 카디널리티 = 총 로우 수 X 선택도 선택도, 카디널리티가 중요한 이유- 하나의 키값에 여러개의 row가 맵핑이 되는 경우에는 SELECT시 인덱스를 안타고 F..

Database/MySQL 2018.06.11

요구사항의 분석 및 계획

요구사항의 분석 및 계획프로그래밍 개발에 필요한 능력 1. 커뮤니케이션 능력 (요구사항을 유도하는 능력)2. 좋은 시스템 만드는 능력 (기능 추가가 쉬운, 기능 수정이 쉬운 시스템)3. 개발 능력 (기능을 개발하는 능력) 요구사항을 분석을 하는 방법에 대해 생각을 해보자.예를 들어 아래와 같은 요구사항은 있다고 가정을 하자. 1. 요구사항1. 사용자는 To-do List를 통해 자신의 할일을 입력/삭제/추가를 할수가 있다. 2. 반복적인 할일은 주기설정을 통해 알람이 간다.2. 요구사항의 분석을 하는 기능 리스트업1. 사용자가 할일을 추가 할수 있다. 2. 사용자가 할일을 삭제 할수 있다.3. 사용자가 주기설정을 할수가 있다. 3. 기능 통해 도메인을 정의를 한다.- User- Task- Schdule ..

카테고리 없음 2018.06.10

Group By 쿼리의 활용

Group By- 테이블에 저장되어 있는 데이터를 분리를 할때 사용되는 SQL Keyword- Having 절을 이용하여 Group By시에 조건을 줄수가 있다. 기본 SynatxSELECT column_name(s)FROM table_nameWHERE conditionGROUP BY column_name(s)ORDER BY column_name(s); Sample Query- Count를 이용하는 방법 : 하나의 key를 기준으로 가지고 있는 갯수가 2개 이상인 결과를 얻는 쿼리SELECT userId, count(userId) as cntFROM user_ordersGROUP BY userIdHAVING count(userId) > 1 - Count를 이용하는 방법 : user log를 이용하여 다른..

Database/MySQL 2018.06.09

@ EnableTransactionManagement Advice Mode PROXY와 ASPECTJ

낙관적 Lock (Optimistic Lock)을 이용해서 비즈니스 로직을 처리를 할때 클래스의 내부의 함수는 트랙잭션이 제대로 걸리지 않아 데이터가 저장이 되지 않았었다. 이와 관련해서 stackoverflow에 검색을 해보니 관련되서 질문을 올린 사람이 있었다. 관련해서는 실수를 하기 쉬운 것이라고 생각이 되서 블로그 글을 따로 정리를 한다.Option A@Transactional public void generate(){ // selects save(a); // more selects } @Transactional public void save(Object a){ //save the object }Option Bpublic void generate(){ // selects save(a); // mo..

Database/JPA 2018.06.03

Akka Stream Graph DSL를 이용한 Broadcast/Merge 기능 구현

Akka Stream Graph DSL를 이용한 Broadcast/Merge 기능 구현- Data stream 기능을 개발을 하다보면 같은 데이터를 Broadcast로 보내고 분석해야 되는 경우가 있다.- 또 다른 경우에는 데이터를 하나로 합치는 Merge 기능이 필요할때도 있다.- Akka Stream에서는 GraphDSL를 이용하여 Broadcast/Merge 기능을 제공한다. gradledependencies { compile group: 'com.typesafe.akka', name: 'akka-stream_2.12', version: '2.5.13'}Reference- https://doc.akka.io/docs/akka/2.5/stream/stream-graphs.html Example fin..

Programing/Akka 2018.06.02