Programing 101

Akka Actor Hierarchy

Akka Actor Hierarchysystem.actorOf()로 만들어진 Actor user guardian에서 만들어 진다.getContext().actorOf()를 이용하여 자식(Child) Actor를 생성을 할수 있다./ - root guardian이라고 불린다. 시스템에 있는 모든 Actor의 부모 엑터이다./user - 유저가 생성된 모든 엑터의 부모 엑터이다./system - system guardianExample - Print reference부모/자식 관계의 actor를 알아보는 방법중에 제일 쉬운 방법은 ActorRef의 Reference를 출력하는 방법이다.package com.lightbend.akka.sample; import akka.actor.AbstractActor;im..

Programing/Akka 2018.10.22

Akka Actor Life Cycle

Akka Actor Life CycleActor는 UID, Mailbox, Path를 가지고 있다.외부에서는 ActorRef를 통해 접근을 한다., Path, UID를 가지고 있는다.객체를 직접 접근하지는 못한다 (Hides the instance)ActorSelection를 통해 ActorRef를 가지고 온다.actorOf를 통해 액터를 생성을 할수 있다.preStart() method : 엑터가 시작되고 첫번째 메시지를 받기 전에 실행이 된다postStop() method 엑터가 중단될때 시작된다, 실행이 되후 메시지를 받지 못한다.resume와 restart의 차이는 새로운 Actor를 생성을 하나 안하나의 차이이다.context.stop() 또는 Posion Pill를 이용하여 Actor를 종료할..

Programing/Akka 2018.10.21

Spring 자체 인스턴스화 된 객체에 종속성을 주입하는 방법

Spring 자체 인스턴스화 된 객체에 종속성을 주입하는 방법private @Autowired AutowireCapableBeanFactory beanFactory; public void doStuff() { MyBean obj = new MyBean(); beanFactory.autowireBean(obj); // obj will now have its dependencies autowired.} AutowireCapableBeanFactory의 autowireBean을 이용하여 자체 인스턴스화 된 객체에 종속성을 주입을 할수가 있다. 직접 ApplicationContext를 접근해서 하는 방법 방법AutowireCapableBeanFactory factory = applicationContext.ge..

Event Sourcing

Event Sourcing 애플리케이션의 모든 상태변화를 순서에 따라 이벤트로 저장을 한다.Event StoreImmutableAppend Only모든 상태 변화의 이벤트를 저장을 한다.최종 상태를 찾기위해서는 모든 이벤트를 replay를 해야 되기 떄문에 이벤트가 많아지는 경우는 속도가 조회 속도가 느릴수가 있다.이 경우에는 snapshot를 통해 최종 상태를 따로 저장을 한다. Snapshot이벤트의 최종 상태를 저장한다. 장점모든 이벤트를 다 저장을 하기 때문에 100% 정확한 검증 로깅을 할수 있다. CQRS상태 변화 이벤트를 처리하는 Command과 조회하는 Read를 분리

Programing 2018.10.16

Akka Pulling Pattern

Akka Pulling Pattern 일반적인 시나리오Email 마켓팅 타겟 고객을 DB에서 읽는다. (Customer Target Read Actor) FASTEmail 컨텐츠를 생성을 한다. (Email Content Create Actor) FASTEmail를 보낸다. (Email Sender Actor) SLOWActor를 이용하여 간단한 구조의 시스템을 제작하는 경우 위와 같은 시나리오의 시스템을 제작을 할수 있다.Email Send할때 속도가 느리기 때문에 Email를 보내는 Actor가 Mailbox가 Overflow가 되거나 GC로 인해 시스템이 정상 작동이 되지 않을수가 있다.Pulling Pattern을 적용한 시나리오작업을 하는 Worker Actor들이 있다.Worker Actor는..

Programing/Akka 2018.10.13

Guava Eventbus @AllowConcurrentEvents

Guava Eventbus @AllowConcurrentEvents@Subscribe@AllowConcurrentEventspublic void receive(String message) throws InterruptedException {log.info("Receiving message... {}", message);receiving(3, message);log.info("Done");}@Subscribe 만 쓴 경우에는 synchronized로 감싸져서 호출이 되기 때문에 멀티 쓰레드에서 동시 호출이 막혀있다. 이는 성능에 엄청난 영향을 미치게 된다.@Subscribe 매서드를 Thread-Safe하게 개발을 한뒤 @AllowConcurrentEvents를 붙어 주면 멀티 쓰레드 상황에서 문제없이 사..

Programing/Java 2018.10.10

Observer Pattern

Observer Patternhttps://en.wikipedia.org/wiki/Observer_pattern 여러개의 observer를 가지고 있는 subject가 있고 상태가 변경이 되었을때 (state change) 자동으로 observer에게 notify를 한다.객체가 1 to N로 의존성을 가지고 있을때1개의 객체의 상태가 바꿨을때 의존하고 있는(dependent) 객체들이 자동으로 업데이트가 되어야 할때 Structure Examplesimport java.util.Observable;import java.util.Scanner; class EventSource extends Observable implements Runnable { public void run() { while (true)..

Programing 2018.09.30

Akka with Spring

Akka with SpringActor를 만들때 필요한 의존성을 대표적인 Dependency Injection 프레임워크인 Spring를 이용하여 사용하는 방법에 대해 알아보자Spring Bean Cycle과 다르게 Akka Actor의 Life Cycle을 가지고 있는다. Gradlecompile "org.springframework:spring-context:${spring.version}"compile "com.typesafe.akka:akka-actor_2.11:${akka.version}" Define Actor@Component@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)public class GreetingActor extends UntypedActor..

Programing/Akka 2018.09.29

Spring Bean Life Cycle

Spring Bean Life Cycle Annotation을 이용하는 방법 @PostConstruct, @PreDestroy 를 이용하면 Bean이 생성될때 Bean 제거 될때의 Life Cycle에 코드를 실행을 할수가 있다. @Service public class MyService { @PostConstruct public void init(){ System.out.println("MyService init method called"); } @PreDestroy public void destory(){ System.out.println("MyService destroy method called"); } } InitializingBean, DisposableBean Interface를 이용하는 방법 ..