전체 글 1296

Tomcat 6.0과 Apache 2.X 연동

server.xml에 AJP 프로토콜 설정하는 부분의 샘플이 빠져 있어서 삽질을 좀 했네. 아래와 같이 server.xml에서 AJP Port를 열어줘야함. Apache에서는 mod_jk 설치한후 LoadModule jk_module modules/mod_jk.so JkWorkersFile /usr/local/apache2/conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info # First Virtual Host. # DocumentRoot "/usr/local/confluence-2.10.3-std/conf" ServerName wiki.javastudy.co.kr JkMount /* confluence workers.propertis에 ..

G1GC Collector

Garbage First Collector 이하 G1 Collector는 예전에 잠깐 소개한적이 있는데, 오늘 지금 하는 프로젝트에서 메모리 관련 이슈가 있어서 잠깐 살펴보았는데, 대략 적인 원리는 다음과 같다. CMS (Concurrent Mark & Sweep)의 원리는 기존에, New 영역을 Old영역으로 보낸후에, Old 영역의 Object Tree를 Search해서 Dead Object를 Mark하고, Mark 된 Object들을 deallocate하는 방식이었다. 이 작업을 Concurrent Thread가 연속적으로 한다는 것인데, (Full GC 시간에 몰아서 하는 것이 아니라. ) G1 Collector는 메모리 구조 부터가 틀리다. New/Old 영역을 Physical하게 따로 나누지 ..

먹보 오라클이 썬을 인수한답니다.

얼마전에 IBM이 Sun 인수를 시도했다가 무산되었는데. 지금 온라인을 보니까는 Oracle이 Sun을 인수한다는 군요. 이제 오라클은 BEA를 인수함으로써 데이타 베이스 + 미들웨어 시장에 이어서 Sun 인수로 인해서 자바 기술의 종가 + 하드웨어 까지 갖추게 되었습니다. 이제 IT 시장은 IBM과 Oracle이 2강 구도가 되겠군요. 그나저나 엔터프라이즈 시장에서는 옮길 회사가 또 없어졌습니다. 아래는 Sun 인수에 대한 뉴스 링크입니다. http://www.bloomberg.com/apps/news?pid=20601082&sid=awfGnLxcC8bk

사는 이야기 2009.04.20

다음달에 REST 발표 합니다.

오라클 마케팅에서 다음달에 진행하는 개발자 행사에서 오픈 소스 관련해서 발표를 해달라는 요청을 받아서 REST에 대해서 발표하려고 합니다. 지난번 프로젝트에 진행한 REST 기반의 아키텍쳐에 대해서 설명하고 REST의 장단점, 구현 방법에 대해서 이야기 하고, 한국에서 잘못 알려진 REST에 대한 정의에 대해서 이야기 해보려고 합니다. 프로젝트 진행후 그동안 다른 프로젝트에 치여서 발표나 기고할 시간이 없었는데, 이 핑계로라도 정리를 해봐야 겠습니다. 그나저나 메니져가 발표할날 시간을 빼줄지 모르겠네요...

사는 이야기 2009.04.20

새로운 GC Collector G1.

재미있는 소식이 있어서 포스팅합니다. JDK 1.6 update 14에 G1이라는 형식의 Garbage collector가 추가됩니다. 기존에 CMS (Concurrent mark and sweep)과 는 다르게, Compaction을 사용하며, 특히 주목할만한 것은 Large Memory에서 latency time을 극소화 했다는 것입니다. 쉽게 풀어서 설명하자면, 이제 GC 시간 때문에 대용량 Heap을 사용하지 못하는 일이 없어진다는 것입니다. 애플리케이션이 메모리에서 많이 자유로워 지는 것이지요... 물론 뚜껑을 열어봐야 알겠지만, CMS옵션도 1.4에 release되어 1.5에는 꽤나 쓸만한 모습을 갖춘만큼. G1 Collector도 앞으로 많은 기대가 됩니다. 참고 http://www.info..

XML 변환 성능

SOA 프로젝트를 진행하면서 가장 골치거리 중의 하나가 XML 변환에 소요되는 CPU와 응답시간이다. 통상 SOA나 요즘의 많은 Remote call들이 XML을 기반으로 하다보니, 특히나 XML 메세지 변환에 대한 요건이 많다. 자료들을 찾아보니 몇가지 흥미로운 자료들이 있는데, XSLT가 전체적으로 변환에는 가장 많이 사용되는 듯 (OSB의 경우 XQuery가 편해서 XQuery를 많이 사용하긴 하지만.)한데 그중 흥미로운것인 XSLT를 compile time에 translet이라는 것으로 변환해서 사용할 수 있는 프레임웍 http://xml.apache.org/xalan-j/xsltc_usage.html 그리고 재미있는 것중의 하나가 Intel에서 만든 XML 변환 가속기인데, Native 코드로 ..

Soap Handler

