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
아키텍처 구성에 대한 내용은 꼭 한번 읽어볼 필요가 있어보인다.
앞으로도 지속적으로 유지보수되고 더욱더 개선되어지길 기대한다.
무료교육을 통한 전파도 시도되고 있다. 기회가되면 참여하고 싶다.
<추신>
공공기관에 있어 표준프레임워크에 대한 시도는 분명 좋은시도이며 많은 잇점이 있을것으로 보인다.
하지만 표준이라는 이름으로 다양성이 무시되고 쏠림현항이 심화되는 부작용은 없었으면 한다.
2009년 10월 26일 월요일
[Timeout]UserTransaction과 SQL Timeout관계
javax.transaction.UserTransaction(ut)을 사용하는 Global Transaction의 기본적인 구조는 아래와 같다.
-----------------------
시간 소스
0초 ut.begin();
1초 select(); -> SQL Timeout
2초 insert() -> SQL Timeout
3초 update(); -> SQL Timeout
4초 delete(); -> SQL Timeout
5초 ut.commit(); -> Transaction Timeout
-----------------------
* Transaction Timeout : begin() ↔ commit() 사이의 최대시간
* SQL Timeout : 각각 SQL 단위 수행 최대시간
이와 같이 UserTransaction을 사용하는 Global Transaction에서 고려해야 할 기본적인 Timeout은
Transaction Timeout과 SQL Timeout 이다.
즉, 위의 예제를 보면,
총 Transaction 수행 시간은 5초이므로, Transaction Timeout 은 5초 보다 커야 하고,
SQL 수행시간은 1초이므로, SQL Timeout은 1초보다 커야한다.
<Timeout 설정값 비교>
구분 |
UserTransaction |
JEUS 5.0 |
Transaction Timeout |
setTransactionTimeout |
<active-timeout> |
SQL Timeout |
- |
<stmt-query-timeout> |
[Timeout]javax.transaction.UserTransaction
setTransactionTimeout
void setTransactionTimeout(int seconds) throws SystemException
- Modify the timeout value that is associated with transactions started by the current thread with the begin method.
If an application has not called this method, the transaction service uses some default value for the transaction timeout.
- Parameters:
seconds
- The value of the timeout in seconds. If the value is zero, the transaction service restores the default value. If the value is negative a SystemException is thrown.- Throws:
SystemException
- Thrown if the transaction manager encounters an unexpected error condition
2009년 10월 25일 일요일
[Timeout]JEUS 5.0 Timeout 설정값
JEUS 트랜잭션 매니저는 예외 상황 처리를 위해서 다양한 타임 아웃 메커니즘을 사용한다. 타임 아웃 메커니즘의 값을 조정해서 어플리케이션 시스템에 가장 적합하도록 트랜잭션 매니저를 튜닝 할 수 있다.
- Resolution: 타임 아웃 메커니즘의 기본 시간 간격. 이 값을 작게 설정하면 타임 아웃이 세밀하게 작동한다. 값이 너무 크면 타임 아웃이 너무 느슨하게 작동한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.tmResolution=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <resolution> 태그에 값을 설정한다.
- Active Timeout: Global Transaction이 시작되면 이 시간 안에 commit이 실행되어야 한다. 그렇지 않으면 트랜잭션 매니저가 rollback 시켜버린다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.activeto=<time in milliseconds>추가한다. Web Container나 EJB Container에 설정하려면 <active-timeout> 태그에 값을 설정한다.
- Prepare Timeout: Root Coordinator는 이 시간 내에 Sub Coordinator와 리소스매니저로부터 ‘prepare’ 신호를 받아야한다. 만약 받지를 못하면Root Coordinator는 Global Transaction을 rollback 시킨다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.prepareto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <prepare-timeout> 태그에 값을 설정한다.
- Prepared Timeout: Sub Coordinator는 자신의Root Coordinator로부터 이 시간 안에commit을 해야 할지, rollback을 해야 할지를 나타내는 global decision을 받아야 한다. 만약 이 시간 내에 받질 못하면, Root Coordinator 로 다시 ‘prepare’에 대한 응답 메시지를 보낸다. 그래도 여전히시간 내에 global decision이 오지 않는다면, <heuristic-rollback>의 값이 true일 때 Global Transaction을 rollback 시켜버린다. <heuristic-rollback>이 false이면, Root Coordinator로 메시지를 보내고global decision을 기다리기를 계속 한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.preparedto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <prepared-timeout> 태그에 값을 설정한다.
- Commit Timeout: Root Coordinator는 이 시간 내에 Sub Coordinator와 리소스매니저로부터 ‘commit’이나 ‘rollback’ 에 대한 결과를받아야 한다. 만약 결과가오지 않으면, Root Coordinator는 Global Transaction을 ‘Uncompleted List’에 기록해서, 트랜잭션이 완전히끝나지 않았음을 남겨둔다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.committo =<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <commit-timeout> 태그에 값을 설정한다.
- Recovery Timeout: 이 값은 트랜잭션 복구 시에 사용된다. 트랜잭션 매니저는 트랜잭션 복구를 위해서 복구될 트랜잭션 정보를 가져오려고 한다. 만약 다른 트랜잭션 매니저에서 이 시간 내에 복구 정보를 알려주지 않으면, <heuristic-rollback>이 true 일 때, 해당 트랜잭션을 rollback 시킨다. 값이 false이면 트랜잭션 복구를 시스템 관리자에게 남겨두고 더 이상 진행하지 않는다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.recoveryto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <recovery-timeout> 태그에 값을 설정한다.
- Uncompleted Timeout: 트랜잭션 매니저는 전체 트랜잭션 처리를 완료하기 위해, 실패한 Global Transaction의 목록을 보관한다. 완료되지 못한 Global Transaction의 정보는 복구 처리시에 사용되므로, 이 타임 아웃 시간까지 보관된다. 그러므로 이 시간이 너무 짧으면 복구 정보가 빨리 지워지게 되고, 트랜잭션 매니저가 해당 Global Transaction의 무결성을 복구할 수 없게 된다. 그 결과 Global Transaction 복구를 위해서, 시스템 관리자가 많은 작업을 직접 처리해야만 한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.uncompletedto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <uncompleted-timeout> 태그에값을 설정한다.
<출처> technet.tmax.co.kr - 매뉴얼
2009년 10월 4일 일요일
[IBM,SUN,HP]GC, Heapdump, Thread dump 분석툴 비교
Garbage Collection, Heapdump, Thread dump(javacore) 분석 시
IBM, SUN, HP 환경에서 각각 사용가능한 분석툴들을 정리하면 아래와 같다
※ 이보다 더 많은 툴이 있을 수 있으나 개인적으로 사용해 본 툴 위주로 정리하였다.
2009년 9월 29일 화요일
[JVM Options] IBM
IBM JVM의 버전별 Options을 정리하면 아래와 같다.
참고로 아래는 Garbage Collector command-line options 링크이며,
기본 페이지는 "Java Diagnostics Gude" 이다.
[JVM 버전]
2009년 9월 26일 토요일
[JVM Options] SUN
All the JVM options for various versions of the JVM
on primarily SPARC/Solaris Platform(1.3.1~1.6(6.0))
참고로, 아래는 1.4.2 / 5.0 / 6.0에 대한
Standard, Non-Standard and Hidden Options 에 대한 설명이다
[Standard / Non-Standard Options]
[Hidden Options]
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
2009년 9월 21일 월요일
[JDK] IBM JDK 다운로드
현재 서버 개발환경은 IBM JDK를 사용하고 있다.
따라서, Eclipse로 개발하기 위해 IBM JDK download를 찾던중,
javaservice.net에 제니퍼소프트의 이원영 사장님의 친절한 글을 발견하게 되었다.
http://www.javaservice.net/~java/bbs/read.cgi?m=etc&b=jdk&c=r_p&n=1171283145&p=6&s=t
정리하면 아래와 같다.
1. IBM JDK는 SUN JDK와 달리 별도의 윈도우용 JDK 설치파일(.exe)를 제공하지는 않는다.
2. 아래 주소에 있는 Eclipse zip파일을 다운받으면 파일 안에 버전별 JDK가 포함되어 있다.
http://www.ibm.com/developerworks/java/jdk/eclipse/index.html
→ "IBM Development Package for Eclipse" 클릭 → 로그인 → 아래 중 하나 선택
1) JDK 1.4 포함 : 없음
2) JDK 5.0 포함 : IBM Development Package for Eclipse, 32-bit Windows Version 211 선택
→ IBM_DevelopmentPackage_for_Eclipse_Win32_2.1.1.zip 에 포함
6) JDK 6.0 포함 : IBM Development Package for Eclipse, 32-bit Windows Version 300 선택
→ IBM_DevelopmentPackage_for_Eclipse_Win32_3.0.0.zip 에 포함
2009년 9월 15일 화요일
[dW]Performance monitoring with AspectJ
처음 APM 툴을 보았을때, 그 원리가 참 궁금했다.
이후에, 대부분의 모니터링 툴이 AspectJ를 응용한 솔루션이라는 것을 알게 되었을때,
AspectJ의 멋진 AOP사상에 대해 신선한 충격을 받았던 기억이 난다.
역시, IT나 어느 분야를 막론하고 깨어있는 사람들에 의해서 발전함이 틀림없다.
아래 글은 IBM developerWorks에 실린 글이다.
(Part1 : 13 Sep 2005 / Part2 : 15 Nov 2005, Ron Bodkin(ron.bodkin@newaspects.com),
Founder, New Aspects of Software)
역시나 깔끔하게 정리 잘된 글이다.
AOP@Work: Performance monitoring with AspectJ, Part 1
A look inside the Glassbox Inspector with AspectJ and JMX
AOP@Work: Performance monitoring with AspectJ, Part 2
Putting the Glassbox Inspector to work with load-time weaving
AspectJ를 이용하여 간단한 성능 모니터링 툴을 만들어 사용해보자!
2009년 9월 13일 일요일
연봉 1억 개발자는 무엇을 하고 있을까?
ZDNet(2009.06.23일자, 송주영 기자)의 글을 읽고 신선한 충격을 받았던 기억이난다.
그 기사는 바로 아래 글이다.
조봉한 하나아이앤에스 사장의 "깨어있는" 생각이 무척이나 마음에 들었다.
그런데 문득 과연 연봉 1억이 아깝지 않은 개발자들은 선발되었을까? 라는 생각이 들었다.
선발되었다면, 그들은 어떤 R&R을 수행하고 있으며, 조직에서 어떠한 위치에 있고,
어떠한 방식으로 일하는지, 조직내의 갈등은 없는지 등등...
이러한 새로운 시도에 대한 진행사항이 궁금해진다.
우리나라 CIO의 대부분은 업종을 불문하고 대부분 비 IT출신의 관리자들이다.
또한 CIO라는 자리가 회사내에서 크게 입지나 위상이 높지 않으며,
심지어 임원들이 잠시 머물며 경험한번 해보는 자리 정도로 여겨지기도 한다.
아마, 조봉한 CIO도 IT회사에서 일해본 경험이 있기에, 이와같은 생각이 가능했으리라 본다.
머니투데이(2008.10.30일자, 박창욱 기자)의 조봉한 CIO의 인터뷰기사
이러한 깨어있는 CIO 및 CEO가 늘어나야 하며,
이러한 생각이 몇몇 특이한 임원의 생각이 아닌 당연한 상식이 되어야 한다.
하나아이앤에스 가 지금처럼 단순하디 단순한 비용절감 논리로의 IT자회사 분리 및 아웃소싱이 아닌,
새로운 IT자회사 및 Biz를 리드하는 IT의 새로운 롤 모델을 제시하기를 기대한다.
금융권 IT 아웃소싱에 대한 단상
전자신문의 CIOBIZ 컬럼의 글중 IT 아웃소싱과 관련된 글이 눈에 들어왔다.
소위 신의 직장이라는 금융회사들에서 IT 아웃소싱을 한다는 기사를 읽을때면
한편으론, "IT인력들은 더이상 신의 직장에 입성할 기회조차 점점 없어지는 구나..."
라는 생각이 들어 씁쓸해 지곤 한다.
대부분 아웃소싱을 하게 되는 순간,
특히 위와 같이 자회사로 분리되고 인력이동이 되는 순간,
기존 몸담았던 모회사와는 급여나 복지혜택이 차이나게 된다.(최소 몇년간은 동일할지 모르겠지만...)
그리고 SK증권 처럼 SI업체로 이동되는 경우에는
결국 SI인력이 되어 SK증권 SM을 담당한도록 파견나온 외주직원의 신분이 되는것이다.
또한 언제 다른회사 SI 프로젝트에 투입될지도 모르게 될 것이다.
현재 IT인력들의 수준을 보면, 점점 하향평준화 되고 있는 듯 싶다.
이는 너무나 열악한 IT업체의 근무 여건(특히, SI 프로젝트)과 보상의 미흡,
낮은 사회적 대우 및 인식 등의 문제로 인해 이공계 기피 현상과 맞물려
우수인력이 IT업계로 진출을 꺼려하고 있기 때문이라는 생각이 든다.
문과 출신들과 똑같이 공부하고, 아니 더 치열하게 공부했건만,
사회에서는 "갑"과 "을"의 잣대로 모든 신분(?)을 정해버리고, (그속에서 항상 "을"일수 밖에 없고)
M/M의 잣대로(소위 머릿수로만) IT의 생산성을 평가하고 전문성을 인정하지 않는
사회 전반적인 분위기 속에서 몇명이나 과연 IT에 인생을 걸고 투자하겠는가?
IT전문가에게는 소위 "사"자 분들(변호사, 의사 등) 보다 더 높은 수준의
사회적 대우나 보상이 당연시 되는 사회기반이 마련되어야 한다.
더이상 공부하지 않는 낮은 수준의 개발자와
깊고 넓계 보는 expert 수준의 아키텍트의 차이를 확실히 구별하여 평가하고
그에 상응하는 차별화된 보상과 인정을 해주는 업체와 회사가 많아진다면,
IT인력들에게도 확실한 동기부여가 되고, 그 수준도 상당히 높아질 것이다.
이렇게 된다면 현재와 반대로 비 IT인력들이 IT인력들에게 신도 가고싶은 직장이라는
부러움을 보내지 않을까?
<추신>
산업별 IT 아웃소싱 동향분석에 대한 CIOBiZ(2009.7.12일자 신혜권, 성현희 기자)기획 기사가
눈에 들어왔다. 회사별 아웃소싱 회사에 대한 정리가 인상적이다.
2009년 9월 6일 일요일
금융권 차세대시스템의 실패에 대한 단상
전자신문의 CIOBIZ컬럼을 읽다가 근래 진행되고 있는 금융권 차세대시스템 프로젝트 실패에 대한
공감가는 기사가 있어 소개한다.
사실 대규모의 차세대시스템 구축을 하면서 기한내에 오픈한 사이트는 전무하다 시피하다.
그나마 몇개월 지나서 간신히 오픈하고, 한 1년 정도 지나서 안정화가 되면 성공이라고 말하는 분위기다.
위의 기사에서도 좋은 지적을 했지만, 실제 차세대시스템을 구축하면서 개인적으로 성공과 실패를
가름하는 요소라고 느끼점은 아래와 같다.
첫째, CIO는 책임질줄 아는 카리스마가 있어야 하며,
실무자 레벨까지 다양한 소리를 듣고 올바른 의사결정을 내리는 능력이 가장 중요하다.
둘째, PM은 다양한 구축업체를 아우르고 고객을 비롯한 다양한 stakeholder간의 커뮤니케이션을 통해
조율하고 같은 비전을 공유하여 힘을 합쳐 시너지를 발휘할 수 있도록 리딩하는 능력이 중요하다.
셋째, 아키텍트가 중요하다.
특히, 아키텍트의 중요성을 절감하였다.
다양한 솔루션에 대한 이해를 통한 연계 및 Troubleshooting, Performance Tuning,
표준 및 가이드 작성, 개발자 교육 등 그야말로 컨트롤 타워가 바로 아키텍트였다.
얼마나 경험많고, 유능한 아키텍트를 중심으로 프로젝트를 진행하는냐가
결국 얼마나 많은 시행착오(소위 삽질)를 줄이고 프로젝트의 전체 리스크 또한 줄이느냐와 직결된다.
어떤 무식한 PM은 아키텍트는 초기에 몇달 가이드정도 작성하고 빠지면 되고,
그후 개발자들 잔뜩 투입해서 찍어내듯 개발하면 된다고 서슴없이 말하곤 한다.
이러한 무개념의 PM들이 결국 이런 대규모 프로젝트를 망치는 주연중에 하나다.
단언컨데, 초급 개발자 열댓명 투입하느니, 제대로된 아키텍트 한명이 더 훌륭한 아웃풋을 낸다
몇달전 정명훈 지휘로 서울시립교향악단의 공연을 본적이 있다.
중고등학교때 그토록 많이듣던 베토벤 교향곡이 이리도 감동적일 수 없었다.
이때, 문득 지휘자가 아키텍트랑 너무도 닮았다고 느낀것은 지나친 비약이었을까?
2009년 8월 30일 일요일
Java technology, IBM style: Garbage collection policies
Java technology, IBM style: Garbage collection policies, Part 1
Differing policies provide flexibility
Java technology, IBM style: Garbage collection policies, Part 2
Use verbose GC and application metrics to optimize garbage collection
IBM JVM에서 GC Tuning을 하면서 읽었던 글들중에 가장 마음에 드는 글이다
(출처 : IBM developerWorks, Mattias Persson(Staff Software Engineer, IBM, Software Group)외)
part 2에서 subpool에 대한 설명을 논외로 한 것이 아쉽지만,
간결하고 명료하게 GC Policy를 정리 비교하였다.
<추신>
이런 좋은 글을 읽고나면 좋은 글을 쓴 저자에게 감사의 마음이 절로 생긴다.
답답한 관료주의적 환경에서 일하는 많은 한국 IT인들(나를 포함한)을 생각하면
이러한 연구를 계속할 수 있게 배려해주는 회사 분위기가 새삼 부러워 진다.
[IBM dW]3년을 기다렸다
3년을 기다렸다
이창신 iasandcb@gmail.com, http://iasandcb.pe.kr 씨가 한국 IBM developerWorks에 기고한
자바 EE 6 스펙에 대한 글이다.
"이창신" 이라는 이름이 눈에 띄여 읽었는데 역시, 기대를 져버리지 않는 좋은 글이다.
급속도로 발전하는 기술 사이클에 비해 Java의 발전은 더딘듯 싶다.
과도기 였던 5 버전을 넘어 진보의 발판이 되는 6 버전의 활약이 기대된다.
(추신)
올해 JCO에서 이창신씨를 봤을때도, 범상치 않은 Force가 느껴졌었는데, 역시 큰 결심을 한거 같다.
그가 애플 '앱스토어', 구글 '안드로이드마켓' 으로 대표되는 앱스토어 시장에 홀로서기를 시작했다.
그의 결정과 도전에 경의를 표하며, 수년안에 그의 성공스토리를 읽기를 기대한다.
[지디넷코리아] 이창신씨의 아이폰 인디SW 개발자 선언, 그 뒷이야기
[IBM dW]당신은 몇 년 차?
당신은 몇 년 차?
김창준 juneaftn@hanmail.net 씨가 한국 IBM developerWorks에 기고한
경력관리와 인재선발과 관련된 좋은 글이다.
SI나 기타 프로젝트 시 인권비 산정을 위해
개발자에게 붙여지는 년차(일명 짠밥(?))를 기준으로 하는 기술등급이
그 사람의 능력과 얼마나 상관도가 떨어지는지, 또한 이런 식의 년차에 근거한 급여산정이
얼마나 공정치 못한 보상이라는 것은 개발자라면 다들 경험을 통해 이미
뼈져리게 느끼고 있을 터이다.
무능한 관리자들이 득실대는 현재의 주위 환경을 보면
오히려 경력과 능력은 어느 시점 부터는 반비례하는 것이 아닌가 하는 생각도 지울 수 없다.
(내가 이해가지 않는 저 관리자도 입사 초기에는 기본(?)은 하지 않았을까?)
이러한 경험을 학문적으로 잘 접근하고 논리적으로 증명한 글이다.
이와 같은 허왕된 년차를 통한 M/M 산정을 대체할 만한 평가지표는 무엇일까?
깊은 생각과 반성을 함께 던지는 순간이다.