* Pattern 이란?
Pattern [명사] : a model, guide or set of instructions for making something
(무엇인가를 만들기 위한 모델이나 가이드, 설명의 집합을 의미함)
시스템을 만들기 위해서 전체 중 일부 의미 있는 클래스들을 묶은 각각의 집합을 디자인 패턴 이라고 생각하면 된다.
* Service Locator 패턴
시스템에 성능에 영향을 주는 Service Locator 패턴이다.
Service Locator 패턴은 가장 빈번히 사용되는 EJB Home 객체나 DB Datasource 를 찾을 때 (lookup 할 때 )
소요되는 응답속도를 감소시키기 위해서 사용된다.
package com.pettern;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.naming.InitialContext;
public class ServiceLocator {
private InitialContext ic;
private Map cache;
private static ServiceLocator me;
static {
me = new ServiceLocator();
}
private ServiceLocator() {
cache = Collections.synchronizedMap(new HashMap()) ;
}
public InitialContext getInitialContext() throws Exception {
try {
if (ic == null) {
ic = new InitialContext();
}
} catch (Exception e) {
// TODO: handle exception
}
return ic ;
}
public static ServiceLocator getInstance() {
return me;
}
public EJBLocalHome getLocalHome (String jndiHomeName) throws Exception {
EJBLoclaHome home = null;
try {
if (cache.containsKey(jndiHomeName)) {
home = (EJBLocalHome)cache.get(jndiHomeName);
} else {
home = (EJBLocalHome)getInitialContext().lookup(jndiHomeName);
cache.put(jndiHomeName, home);
}
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return home;
}
}
위의 소스를 간단히 보면 cache 라는 Map 객체에 home 객체를 찾은 결과를 보관하고 있다가, 누군가 그 객체를 필요로 할 때 메모리에서 찾아서 제공하도록 되어 있다. 만약 해당 객체가 cache 라는 맵에 없으면 메모리에서 찾는다.
EJB home 객체를 찾거나 Datasource 객체를 찾는 시간을 일반적으로 30ms 가 소요 된다.
위의 예에는 EJB local home 을 사용했지만,
EJB Remote home 을 찾을 때에는 시스템에 따라서 1초가 소요되는 시스템도 있다.
하지만 메모리에서 찾으면 0.01 ms 도 소요되지 않으므로 적어도 100배 이상의 성능 향상을 가져 올 수 있다.
(ms 단위는 1/1000 초를 의미)
'JAVA > Coding Habit' 카테고리의 다른 글
[행안부] JAVA_시큐어_코딩_가이드 (0) | 2011.10.17 |
---|---|
[Story 04] 왜 자꾸 String 을 쓰지 말라는 거야? (3) | 2010.09.29 |
[Story 02] 도대체 GC 는 언제 발생할까? (0) | 2010.09.29 |
[Story 24] 패턴과 아키텍처는 잘 구성되어 있는가? (0) | 2010.09.28 |
[Book] 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기 (0) | 2010.09.28 |