외부 Dependency는 내부 로직까지 전파가 되어서는 안된다. 외부 Dependency는 내부 로직까지 전파가 되어서는 안된다.Dto(Data Transfer Object) 는 내부 객체로 변환해서 처리를 한다.Dto는 이기종간의 시스템에서 통신을 하기 위한 객체이다.Dto는 내부 도메인 로직까지 포함이 되어있으면 결합도 높은 코드가 되어버린다.외부 시스템이 바뀌면 내부 로직이 바뀌는게 많이 지기 때문에 Dto로 받은 객체는 내부 객체로 변환해서 처리를 한다. Programing/Refactoring 2018.09.19
Akka Actor 개발팁 Akka Actor 개발팁 1. Actor은 하나의 기능만을 담당을 한다.객체지향의 SRP기능을 많아 질수록 복잡성이 높아진다. 응집도가 낮아진다. 결합도 높아진다. 2. Actor Message는 Actor Class 내부에 정의한다.public class DemoMessagesActor extends AbstractLoggingActor { static public class Greeting { private final String from; public Greeting(String from) { this.from = from; } public String getGreeter() { return from; } } @Override public Receive createReceive() { return.. Programing/Akka 2018.09.18
CompletableFuture CompletableFuture ExamplesupplyAsync 메서드를 이용한 방식CompletableFuture future = CompletableFuture.supplyAsync(() -> "Hello"); // ... assertEquals("Hello", future.get()); thenApply 메서드를 이용한 결과값 처리CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture future = completableFuture .thenApply(s -> s + " World"); assertEquals("Hello World", future.get()); thenC.. Programing/Java 2018.09.15
Guava Cache Guava Cache데이터를 계속 읽을 필요가 없을 경우 캐쉬를 이용하여 처리를 할수 있다. 일반적으로 엔티티를 캐쉬도 하지만 설정(Config) 같이 자주 바뀌지 않는 값을 Cache를 이용하여 활용할수 있다.Guava Cache는 Local에서 작동되는 캐쉬이기 때문에 클러스터에서는 공유가 되지 않는다. 이경우에는 Memcached, Redis 를 활용한다. ExampleLoadingCache graphs = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES) .removalListener(MY_LISTENER) .build( new CacheLoader() { public Graph load(Key .. Programing/Java 2018.09.12
Akka Distributed Publish Subscribe in Cluster #3. Configuration Akka Distributed Publish Subscribe in Cluster #3. ConfigurationAkka PubSub에 대한 Configuration에 대해 알아보자.application.conf# Settings for the DistributedPubSub extensionakka.cluster.pub-sub { # Actor name of the mediator actor, /system/distributedPubSubMediator name = distributedPubSubMediator # Start the mediator on members tagged with this role. # All members are used if undefined or empty. role = .. Programing/Akka 2018.09.11
Akka Distributed Publish Subscribe in Cluster #2.Send Akka Distributed Publish Subscribe in Cluster #2.SendSendpoint-point modecluster 내부 node에 actor가 어디에 있는지를 모르는 경우에 사용을 한다.특정 일을 하고 있는 Actor를 찾는 경우채팅방에서 상대방의 Actor를 찾는 경우메세지가는 path가 매칭되는 하나의 actor에게만 전달이 된다.여러개인 경우에는 RoutingLogic 에 따라 하나의 actor에만 메시지가 전달이 된다.DistributedPubSubMediator.Put 를 이용하여 ActorRef를 Path로 registry 에 등록이 된다.DistributedPubSubMediator.Send를 이용하여 해당하는 Path로 메시지를 전달을 한다.종료될때 자동으로 .. Programing/Akka 2018.09.11
Spring @Transactional Propagation Spring @Transactional PropagationSpring Framework에서 제공하는 트랙잭션의 기능인 전파에 대해 알아보자. 결제, 예약 등과 같이 트랙잭션을 세밀하게 컨트롤을 해야하는 서비스 반드시 알아야되는 내용 중이 하나이다. 어노테이션의 해당하는 옵션은 propagation 필드이다.REQUIREDTransaction이 없는 경우에는 새롭게 생성을 한다.Method 2가 실행이 되는 경우에는 Transaction이 생성된 것을 사용한다.REQUIRES_NEW새로운 Transaction을 생성을 한다.Tip (2018/11/27 추가)Transcation 1이 길어지는 경우가 발생이 될수도 있다 이럴 경우에는 Long Transaction이기 때문에 DB가 Restart가 될수가 .. Programing/Spring Framework 2018.09.10
Spring Constructor Dependency Injection Spring Constructor Dependency Injection생성자를 이용한 의존성 주입공통 로직을 가지고 있지만 멤버 변수가 다른 경우에 활용을 할수 있다.XML Config인 경우constructor-arg 를 이용하여 의존성 주입을 할수 있다.Java Config인 경우공통 로직은 Abstract Class로 구현을 하고 구현체는 그 클래스를 extend를 한다.필요한 데이터는 super 키워드를 이용하여 주입을 한다. @Componentpublic class Car { @Autowired public Car(Engine engine, Transmission transmission) { this.engine = engine; this.transmission = transmission; }} Programing/Spring Framework 2018.09.06
Singleton Pattern Singleton Pattern대표적인 패턴 중의 하나프로그램이 실행되는 생성되는 객체가 1개로 생성하여 활용하는 패턴DB 등과 같이 하나만 사용이 되어야하는 곳에 활용이 된다.java.lang.Runtime, java.awt.Desktop 등등에서도 활용된다. Static를 이용한 간단한 singleton classpublic class SingletoneClass {private static SingletoneClass instance = new SingletoneClass(); private SingletoneClass() {System.out.println( "SingletoneClass constructor." );}public static SingletoneClass getInstance ().. Programing/Java 2018.09.06
MVC Pattern MVC Pattern사용자 인터페이스를 구성하는 대표적인 PatternMVC - Model / View / ControllerModel데이터상태비즈니스 로직이 포함이 되어있다.View표현실제 유저 인터페이스최대한 로직이 포함이 되어있지 않아야 된다ControllerView를 적절하게 생성 또는 업데이트한다.Model의 상태를 변경을 할수가 있다. 일반적인 웹에서의 MVC Programing 2018.09.04