Programing/Java 29

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

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

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

Java Generic (제너릭)

Java Generic (제너릭)형인자 자료형 (parameterized type) - List실 형인자 (actual type parameter) - String제너릭 자료형 (generic type) - List형식 형인자(formal type parameter) - E비한정적 와일드카드 자료형(unbounded wildcard type) - List무인자 자료형(raw type) - List한정적 형인자 (bounded type parameter) - 재귀적 형 한정 (recursive type bound) 한정적 와이들카드 자료형 (bounded wildcard type) - List

Programing/Java 2018.08.14

GC overhead limit exceeded

GC overhead limit exceeded 발생하는 이유CPU 사용량중 98%이상이 GC가 작동되는 경우 GC Overhead limit exceeded가 발생이 된다.대부분의 GC가 CPU를 사용하기 있기 때문에 user work은 작동이 되지 않는다.한정된 Heap Memory안에서 GC 대상의 객체는 없지만 새롭게 생성되는 객체가 메모리를 할당하지 못할경우에 GC의 시간이 길어지게된다. 에러가 발생되는 예제 코드class Wrapper { public static void main(String args[]) throws Exception { Map map = System.getProperties(); Random r = new Random(); while (true) { map.put(r.ne..

Programing/Java 2018.08.10

전략 패턴 (Strategy Pattern)

전략 패턴 (Strategy Pattern)특정한 계열의 알고리즘들을 정의하고각 알고리즘을 캡슐화하며이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. UML Class Diagram 활용상품 구매시 포인트를 적립해주는 시스템이라고 할때 상품의 카테고리마다 포인터의 적립 계산 규칙이 다르게 된다. 포인터를 계산을 하는 부분을 전략 패턴을 적용해서 활용할수 있다.상황에 따라 비즈니스로직이 변하는 부분, 외부 설정 (Config) 등에 따라 비즈니스 로직이 달라지는 부분Interface를 이용하는 방법, java 8 이상에서는 람다 함수(Functional Inteface)를 이용할수도 있다. Referencehttps://ko.wikipedia.org/wiki/%EC%A0%84%EB%9E%B5..

Programing/Java 2018.08.04

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

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