Programing 101

Actor Selection을 통한 Actor 찾기 (Identifying Actors via Actor Selection)

Actor Selection을 통한 Actor 찾기 (Identifying Actors via Actor Selection) 하나의 액터는 Unique한 Path를 가지고 있기 때문에 Path를 이용하여 Actor를 찾을수가 있다 (Look up) // will look up this absolute path getContext().actorSelection("/user/serviceA/actor"); // will look up sibling beneath same supervisor getContext().actorSelection("../joe"); `ActorSelection` 객체가 리턴이 된다. Remote System에서는 `ActorSelection`은 처음 응답은 한 Actor (init..

Programing/Akka 2018.09.02

SLF4J(Simple Logging Facade for Java)

SLF4J(Simple Logging Facade for Java)다양한 Logging Framework (java.util.logging, logback, log4j)를 동일한 인터페이스를 통해 Logging을 기능을 제공 Hello Worldimport org.slf4j.Logger;import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); }} 아래와 같은 에러메시지가 난다면 SLF4J: Failed to load class "o..

Programing/Java 2018.09.01

Executor service

Executor Service비동기 작업을 손쉽게 사용할수 있게 제공하는 프레임워크작업을 실행할수 있는 스레드풀을 제공한다.Factory Method을 이용하여 생성하는 방법ExecutorService executor = Executors.newFixedThreadPool(10); 직접 생성을 하는 방법ExecutorService executorService = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), (r, e) -> { log.error("Queue Overflow") };Runnable에 대한 Queue와 Core Thread Pool, Max Thread Pool, Thread Pool Al..

Programing/Java 2018.08.31

불변객체 (Immutable Object)

불변객체 (Immutable Object)객체를 생성 후 그 상태를 바꿀수 없는 객체객체가 가지고 있는 멤버 변수 (properties)가 변하지 않기 때문에 중간에 값이 바꿈으로써의 버그가 나는 코드를 작성할 확률이 줄어든다.변경이 되지 않기 때문에 멀티스레드 환경에서 Thread Safe하다.멤버 변수가 바뀐다고 한다면 새로운 객체를 생성하면 된다.기존 객체를 활용하는것이 아니고 새로운 객체가 계속 생성이 되기 때문에 Minor GC가 많이 발생이 될수가 있다.메모리의 크고, CPU 사양이 좋기때문에 거의 문제가 되지 않는다메모리,CPU 환경이 제약이 많은임베디드 환경에서는 문제가 될수 있다. 객체를 재 활용하는 방향으로 개발을 해야 된다.자바스크립트에서 불변 객체를 사용하고 싶다면 IMMUTABLE..

Programing 2018.08.28

B tree, B+ tree

B Tree데이베이스, 파일 시스템에서 널리 사용되는 트리 자료구조의 일종트리구조? 그래프의 일종, 여러 노드가 한 노드를 가리킬 수 없는 구조이다. 간단하게는 회로가 없고, 서로 다른 두 노드를 잇는 길 하나뿐인 그래프를 트리라고 한다.이진 트리를 확장, 하나의 노드가 가질수 있는 자식 노드의 최대 숫자 2보다 큰 트리 구조방대한 양의 저장된 자료를 검색해야 하는 경우 검색어와 자료를 일일이 비교하는 방식은 비효적이기 때문에 B 트리는 잘를 정렬된 상태로 보관하고 삽입 및 삭제를 대수 시간으로 할수 있다. B+ tree Quaternary Tree라고 알려져 있음키에 의해 각각 식별되는 레코드의 효율적인 삽입, 검색과 삭제를 통해 정렬된 데이터를 표현하기 위한 트리자료구조의 일종각각의 인덱스 세그먼트 ..

Programing 2018.08.25

Akka Cluster Seed Node

Akka Cluster Seed Nodeakka cluster로 join하기 위한 node, akka cluster node 중에 아무 노드의 주소를 사용하면 akka cluster에 join을 할수 있다.akka cluster의 진입점이라고 생각을 하면 된다.akka seed node로 사용하는 node가 모두 running 상태일 필요는 없다.seed node 중 첫번쨰 seed node가 중요하다. Akka Cluster가 처음 시작될때에는 첫번째 seed node는 작동되고 있는 (started) node의 주소로 할당을 한다. 시작하는 Node와 첫번째 seed node가 같을 경우 Akka Cluster가 새롭게 생긴다.cluster가 분리되는 현상이 나타날수 있기 때문에 seed node를 ..

Programing/Akka 2018.08.25

Spring JDBC

Spring JDBCSQL를 쉽게 날릴수 있도록 만들어진 libraryRowMapper 인터페이스를 통해 데이터맵핑을 할수 있다.JdbcTemplate, NamedParameterTemplateDatasource가 필요하다.Spring Data Jpa 등의 ORM을 사용할때, DB의 Index Hints 기능을 활용하지 못하는데 Spring JDBC를 직접 Native Query를 작성함으로써 해결을 할수있다.JdbcTemplateint rowCount = this.jdbcTemplate.queryForObject("select count(*) from t_actor", Integer.class); int countOfActorsNamedJoe = this.jdbcTemplate.queryForObjec..

Akka Scheduler

Akka SchedulerAkka Scheduler, 일정 시간 이후 작업을 작동시킨다.Scheduler의 정확도를 높히기 위해서는 application.conf 설정파일의 `akka.scheduler.tick-duration`를 수정해야된다.긴 시간 (long term) Scheduler로서는 부적절하기 때문에 akka-quartz-scheduler 사용하는 것이 좋다.주기적인 메시지나 싱글 메시지를 위한거면 scheduler 사용하는 것 대신 Actor Timer의 사용을 추천한다.Send to Actorsystem.scheduler().scheduleOnce(Duration.ofMillis(50), testActor, "foo", system.dispatcher(), null);Runnablesys..

Programing/Akka 2018.08.21