2009년 12월 7일 월요일

[Java] Effective Java - Still Effective After All These Years

 

Effective Java를 쓰신 Joshua Bloch(Chief Java Architect at Google)의 강의모습이다.

Java의 기본개념에 대한 내용들을 Quiz 형식을 통해 수강자들과 소통하며 즐겁게 진행하는 모습이 인상적이다.


<추신>

그의 모습에 열정과 즐거움이 묻어나온다... Google에 다녀서 그런가? ㅋ

(이런 Guru는 어디에서 일할까 궁금했는데, 역시.....Google에 있었다! ^^)


그리고 그가 공저한 "Java Puzzlers"라는 책도 한번 읽어봐야 겠다.

 

2009년 12월 6일 일요일

[Tx.]Connection Sharing 기능

[JEUS 5.0 #23 이상 버전 patch 기능 중 Connection Sharing 기능에 대한 설명]

UserTransaction tx = new UserTransaction();
tx.begin();
Connection con1 = ds.getConnection(); //ds : DataSource
Connection con2 = ds.getConnection();
Connection con3 = ds.getConnection();
...
tx.commit();

위와 같은 Global Transaction 로직에서,
일반적인 경우, con1, con2, con3은 3개의 다른 connection 객체이다.

connection sharing이란,
동일 Global Transaction에서는 여러번 connection객체를 요청하더라도
WAS단에서 동일한 connection 객체를 리턴시켜 주는 기능이다.
즉, con1, con2, con3은 모두 1개(con1)의 동일한 connection 객체이다.

즉, 위의 Connection Sharing 기능을 어플리케이션 측면에서는
tx.begin();
Connection con1 = ds.sgetConnection();
con2=con1;
con3=con1;
tx.commit();
와 같이 Connection을 재사용하도록 코딩한 것과 같은 의미가 된다.

정리하면, Connection Sharing 기능이란,
하나의 Global Transaction에서
어플리케이션에서 명시적으로 connection 객체를 재사용하지 않더라도
WAS단에서 동일한 connection 객체를 리턴하여 공유(재사용)하도록 하는 기능이다.

[장점]
이와 같은 기능은 하나의 Global Transaction에서 빈번히 getConnection을 수행하는 어플리케이션에서는
connection open 시간이 줄어들어 전체 response time 감소한다.
(즉, XA DataSource를 이용한 다수건 connection 사용환경에서 개선효과 발생)

[단점]
하지만, 단일 connection만 이용하는 어플리케이션에서는 connection 관리기능 추가로 인한 overhead로
connection open 시간이 더 늘어나서 전체 response time 증가한다.
(즉, Non XA DataSource를 이용한 connection 사용환경에서는 역효과 발생)








2009년 12월 5일 토요일

[Books]컨설팅의 비밀



누구에게 컨설팅이라는 행위를 하기 전에 컨설턴트로서 주의해야 할 사항들에 대한 정리!
특히, 돈이라는것을 받고 누구에게 충고(?) 할때에 고려해야할 사항들!

(※ 번역문맥이 다소 읽기에 어려웠음)

[기사] 아이폰의 성공 비밀

오마이뉴스 2009.12.05 김인성 기자

휴대폰 업체 구세주', 아이폰 성공 비밀
소비자 열광시킨 '편의성'...아이디어 중심으로 '선택과 집중'




애플의성공 비결을 논리적인 어조로 잘 써내려간 기사

결국 애플의 성공비결은 창의성!

과연 우리나라에 애플이 있었으면 성공할 수 있었을까?
아마 잡스형님도 꽉꽉막힌 군대식 문화와 어설픈 권위주위때문에 결코 쉽지 않았을 것이다.

이나라 대한민국에서도 애플과 같은 회사가 없는데
아이폰과 같은 제품이 나오기를 바라는건
닭이 없는데 달걀을 기대하는 것만큼이나 어리석은 일일지도 모른다.

이이폰의 놀라운 기능들을 눈으로 직접보면서
말로만 IT선진국이라고 떠들어 대며 IT에 아무런 비전이 없는 위정자들과
강이며 땅이며 삽질할 생각에만 가득한 현정부를 보면

대한민국의 IT는 밝지만은 않아 보인다.






[Books]Effective Java(Second Edition)


Java의 기본에 대한 생각을 하게 하는 책
Java Program Performance Tuning 관련 작업 전에 한번은 읽어봐야할 내용들





[JDBC] Oracle JDBC를 이용한 성능향상 방법

1. Statement Caching

① Implicit Statement Caching

// Statement cache 사이즈를 5로 설정
((OracleConnection) conn).setStatementCacheSize(5);
// Enable Implicit caching
((OracleConnection) conn).setImplicitCachingEnabled(true);

② Explicit Statement Caching

// Statement Cache 사이즈를 5로 설정
((OracleConnection) conn).setStatementCacheSize(5);
// Enable Explicit caching
((OracleConnection) conn).setExplicitCachingEnabled(true);

 

2. Implicit Connection Caching

private static final String CACHE_NAME =“ CacheSample”;
// Datasource 초기화
OracleDataSource ods = new OracleDataSource();

// Enable caching
ods.setConnectionCachingEnabled(true);
// Set the cache name
ods.setConnectionCacheName(CACHE_NAME);

// cache, datasource, cache properties를 지정하여 새로운 cache생성
connMgr.createCache(CACHE_NAME, ods, properties);
Connection conn = ods.getConnection();

 

3. Update Batching

① Standard Update Batching

Connection conn = ds.getConnection();
conn.setAutoCommit(false);

Statement s = conn.createStatement();

s.addBatch( “insert into dept values‘ ( 26’,‘HR’,‘Mongolia’)”);
s.executeBatch();

conn.commit();
s.close();

② Oracle Update Batching

Connection conn = ds.getConnection();
conn.setAutoCommit(false);

PreparedStatement ps =
conn.prepareStatement(“ insert into dept values (?, ?, ?)”);

((OraclePreparedStatement)ps).setExecuteBatch (3);

ps.executeUpdate();
((OraclePreparedStatement)ps).sendBatch();

conn.commit();
ps.close();

 

4. Standard Fetch Size and Oracle Row Prefetching

① Standard Fetch Size

Statement stmt = conn.createStatement();
stmt.setFetchSize(100);

② Oracle Row Prefetching

((OracleConnection)conn).setDefaultRowPrefetch(7);
((OracleStatement)stmt).setRowPrefetch (2);

 

 

<출처>
2007 Spring Oracle Korea Magazine

Oracle JDBC를 이용한 성능향상 방법
저자_김정식 Oracle ACE(oramaster@empal.com)

2009년 12월 2일 수요일

[FW] 전자정부 표준Framework

행정안전부에서 2009년 6월 24일(수)에

전자정부 표준프레임워크 공개 및 활성화 계획 발표” 를 했다.

오픈소스에 기반한 표준프레임워크 발표는 긍정적인 부분이다.

 

전자정부 표준프레임워크 사이트는 http://www.egovframe.go.kr 이며,

전자정부 표준프레임워크에 포함된 오픈소스 리스트는 아래에서 확인할 수있다.

http://www.egovframe.go.kr/EgovEnvRun.jsp

 

아키텍처 구성에 대한 내용은 꼭 한번 읽어볼 필요가 있어보인다.

앞으로도 지속적으로 유지보수되고 더욱더 개선되어지길 기대한다.

 

무료교육을 통한 전파도 시도되고 있다. 기회가되면 참여하고 싶다.

 

<추신>

공공기관에 있어 표준프레임워크에 대한 시도는 분명 좋은시도이며 많은 잇점이 있을것으로 보인다.

하지만 표준이라는 이름으로 다양성이 무시되고 쏠림현항이 심화되는 부작용은 없었으면 한다.