SOA 아키텍쳐중에 요건중의 하나가 웹서비스로 들어오고 나가는 데이타에 대한 Transformation과 Filtering이 문제인데, 일반적으로 ESB에서 이를 구현하고 결과적으로 과도한 XQuery로 성능저하로 아주 많은 문제를 일으키는 경우가 있는데, 이에 대한 대응 아키텍쳐로 SoapHandler를 사용해 보는 방법을 고려해볼 수 있다. WebService는 일반적인 형태로 개발하고, Filtering이 필요할 경우 앞에 Filter의 기능에 따라서 SoapHandler를 붙이고 다른 endpoint를 부여 하는 방식을 사용할 수 있다. 자세한 내용은 여기에.. http://www.javaworld.com/javaworld/jw-02-2007/jw-02-handler.html?page=3 조만간 ..

Trac

이번 프로젝트에 6번째로 ALM을 사용해보기로 결정하였습니다. SVN,WIKI,Issue Tracking이 모두 필요하고 설치할 시간도 없어서 Trac (Trac On Windows - 압축만 풀면 사용 가능하게 한 패키징)을 설치하여 사용하고 있습니다. 올인원 패키지이고 플러그인을 지원해서 좋긴하지만 JIRA의 파워풀한 기능을 경험한 저로써는 불편한점이 많더군요. (예를 들어서 조회 조건 같은 것을 Query로 직접 코딩해야 하는 불편함등.) 이번 프로젝트도 상당히 긴 프로젝트가 될것 같습니다. Trac 기반의 ALM을 시험해볼 좋은 기회가 되겠지요. Trac에 설치한것은 다음과 같습니다. - TOW (Trac On Windows) - Timingandestimation plug in - ScrumBu..

ALM 2009.04.09

PT 자료를 왕창 업로드 했습니다.

예전 발표 자료가 필요해서 찾다 보니까는 생각보다 잊혀져 버리고 구석에 쳐박혀 있는 자료들이 많더군요. 오늘 대충 정리해서 Slideshare에 올렸습니다. http://www.slideshare.net/Byungwook 2003년에 만든 자료는 6년이 지난 지금 보니까는 참 어설프구나 하는 자료도 있고, 그때에 비해서 내 분야가 이렇게 바뀌었구나 하는 생각도 들고 잠깐이나마 예전을 돌아볼 수 있는 시간이 되었습니다. 자유롭게들 사용하시고 질문이나 토론은 언제나 환영 합니다.

사는 이야기 2009.04.09

Java File Writing 성능 비교

