2009년 12월 26일 토요일
2009년 12월 25일 금요일
[JDBC]일반 JDBC와 Oracle JDBC 성능비교(Java 배치) #2

2009년 12월 23일 수요일
[사진] Apple Team
2009년 12월 17일 목요일
[IBM dW] 자바 EE 6에서 의존성 주입
이창신씨가 IBM developerWorks에 연재한 글이다.
[FW] Application Framework in J2EE
- Presentation Tier : Struts
- Business Tier : Spring
- Persistence Tier : iBatis

2009년 12월 16일 수요일
[dW]7 Roles of Architect
2009년 12월 15일 화요일
[JDBC]일반 JDBC와 Oracle JDBC 성능비교(Java 배치) #1
만약, 한 아키텍트가 JAVA로 배치 아키텍처를 제안한다면,
그 아키텍트는 대용량처리 시 응답속도에 대한 것을 포기하는 것이냐는 핀잔을 들을지도 모른다.
(아마, JAVA가 느린것도 모르냐며 무능한 아키텍트로 낙인찍힐 수도 있다.)
하지만, Oracle JDBC 를 이용할 경우
이야기는 달라질수 있을 듯하다.
JAVA기반의 배치프레임워크를 지원하는 상용제품(CASE1)과
동일한 로직을 Oracle JDBC(CASE2)로 구현하여 총 소요시간(응답시간)을 비교하여 보면 아래와 같다.
※ 상용제품은 표준(일반) JDBC로 구현
<시나리오>
□ 100 건 select 후 insert
※ 모든 SQL(select, insert SQL)문은 동일
※ commit 단위 : 100건
□ 위 작업을 1/10/100/1,000회 반복 수행 후 총 소요시간(응답시간) 비교
<테스트 서버환경>
□ OS : IBM AIX 5.3(64 bit)
□ CPU / RAM : 12 / 3 GB
□ Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit
□ JVM : build 1.4.2, J2RE 1.4.2 IBM AIX 5L for PowerPC (64 bit JVM)
<설정비교>
※ JDBC 각 처리단계(Parse, Execute, Fetch)별 관련 클래스 및 메소드 비교표임
※ CASE2(Oracle JDBC)의 설정값은 테스트 및 관려자료를 참고하여 결정한 수치임.
<총 소요시간(응답시간)비교>

위와 같이 일반 JDBC와 Oracle JDBC를 이용할 경우 98% 이상의 Dramatic한 성능개선을 보였다.
물론, 이는 지극히 단순화된 조건하의 극단적인 비교치일 수 있다.
즉, 일반 JDBC를 이용하더라도 addBatch등을 통해 Execute 등의 속도를 높일 수는 있으니 말이다.
하지만 확실한 것은,
Parse, Execute, Fetch 작업이 반복될수록 Oracle JDBC의 성능개선 효과가 더 커진다는 것이다.
JAVA 기반에 Oracle Database만 사용하는 환경에서 대용량 배치프로그램의 속도가 고민이라면,
Oracle JDBC를 이용한 속도향상에 대해 심각히 고려해 볼 필요가 있어 보인다.
<추신>
1) 테스트 소스나 DB 스크립트를 개시하지 못하는점 양해바람.
- 소스는 상용프레임워크 소스가 그대로 보이고,
- DB스크립트는 실제 사용테이블 명이 나타나 보안상 문제가 될수 있어 생략함.
2) 위의 비교는 상용프레임워크의 문제점에 대한 논의가 아니라,
일반 JDBC와 Oracle JDBC 비교를 위해 편의상 현재 사용중인 상용프레임워크를 사용하였을 뿐임.
3) 각자 개발이나 운영중인 환경이 있다면
현재 사용하고 있는 JDBC방식을 Oracle JDBC 방식으로 변경하여 비교해 볼 것을 강력히 권장함
※ “Pro*C와 Java와의 Batch BMT(성능비교) “라는 흥미로운 글이 있어 소개한다.
JDBC의 addBatch를 이용해도 Pro*C보다도 빠를 수 있다는 내용이다.
(아마 Oracle JDBC의 setExecuteBatch를 이용하였다면 더욱 높은 속도개선이 가능했을 듯 하다.)
2009년 12월 10일 목요일
[기사] 아이폰 구입하면 '매국노', 국산폰 사면 '애국자'?
2009년 12월 9일 수요일
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 기능
2009년 12월 5일 토요일
[Books]컨설팅의 비밀
[기사] 아이폰의 성공 비밀
오마이뉴스 2009.12.05 김인성 기자 휴대폰 업체 구세주', 아이폰 성공 비밀 |
소비자 열광시킨 '편의성'...아이디어 중심으로 '선택과 집중' 애플의성공 비결을 논리적인 어조로 잘 써내려간 기사 결국 애플의 성공비결은 창의성! 과연 우리나라에 애플이 있었으면 성공할 수 있었을까? 아마 잡스형님도 꽉꽉막힌 군대식 문화와 어설픈 권위주위때문에 결코 쉽지 않았을 것이다. 이나라 대한민국에서도 애플과 같은 회사가 없는데 아이폰과 같은 제품이 나오기를 바라는건 닭이 없는데 달걀을 기대하는 것만큼이나 어리석은 일일지도 모른다. 이이폰의 놀라운 기능들을 눈으로 직접보면서 말로만 IT선진국이라고 떠들어 대며 IT에 아무런 비전이 없는 위정자들과 강이며 땅이며 삽질할 생각에만 가득한 현정부를 보면 대한민국의 IT는 밝지만은 않아 보인다. |
[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
아키텍처 구성에 대한 내용은 꼭 한번 읽어볼 필요가 있어보인다.
앞으로도 지속적으로 유지보수되고 더욱더 개선되어지길 기대한다.
무료교육을 통한 전파도 시도되고 있다. 기회가되면 참여하고 싶다.
<추신>
공공기관에 있어 표준프레임워크에 대한 시도는 분명 좋은시도이며 많은 잇점이 있을것으로 보인다.
하지만 표준이라는 이름으로 다양성이 무시되고 쏠림현항이 심화되는 부작용은 없었으면 한다.