Programing 101

Rule Engine

Rule Engine언제 rule engine을 사용해야 되는 것인가?해결해야 할 문제가 전통적인 코드개발로는 반복적인 코드 반복이 나올때비지니스 요구 사항을 구현하기가 쉽지만, 그것을 해결하기 위한 유연한 방법을 찾을때비지니스 요구 사항을 구현하기가 어려울때로직이 자주 변경으로 인해 서비스 배포가 빈번하게 일어날때기술적이지 않은 업무영역 전문가(비즈니스 분석가)가 시스템의 룰을 읽을 수 있어야 할때용어Facts : 데이터Condition : 조건Action : 조건이 맞으면 해당하는 Action Rule Engine 종류 Rule 엔진을 직접 구현을 해서 사용할수도 있지만 Open Source를 이용하여 구현을 할수도 있다. Rule Engine은 아래와 같은 종류의 Open Source가 있다.Dro..

Programing/Java 2018.08.04

Adapter Pattern

Adapter PatternInterface를 이용하여 라이브러리 API를 재정하는 패턴Interface만 동일하면 기존 라이브러리에서 새로운 라이브러리로 변경이 쉬워진다. UML Diagram Exampleinterface ClickInfoClient{ClickInfo get(Long clickId);} class ClickInfoHiveClient implements ClickInfoClient{ClickInfo get(Long clickId){return HiveRepository.findById(clickId)}} ClickInfoClient clickInfoClient = new ClickInfoHiveClient();System.out.println(clickInfoClinet.get(1));..

Programing/Java 2018.08.01

Akka Stream Error Handling

Akka Stream Error HandlingAkka Stream의 Operator에서 에러가 발생되는 경우에는 기본 설정인 Stream의 stop으로 되어있고, 기본적으로 에러 관련 메시지는 나타나지 않는다.실시간 데이터 처리 등에서는 하나의 데이터가 오류가 난다고 전체의 데이터를 받지 못하면 안되기 때문에 Error Handling에 관련된 설정이 불가피하다. Logging ErrorSource.from(Arrays.asList(-1, 0, 1)) .map(x -> 1 / x) //throwing ArithmeticException: / by zero .log("error logging") .runWith(Sink.ignore(), mat);`log()` 를 이용하여 error log를 생성을 할수..

Programing/Akka 2018.08.01

Python Fabric

Python Fabric원격 SSH Remote를 이용한 Shell Command 실행기Deploy, 인프라 Provisioning 등에서 사용을 할 수 있다.SSH Key로 이용하여 원격 컨트롤 할수 있다 SSH Key 생성 가이드 : https://opentutorials.org/module/432/3742적용 방법 : https://stackoverflow.com/questions/5069895/connecting-to-ec2-using-keypair-pem-file-via-fabricenv : https://stackoverflow.com/questions/5327465/using-an-ssh-keyfile-with-fabric#5327496https://gist.github.com/yuvadm/..

Programing/Python 2018.07.29

Apache HttpClient Example

Apache Http Client ExampleApache Http Client Examplehttps://hc.apache.org/Sample Code : https://hc.apache.org/httpcomponents-client-ga/examples.htmlSpring RestTemplate 보다 설정이나 사용이 까다롭다. 설정이 많이 필요한 경우를 제외하고는 Spring RestTemplate를 활용하자.Sample Codepublic class ClientWithResponseHandler { public final static void main(String[] args) throws Exception { CloseableHttpClient httpclient = HttpClients.crea..

Programing/Java 2018.07.29

Akka Http

Akka Http소개akka actor, akka stream을 이용한 full server- and client-side Http StackWeb Application 제작하는 곳의 사용은 적절하지 않다REST/HTTP Interface를 제공하는 것에 특화가 되어있다.akka actor와 akka stream을 활용한 프로그래밍이 가능하다.Http Server API도 제공, Http Client API로 제공을 한다. Using Akka Httpgradlecompile group: 'com.typesafe.akka', name: 'akka-http_2.12', version: '10.1.3'compile group: 'com.typesafe.akka', name: 'akka-stream_2.12',..

Programing/Akka 2018.07.28

입력 데이터에 의해 오류를 방지할 코드가 필요하다.

입력 데이터에 의해 오류를 방지할 코드가 필요하다.입력 데이터에 대한 유효성에 대해 고민을 해야 된다.로그 분석 등에서의 데이터 분석에서는 입력 데이터가 어떤 형태로 들어올지가 예측이 안되기 때문에 방어코드가 필요하다.방어 코드를 작성하고 방어 코드에 대한 유닛테스크 코드를 반드시 추가한다.String -> Long, Integer로 변환되는 경우String -> List 로 변환되는 경우Input 데이터의 null 값이 들어있는 경우Object -> String, Long 등 cast이 되는 경우

Java Object 비교 ==

Long, Integer, String 등과 같은 Object를 비교를 할때에는 아래와 같은 방식으로 하면 원하는 작동이 나오지 않는다. Long a = 1L;Long b = 1L; if( a == b ) System.out.println("a==b")객체에서의 ==은 referecne비교, 따라서 a, b는 서로 다른 reference를 가지고 있기 때문에 false로 나온다. Long a = 1L;Long b = 1L; if( a.equals(b) ) System.out.println("a==b")equals 를 사용하여 object를 같은지 유무를 비교를 한다.a가 null 인경우에는 null 포인트 에러가 발생이 되기 때문에 방어 코드가 필요하다.String 인 경우에는 StringUtils의 i..

Programing/Java 2018.07.25

Akka Stream Operator Fusion

Akka Stream Operator Fusion- 기본 설정으로 Akka Stream은 stream operator (source, sink)를 하나로 합치는데(fused), 이는 하나의 actor에서 stream graph를 실행되는 것을 의미한다.- 하나의 Operator에서 다른 Operator로 데이터를 전달하는 것은 fused stage간의 전달보다는 더 빠르다 (비동기 메시지 overhead때문에)- fused stream operator는 동시에 실행되지 않는다. 이말은 CPU Core는 하나의 fused part만 실행을 시킨다.- 병렬 프로세싱 (Parallel Proccess)를 하기위해서는 Asynchronous Boundaries를 직접 손으로 넣어줘야한다.Source.range(..

Programing/Akka 2018.06.29