JAPM을 업그레이드 할까 싶어서 Log Writing 부분을 개선하고자 해서 File Writing을 어떻게 하는 것이 제일 빠를까 테스트를 해봤다. 크게 아래 케이스인데. 1. FileWriter fw = new FileWriter(LOG_HOME+"writer.log"); 2. BufferedWriter bw = new BufferedWriter(new FileWriter(LOG_HOME+"writer.log")); 3. FileOutputStream fos = new FileOutputStream(LOG_HOME+"outputstream.log"); 4. BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(LOG_HOM..

호주 IT 상황

한국 IT에서 희망이 없다고 생각해서, 오래전 부터 호주에서 일자리를 구하는 것을 알아 보고 있습니다. 쉽지는 않은일입니다만, 여러 방면으로 알아보고 있는데, 오늘 호주 친구가 흥미있는 링크를 보내줬습니다. http://www.australianit.news.com.au/story/0,24897,25265857-15306,00.html 전체적으로 457 취업비자로 취업을 하기에는 힘든 상황 같습니다. 비자 문제뿐만 아니라 경기 침체로 호주에 IT 관련 일자리가 많이 줄어든것 같습니다. 호주 Oracle에 있는 친구 말로는 그래도 SOA쪽은 일자리가 좀 있다고 하네요. 매일 야근에... 박봉에서 벗어나서.. 일한만큼 받고... 가족과 함께 많은 시간을 같이 하고 싶습니다.

사는 이야기 2009.03.31

Aspect J를 이용한 초간단 APM 만들기 (2)

JMX를 이용하여 Thread 별 CPU 시간을 측정하는 방법 == ThreadMXBean mbThread = (ThreadMXBean) ManagementFactory.getThreadMXBean(); long[] ids = mbThread.getAllThreadIds(); for (long id: ids) { System.out.println(mbThread.getThreadInfo(id).getThreadName()); System.out.println(" CPU Time(" + id+ ")" + mbThread.getThreadCpuTime(id)); System.out.println(" User Time(" + id+ ")" + mbThread.getThreadCpuTime(id)); } == ..

Aspect J를 이용한 간이 APM 만들기.

AOP를 이용하면 특정 클래스의 메서드 실행 전후에 Code를 삽입할 수 있다. 사용자 애플리케이션의 비지니스 메서드에 Code를 삽입하여 1. 시작 시간, 종료시간을 측정하면 비지니스 메서드의 응답 시간을 측정할 수 있고 2. JMX를 이용하여 CPU 사용시간을 측정하면 비지니스 메서드의 CPU 사용률을 측정할 수 있다. 3. Thread Local 변수를 이용하면, Transaction이 시작될때부터 끝날때 까지를 측정할 수 있다. (예를 들어 JSP는 JSPServlet : service 메서드에서부터 시작되기 때문에, AOP에서 before advice에 transaction id를 set하게 하고, after advice에서 Trace내용을 flush하게 하면 된다. 그 중간에는 Thread L..

혹시 그런날 있으세요?

혹시 그런날 있으세요? 아침에 출근하려 했더니, 우리딸이 오랜만에 깨서 기어나오더군요.. 나쁜 아빠 맨날 늦게 들어가고 딸 깨기 전에 출근하고. 그래서 얼굴을 거의 못봤는데. 퉁퉁 부은 얼굴에 부시시한 얼굴로 여기저기 기어 다니는데 어찌나 귀엽던지.. 오늘 같은 날은 출근 안하고, 우리딸과 하루종일 있고 싶더군요. 사무실에 앉아 있는 지금도 계속 나오기전에 저를 바라보던 딸 얼굴이 눈에 선합니다.

사는 이야기 2009.03.20

ALM Overview PPT

그간 정리해왔던 ALM에 대해서 전체 그림을 다시 한번 정리하였습니다. 컨버팅 과정에서 폰트가 깨져서 좀 보기가 어려울 수 있습니다. 별도로 자료가 필요하신분들은 요청하시면 보내드리도록 하겠습니다. ALM의 전체 Full Process와 어떤 제품으로 어떻게 구혀하는지, 그리고 구현 전략에 대해서 기술되어 있습니다. 감사합니다. ALM (Application Lifecycle Management) View more presentations from Byungwook.

ALM 2009.03.16

SOA 시스템 설계에서 가장 큰 실수

SOA 시스템에 대한 컨설팅 (설계나 Code Inspection)을 다니다 보면, Goverance나 프로젝트 관리상에서도 문제가 많이 나타나지만, 설계상에서 근본적인 문제로 나타나는 패턴들이 있다. SOA의 근본적인 정의를 다시 내려보면, "비지니스적인 의미를 가지는 컴포넌트를 기업내의 통합된 프로토콜로 서비스하여 제공한다." 이다. BPM을 이용한 Composition이나 ESB를 이용한 유연성의 증대도 SOA 에서 큰 의미를 차지하지만, 일단 시작은 SOA를 통해서 제공되는 컴포넌트의 형태이다. 즉 기본이 되는 SOA 서비스와 그 인터페이스에 대한 정의와 구현이 제대로 되어야 하는데 통상적으로 SOA 시스템을 설계하고 구현하는데 있어서 발견되는 실수는 다음과 같다. 1. 표준 전문의 미사용 서비스..

아키텍쳐 /SOA 2009.03.16

코드리뷰 2.- 언제 어떤 리뷰 기법을 사용할것인가?

언제 어떤 코드 리뷰 기법을 사용해야 하는가? 그러면 이런 많은 코드 리뷰 기법 중에서 어떤 기법을 사용해야할까? 코드 인스펙션 코드 인스펙션의 전제는 전문성을 가지고 있는 인스펙션 팀이 일정한 프로세스와 패턴에 따라서 개선안을 찾는 작업이다. 즉, 고도로 훈련됨 팀과 기간이 필요하고, 어느정도 개발이 완료되어 있는 인스펙션 대상(시스템)이 있는 것을 전제로 한다. 인스펙션의 시기는 시스템이 개발되어 있는 시점인 Release이 유용하다. 필자는 두번의 Inspection을 권장하는데, 개발 초기에 비기능적인 구현을 끝낸 경우 1차 Inspection을 그리고, 개발이 끝난 후 시스템 테스트 (성능,확장성,안정성등)가 그것이다. 1차 Release는 주로 비기능적이고 Risk가 높은 부분을 구현하는 단계..

ALM/Task Management 2009.03.12

코드 리뷰 - 1. 코드 리뷰 기법들에 대한 소개

들어가기에 앞서서. 소프트웨어의 품질을 보장하기 위한 활동은 테스팅, 일일 빌드, 프레임웍의 사용, 개발 패턴들 수 없이 많은 방법들이 있다. 그중에서 개인적으로 생각하건데, 코드리뷰 만큼 적은 투자로 큰 효과를 얻을 수 있는 기법은 없는 것 같다. 이 문서에서는 코드리뷰에 대한 몇가지 기법에 대한 정리와 함께 적용 방법에 대해서 간단하게 소개해보고자 한다. 코드 리뷰의 시초는 Fagan에 의해서 소개된 코드 인스펙션에서 기인한다. 소프트웨어의 개발이 끝난후에, 전문 인스펙션팀이 정해진 프로세스와 패턴에 따라서 코드를 검증하고 Defect를 찾는 프로스를 코드 인스펙션이라고 한다. 코드 리뷰란, “코드를 실행하지 않고 사람이 검토하는 과정을 통하여 코드상에 숨어있는 잠재적인 결함(Defect)를 찾아내고..

ALM/Task Management 2009.03.11