'자바'에 해당되는 글 147건

  1. 2009.05.29 [자바 성능을 결정짓는 코딩 습관과 튜닝 이야기] Collection 에 관하여 1
  2. 2009.05.25 [GC] Java GC Tuning 방법 (자바 메모리 튜닝)
  3. 2009.05.22 [Heap Dump] 자바 힙 덤프(java heap dump) 분석기 - Eclipse Memory Analyzer
  4. 2009.05.19 [Glassfish] Glassfish 설치하기 - 4. Admin 콘솔 실행하기
  5. 2009.05.10 [Google Application Engine] Google App Engine 시작하기
  6. 2009.05.07 [iBATIS] iBATIS의 성능 문제
  7. 2009.04.30 [Java Visual VM] JDK에 포함된 무료 프로파일링 툴
  8. 2009.04.20 [Blog2Book Test] 현재까지 57%정도의 진척률 2
  9. 2009.04.17 [Glassfish] 요청한 URL이 없는 경우 디렉토리 목록(Directory listring) 안보이게 하기
  10. 2009.04.10 [Java Performance Tips] 자바 성능 팁
  11. 2009.04.08 Sun 4월 오픈 기술 세미나
  12. 2009.03.11 [정규 표현식 분석기] 웹 기반의 정규 표현식 분석기 1
  13. 2009.03.09 [자바 스택정보 보기] jstack을 이용해서 스택정보(쓰레드 덤프, Thread dump) 확인
  14. 2009.03.06 한빛 미디어 도서를 이용한 Java Roadmap
  15. 2009.03.04 [이벤트안내] 한빛 미디어에서 자바 로드맵 만들기 이벤트를 하네요.
  16. 2009.03.02 [자바 모니터링] 자바 모니터링 툴 직접 만들기
  17. 2009.02.27 [Apache와 Tomcat 연동] 한대의 apache(아파치)와 두대의 tomcat(톰켓, 탐킷)을 연동할 때...
  18. 2009.02.25 [Garbage First] G1 콜렉터란 ??? 1
  19. 2009.02.19 [NetBeans 성능 튜닝 관련 링크 모음] 넷빈즈 사이트에서 제공하는 성능 관련 링크들
  20. 2009.02.19 [자바 메모리 옵션 튜닝] Sun 에서 제공하는 자바 메모리 옵션 튜닝
  21. 2009.02.17 [프로그래밍 언어의 역사] 프로그래밍 언어의 역사를 한눈에 볼 수 있는 문서 1
  22. 2009.02.11 [Java Runtime] Java Runtime.exec() 메소드가 잘 안돌아 갈 때 (CreateProcess error=2 발생)
  23. 2009.02.10 [JIRA] 지라 성능 튜닝
  24. 2009.02.07 [자바 기본 강좌] 자바라는 단어만 들어도 스트레스를 받는 분들을 위한 초보 강좌-05 public, protected, private
  25. 2009.02.06 [자바 기본 강좌] 자바라는 단어만 들어도 스트레스를 받는 분들을 위한 초보 강좌-04 equals와 == 의 차이점
  26. 2009.02.06 [리눅스] 자바 개발용 환경 세팅
  27. 2009.02.03 [자바 커뮤니티] 삼성 SDS에서 이번달에 세미나가 있습니다.
  28. 2009.02.02 [GWT와 연계 가능한 그래프] AJAX 기반의 GWT에서 사용할수 있는 그래프
  29. 2009.01.28 [성능 튜닝 가이드] 기본적인 자바 성능 튜닝 가이드
  30. 2009.01.28 [자바 기본 강좌] 자바라는 단어만 들어도 스트레스를 받는 분들을 위한 초보 강좌-03 자바 개발 툴
먼저 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기를 구매하고, 읽어주신, 그리고, 읽고 계신 독자 여러분께 감사하다는 말씀을 드립니다.

이렇게 글을 올리는 이유는 책을 쓴 저자가 책을 읽는 여러분이 정확한 지식을 습득해야 한다고 생각하기에 책이 나온지 1년 3개월이 지난 지금 이렇게 글을 씁니다.(이렇게 갑자기 책에 대해서 이야기하는 것은 가장 아래에 적어 놓았습니다.)

먼저 제 책에 있는 몇몇 오류에 대해서는 손권남씨께서 자신의 블로그 http://kwon37xi.egloos.com/3733755 에서 잘 설명해 두었습니다. 여기서 제가 보기에도 완전한 문제라고 생각된 부분에 대해서는 2쇄 발행시 많이 수정하였습니다.

그런데, 가장 논란이 많은 부분은 역시 Collection관련 부분입니다.
물론 테스트를 제대로 하지 않았다는 점에 대해선 100% 인정합니다.
(http://agbird.egloos.com/4800620 에 있는 내용을 잘 읽어 보시면 도움이 되실겁니다.)

각각의  Map, Set, List, Queue 등은 자신의 용도에 맞게 사용해야만 합니다. 

그렇다면, 제가 책에 왜 Collection에 대해서 썼을까요?
잘못된 지식을 주기 위해서?
제 책에 안티하신 분들이 말씀하시는 잘못된 테스트 방법을 알리기 위해서 ?
모두 아닙니다.

사실 Collection은 일반 웹 프로그래밍을 할 때 성능의 관점으로 보았을 때 중요하지 않습니다.
하지만 만약 여러분들이 Batch 프로그램이나, WAS 등을 개발한다면 이야기는 완전히 달라집니다. 굉장히 중요합니다.
책을 보신분은 아시겠지만, 테스트 케이스는 적어도 만번 이상 반복 수행을 한 내용입니다.
일반 웹에서는 그렇게 많은 회수의 데이터 검색 및 처리를 해서는 안됩니다.
그렇게 몇만건의 데이터 처리를 하게 된다면 고객을 반드시 설득시키시기 바랍니다. 그건 Web이 아니라, Web의 껍데기를 하고 있는 C/S프로그램입니다.

책을 쓰면서 여러 자료를 수집하면서, 웹 상에서 어떤 Collection이 가장 빠르냐에 대한 논쟁이 일어난 부분을 많이 보았습니다.
그러한 논쟁은 웹 개발시에는 그리 큰 의미가 없다는 것을 알리기 위해서 쓴 부분 입니다.
그렇게 Collection의 성능이 걱정되신다면 구글 Collection을 쓰세요. 

다시 한번 책에 잘못된 지식을 전달한 점에 대해서 죄송하다는 말씀을 드립니다.

그런데, 지금까지 가만히 있다가 왜 갑자기 이런글을 썼을까요?
이번주 화요일에 사내에서 컨퍼런스가 있었습니다.
자바 성능과 관련된 부분이 있어 관심있게 듣게 되었습니다.
그런데, 사전에 컨퍼런스 자료를 검토하던중, 제 책이 잘못되어 있다고 되어 있는 부분을 발견하여
발표자에게 컨퍼런스 전에 메일을 드렸지만, 
메일을 보지 못하고 컨퍼런스를 진행하시더군요. - -;

그 발표자 분과는 컨퍼런스 후에 메일을 통해서 이야기를 하게 되었는데,
예전에 발표자와 다른 어떤 분이 Collection 부분 때문에 엄청 심하게 싸웠고,
그러한 문제 때문에 책에 대한 문제점을 세미나에서 다루었다고 말씀하시더군요.

제가 쓴 책 때문에 다툼까지 발생하리라고는 생각지도 못했습니다.
추후에라도 제가 잘못 쓴 부분 때문에 많은 분들이 다투지 않았으면 하는 생각에 글을 쓰게 되었습니다.

제가 완벽하지도, 똑똑하지도 않은 사람이지만,
성능에 때문에 고생하는 많은 분들을 위해서 쓰게된 책입니다. 조금더 성능에 대한 정확하고 심오한 정보를 얻고 싶으시다면, Effective Java를 반드시 읽어 보세요. 

그래도, 저도 사람인지라 깊이가 낮다. 일부분의 오류 때문에 잘못된 책, 믿지 못할 책이라는 평가를 보면 하루 종일 기분이 좋지 않더군요. 그래서 최근에는 검색을 잘 안해보고 있습니다. ^^:

지금은 "개발자도 쉽게 배우는 테스트와 테스트 툴 이야기(가제)"라는 책을 쓰고 있습니다.
이 책도 저번 책과 마찬가지로, 테스트에 대해서 잘 모르는 초급 개발자와 간단히 참조하기를 위한 중급 개발자분들을 위한 책입니다. TDD에 대한 심오한 이야기나 CI에 대한 깊은 이야기를 다루지는 않았습니다. 
단지, 그러한 단어가 무엇을 뜻하는지, 왜 해야하는지, 테스트라는 말만 들으면 스트레스를 받는 분들을 위해서 최대한 쉽게 쓰려고 노력하고 있습니다.
지금 쓰고 있는 책의 서문에도 써 놓았지만(나중에 출판사에서 그 내용을 뺄 수도 있습니다.), 
자신이 고급 개발자라고 생각하시는 그런 분들은 절대 제가 쓰고 있는 책을 사지 마세요.
그런 분들은 안읽으셔도 됩니다. (보시면 도움이 될만한 부분이 적어도 하나는 있겠지만...)

지금 쓰고 있는 책을 탈고하고, 출판을 한 이후에는
"자바 성능을 결정짓는 튜닝, 그 두번째 이야기"를 쓸 예정입니다.(목차는 거의 완성되었습니다.)
그 책은 성능에 대해서 깊게 쓸 예정이므로, 첫번째 이야기에 실망하신 분들은 기대하셔도 좋습니다.
두번째 책도 실망하시는 분들은 제가 어쩔 수 없죠. - -; 
단, 출판사와 계약 안하고 90% 완료한 상태에서 계약할 예정입니다. ^^;
(빠르면 내년 10월쯤 나올 것 같습니다. )

넋두리가 심했네요.

긴글 읽어 주셔서 감사합니다. 
Posted by tuning-java
,
GC가 뭔지 잘 모르시는 분들은 제 블로그의 다른 글을 찾아보시거나,
"자바 성능을 결정 짓는 코딩 습관과 튜닝 이야기"를 참조하시길...

자바의 메모리 구조는 다음과 같이 되어 있다.
  • Code Cache: contains memory used for compilation and storage of native code
  • Eden Space: pool from which memory is initially allocated for most objects
  • Survivor Space: pool containing objects that have survived Eden space garbage collection
  • Tenured Gen: pool containing long-lived objects
  • Perm Gen: contains reflective data of the JVM itself, including class and memory objects
  • Perm Gen [shared-ro]: read-only reflective data
  • Perm Gen [shared-rw]: read-write reflective data

    아래는 GC를 어떻게 튜닝하는지에 대한 자세한 설명이 있는 사이트 링크다.
    http://java-monitor.com/forum/showthread.php?t=30

    이것도 귀찮은 분을 위해서 더 간단한 튜닝 정보
    http://developer.amd.com/documentation/articles/pages/4EasyWaystodoJavaGarbageCollectionTuning.aspx

    완벽한 GC의 방식과 처리에 대한 자세한 정보를 보려면 아래 링크에 있는 PDF 파일을 참조하는 것도 좋다.
    http://www.cecmg.de/doc/tagung_2007/agenda07/24-mai/2b3-peter-johnson/index.html


    한글로 된 설명을 보고자 하신다면
    다시한번 말씀드리지만,
    "자바 성능을 결정 짓는 코딩 습관과 튜닝 이야기"를 참조하시길...
    지금 생각해보면 이 책에 이 부분에 대한 설명을 좀 약하게 적었다는 생각이 많이 들긴 한다.
    다음책에선 자세히 적어놔야지...

    추가로 Java 6 GC 튜닝 방법에 대한 Sun의 자료는 아래와 같다.
    http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

  • Posted by tuning-java
    ,
    자바 힙 덤프 분석기는 jhat등 여러가지 툴이 있지만,
    최근에 발견한 Eclipse Memory Analyzer 라는 프로그램이 있다.

    http://www.eclipse.org/mat/

    다운로드하여 압축을 해제하고, 이클립스만 수행하면 된다.
    단, 기본 자바 VM을 사용할 때 발생한 HPROF 덤프 파일의 확장자는 반드시 hprof 여야만 읽을 수 있다.

    작성된 힙 덤프 파일을 이 프로그램에서 읽으면 다음과 같은 화면을 제공한다.
    사용자 삽입 이미지

    Posted by tuning-java
    ,

    서버가 정상적으로 수행되었다면, 관리자 콘솔에 들어가야 한다.
    웹과 커맨드라인 접근의 두가지 방법이 있는데, 웹으로 들어가보자.

    웹 콘솔에 들어가는 방법은 다음의 URL로 들어가면 된다.
    http://localhost:4848
    그런데 이렇게 들어가면 id/pw를 묻는다.(이거 찾느라 좀 시간이 걸렸음)
    만약 Glassfish를 서버에 설치했다면,
    localhost 대신 서버 IP를 입력해야 한다.

    admin 콘솔의 설치시 id/pw는 admin/adminadmin 이다.



    Posted by tuning-java
    ,
    http://code.google.com/intl/ko/appengine/

    Google에서 제공하는 Application Engine의 자바버전 Beta 서비스가 시작되었다.
    아직까지는 무료버젼으로 제공되며,
    - 500MB의 공간
    - 월 500만 Page View
    가 무료다.

    Windows, Mac, Linux에서 개발할 수 있는 기능들을 제공하며,
    Eclipse에서 개발을 쉽게 할 수 있도록 plug-in 도 제공된다.

    아쉬운점은 시작하기 가이드를 한글로 제공하지 않는다는 것~~~.

    시간되시는 분들은 한번씩 해보시길...
    Posted by tuning-java
    ,
    요즘 iBATIS를 사용하는 프로젝트가 많이 있다.
    예전 회사에서도 이런 경우가 발생한 것으로 생각되는데,
    iBATIS를 사용하면 WAS의 CPU 사용량이 어느 정도 이상 증가하지 않고,
    TPS도 증가하지 않는 현상이 발생하는 경우가 간혹 있었다.

    최근에도 이런 문제를 확인했는데,
    그 이유는 iBATIS의 com.ibatis.common.beans.ClassInfo 클래스에 있었다.
    뭐 내가 잡은건 아니고 내 옆자리에 있는 박박사님께서 ^^;

    만약 쿼리들이 느린 경우에는 이런 문제가 야기 되지 않겠지만,
    쿼리들이 엄청 빠를 경우 WAS에 병목이 생긴다. 아래의 링크를 보자.
    https://issues.apache.org/jira/browse/IBATIS-508?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12683961

    이중으로 Lock을 잡은 것이 문제였으며,
    우연찮게도, 미쿡 애들도 비슷한 시기에 문제를 확인한 것 같다.
    http://www.kaigrabfelder.de/en/2009/05/01/concurrency_vs_synchronization.html

    가장 좋은 해법은 ConcurrentHashMap 을 사용하는 것이다.

    해당 버젼이 release (2.3.5)되면 성능을 위해서 update 하는 것이 좋을 듯 하다.


    Posted by tuning-java
    ,
    https://visualvm.dev.java.net/

    VisualVM이라는 무료 툴이 있다.
    사용자 삽입 이미지

    이 툴이 JDK 6.0의 update 7 부터는 JDK의 bin 디렉토리에 jvisualvm.exe 라는 파일로 추가되어 있다.

    한번 사용해 보면 알겠지만, 정말 대단한 툴이다.

    jconsole은 JMX를 데이터를 보기 위한 툴이라면,
    이 툴은 메모리 상태 파악 및 성능 및 메모리 프로파일링까지 가능하기 때문에 성능상 문제가 있는 분들에게
    많은 도움이 될 것이라 생각된다.

    하지만, 아직까지 안정화 되지는 않아서 모니터링 대상 JVM이 죽는 현상이 발생할 수 있으므로,
    조심해서 사용하기 바란다.

    운영서버보다는 테스트 서버에서...

    추가로 이 툴을 사용한 후기를 "영어"로 작성할 능력이 있다면
    500불을 받을 수 있는 기회를 놓치지 말기 바란다.

    나도 함 시간 있으면, 해보려고~~
    자세한 내용은 아래 링크 참조.
    http://java.sun.com/community/javavisualvm/


    Posted by tuning-java
    ,
    Blog2Book 시리즈의 테스트 책을
    현재까지 57%정도를 집필완료하였다.

    아직도 갈 길이 멀긴 하지만,
    출근 버스에서 쓰는것도 쉽진 않다.

    퇴근하면 피곤해서 아무것도 못하것고~~~.

    목표는 7월말 집필 완료
    9월초 출판 ~~~
    Posted by tuning-java
    ,

    Glassfish를 설치하여 사용하다보면,
    없는 URL을 요청할 경우 디렉토리 목록이 나오게 된다.

    대부분의 시스템 운영자는 디렉토리 목록에 어떤 파일이 있는지를 보여주기 안좋아 하므로,
    옵션을 수정하여 안보이도록 해야 한다.


    {glassfish설치위치}/domains/domain1/config
    디렉토리로 이동한다.

    디렉토리에 있는 default-web.xml 파일의 listing 부분을 false로 지정해야 한다.

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>listings</param-name>
          <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>

    참고로 내가 못찾은 건지 모르겠지만,
    설정에는 이 옵션을 지정하는 부분이 없다.

    Posted by tuning-java
    ,
    오늘 팀장님께서 복사한 문서를 한번 읽어 보라고 주셨다.
    9개의 자바 성능 팁에 대해서 아~주 간단하게 정리되어 있는 문서다. (2페이지에 걸친...)

    그 장의 첫번째 구문에는 Michael A. Jackson 이라는 할아버지가 쓴 글귀가 있다.

    The First Rule of Optimization : Don't do it
    The Second Rule of Optimization (for experts only) : Don't do it yet.

    이 문서가 언제 쓴 문서인지는 모르겠지만.... 이 글귀는 약간 이해는 안된다. ^^;

    Tip #1 : Object creation is bad
    Tip #2 : static is good  ==> I don't think so 다.
    Tip #3 : Table switch good, lookup switch bad
    Tip #4 : Small methods are good methods
    Tip #5 : Exceptions are exceptional
    Tip #6 : Use decorator patterns with care
    Tip #7 : instanceof is faster on classes
    Tip #8 : Use synchronized minimally
    Tip #9 : Beware external libraries
    Posted by tuning-java
    ,
    http://blog.sdnkorea.com/sls/123

    Sun에서 항상 하는건지는 모르겠지만, 오픈 기술 세미나를 하네요.
    이미 하나는 지나갔고...

    전 다음주 화요일 세미나 참석할랍니다.

    4월 오픈 기술세미나가 일정입니다. 
    ------------------------------------------------------------------------------------
    세미나 일 | 시간 | 주제 
    ------------------------------------------------------------------------------------ 
    4월 07일(화) | 19:00 ~ 19:50 | 클라우드 컴퓨팅을 위한 서버가상화 

    4월 14일(화) | 19:00 ~ 19:50 | Glassfish의 미래와 자바EE 

    4월 28일(화) | 19:00 ~ 19:50 | 한국썬의 SOA전략:자바캡스(JavaCAPS)6버전

    Posted by tuning-java
    ,
    http://regexp.resource.googlepages.com/analyzer.html

    웹기반의 정규 표현식을 분석해주는 툴이 있어서 소개한다.

    정규 표현식을 서비스에 적용하기 전에,
    한번정도는 체크해 주는 쎈쑤~~~
    Posted by tuning-java
    ,

    기본적으로 자바는 Process와 Thread로 구성되어 있다.

    이게 뭔지는 Java 성능을 결정짓는 코딩 습관과 튜닝 이야기라는 책에 잘 나와 있고...


    여하튼.. 어떤 Thread가 뭔 짓을 하고 있는지를 보려면 Thread dump를 보면 된다.

    자바는 기본적으로 Thread dump를 제공하기 위해서 jstack이라는 명령어(프로그램)을 제공하며 자세한 설명이 필요한 분은 아래의 설명을 보기 바란다.

    http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstack.html

    http://java.sun.com/javase/6/docs/technotes/tools/share/jstack.html

     

    만약 JDK 버전이 5.0이면

    Jstack pid

    JDK 버전이 6.0 이면

    jstack -l pid

    명령을 수행하면 된다.


    만약 솔라리스나 리눅스에서 이 명령으로 수행이 안되면

    jstack -F pid

    로 수행하면된다.


    여기서 pid 는 프로세스의 id다.

    만약 jstack이 수행하는데 너무 오래 걸리고, 서버에 부하가 된다면 kill -3으로 쓰레드 덤프를 뜨는 것도 도움이 된다.


    분석하는 방법은 쉽지 않지만 다음과 같은 툴들이 있다.
    TDA라는 툴
    https://tda.dev.java.net/

    IBM의 JCA라는 툴

    http://www.alphaworks.ibm.com/tech/jca



    Posted by tuning-java
    ,

    한빛미디어에서 이벤트를 한다고 하길래 한번 어떤 순서로 공부를 해야 하는지를 정리해본다.

    먼저 이벤트 관련 설문 내용

    1. 현재 하시는 일은 무엇인가요?

    글쎄요. 저도 제가 요즘 뭘 하는지... 그냥 요즘은 수명업무 하고 있습니다. 

    2. 로드맵에서 각 단계별로 같이 보면 좋은 책이 있나요?

    이 질문의 요지는 잘 모르겠지만, 같이보면 좋은 책은 같이 나열 했습니다. ^^;

    3. 로드맵에 대한 자신의 생각을 적어주세요.

    로드맵을 작성하다보니, 웹기반 시스템을 만들 개발자에겐 어느정도 도움이 되는 책들이 많으나, 서버 모듈이나 Core 모듈을 개발하는 개발자용 책은 그리 많지가 않은거 같네요.


    먼저 이벤트 페이지에 올라와 있는, 책들의 표지 목록을 보니 “엄청나게 많은 종류의 책이 출판되고 있구나” 라는 사실을 알게되었다. 그것도 IT 책만을 전문적으로 출판하는 회사에서…

    그런데, 표지 목록에 있는 책들을 보니, 이미 절판된 책도 있는 것으로 보였다. 최대한 내가 알고 있는 절판 책들은 뺐으나, 이 목록에 포함되었을 수도 있으니 이점 양해해 주기 바란다.

    추가로 이 로드맵은 웹 시스템 개발자를 위한 로드맵이고, 내 개인적인 의견이며, 사람마다 생각이 틀릴 수도 있다는 점을 이해해 주기 바란다.

     

    그럼 이제 시작한다.

    자바를 배우기 시작할 때에는 가장 먼저 자바의 기본과 알고리즘을 알아야 한다. 게다가 IDE 사용법까지…

     

    기본적인 자바에 대해서 알았다면, 웹 개발을 위한 필수인 HTML과 자바 스크립트에 대해서 알아야 한다.

     

    그리고, DB에 대해서 알아야 한다는 것은 두말할 필요도 없다.

     

    DB까지 공부했다면, 본격적으로 Java를 이용한 웹 개발 환경인 JSP, Servlet, EJB 에 대해서 알아 두자.
    (참고로 EJB는 죽었다고 생각 될 수도 있지만, EJB에서 제공하는 보안, 트랜젝션등의 관리 기술에 대해서는 알아두는 것이 나중에 정신 건강을 위해서 매우 좋다. ^^)

     

    이게 끝이라고 생각할 수도 있겠지만, 이제 시작이닷!!!

    언제까지 누가 모델링해준 것만 보고 만들것인가? 직접 자기가 모델링하고 설계할 수 있어야 한다.

    그러기 위해선 UML, CBD(이것도 한물 갔다고 생각할 수 있지만, 개념은 알아야한다.), SOA(이것에 대한 책이 한빛엔 없어보인다)등에 대해서 알아야지…

     

    보다 더 제대로 알고 개발하기 위해선, XML, 쓰레드, IO, 네트워킹, 리펙토링 정도는 공부해야 한다. 다른건 다 모르더라도 리펙토링은 반드시~~~~

     

    그 다음엔, 요즘에 많이 사용되는 프레임웍과 Web 2.0, AJAX에 대해서도 공부해야 한다.
    참고로 아래에 나와 있는 책들의 버젼은 내가 잘 모르며, 특히 프레임웍 책을 살 때에는 요즘 최신 버젼의 프레임웍인지에 대해서 잘 알아 본 후에 구입해야 한다. 버젼에 따라서 달라지는게 많아지기 때문에…

     

    그럼 이제 개발한 것을 운영 서버에서 컴파일하거나 올려야 겠죠?

    리눅스나 유닉스의 기본 명령어 정도는 알아야 한다.

     

    마지막으로 개발의 꽃인 튜닝에 대해서 공부하자.

     

    물론 나도 여기에 있는 모든 책을 읽은 것은 아니다.
    하지만, 입맛에 맞게 골라서 Java 기반의 웹 개발에 대한 기본을 튼튼히 다지자.

    Posted by tuning-java
    ,
    사용자 삽입 이미지

    http://www.hanb.co.kr/events/roadmap/


    한빛미디어에서 자바에 대한 로드맵을 자기 블로그에 올리고,
    트랙백을 걸어 두면,
    상품권을 주네요. (달랑 3명)
    하지만, 모든 참여자에게 한빛 미디어 책을 한권씩 준답니다.

    뭐 간단하게 작성해서 올려도 손해 볼 것은 없을 듯...
    Posted by tuning-java
    ,
    http://www.ibm.com/developerworks/library/j-rtm1/index.html

    메일에서 온 글을 보고 링크를 따라가 봤는데,
    시간만 있다면, 이 글 보고 APM하나 맹글 수 있다는 생각이 든다.

    뭐 시간이 없다는 것은 핑계일 뿐이지만... ^^;
    Posted by tuning-java
    ,
    한대의 아파치 서버에서 두대의 Tomcat 서버로 연동하는 경우가 적지 않을 것이다.
    http://thought-bytes.blogspot.com/2007/03/how-to-load-balance-tomcat-55-with.html

    위의 링크를 보면, 어떻게 연동하는지 상세하게 정리 되어 있다. ^^;
    Posted by tuning-java
    ,

    http://java.sun.com/javaone/sf/2008/articles/rockstar_tonyprintezis.jsp

    먼저 위의 인터뷰 내용을 읽어보자.
    Garbage First Collector가 뭔지 대충 감을 잡을 것이다.

    분명 대부분 안읽어 보시겠지만....적어도 아래 줄들은 일어 주기 바란다.
    G1=next-generation low-pause garbage collector
    G1 will ultimately replace the Concurrent Mark-Sweep (CMS) garbage collector
    G1, even though it is generational, there is no physical separation between the two generations.

    Three Objectives of G1
    The first objective is consistent low pauses over time.
    The second objective is to avoid, as much as possible, having a full GC.
    The final objective is good throughput.


    if you care about getting the job done as quickly as possible, and don't care much for how long your application is going to be stopped by the garbage collector, the throughput collector is the best choice.

    if you have a batch job that is going to take a few minutes or a few hours and you want it to be done as quickly as possible, then a throughput collector is clearly the best choice.

    But, if you are working on a very interactive job that needs to interact with people, other applications, or users through web pages, then a low latency garbage collector is the best choice.


    Why does garbage collection take so long? ==> Garbage collection is very memory-bound. And memory speeds these days are quite slow compared to CPU speeds

    글 중간에는 다음의 내용을 읽어보라고 이야기한다.
    GC와 친해지는 코딩 방법
    http://developers.sun.com/learning/javaoneonline/2007/pdf/TS-2906.pdf

    그리고, 저 이너뷰 한 사람이 사진을 잘 찍는가본데, 사진과 개발과의 상관관계를 아래와 같이 이야기 했다.
    You need to be committed and to be patient and try out things again and again, to make sure that you get it just right. I see some parallels between photography and development.

    마지막엔 그가 이야기하는 아름다운 코드란....
    Beautiful code is code that is simple, easy to understand, and efficient
    란다.

    더 자세한 내용을 보시려면 아래의 영어지만, 쉽지 않은 용어로 되어 있는 문서를 참조하기 바란다.
    http://research.sun.com/jtech/pubs/04-g1-paper-ismm.pdf

    참고로 G1은 JDK 7 부터 추가된단다.
    그리고, early access 로 JDK 1.6.1에서 추가 되었다.
    http://www.tuning-java.com/272

    Posted by tuning-java
    ,
    http://performance.netbeans.org/

    근데 이 글들은 NetBeans를 보다 빨리 사용하기 위한 설명들인감?
    Posted by tuning-java
    ,

    http://java.sun.com/performance/reference/whitepapers/tuning.html

    썬에서 제공하는 자바 튜닝 whitepaper

    물론 JVM 옵션 튜닝만 한다고 해서 답은 안나오겠지만,
    튜닝할게 더이상 없다면, JVM 버젼 upgrade 및 옵션 튜닝을 해야 할 것이다.

    아래는 이 글의 목차다.

    뭐 다 읽기 귀찮으신 분들은 4.2 부터 적용해 보시면 된다.

    1   Introduction

    1.1   Goals
    1.2   This is a Living Document
    1.3   How to Use this White Paper

    2   Best Practices

    2.1   Use the most recent Java™ release
    2.2   Get the latest Java™ update release
    2.3   Insure your operating system patches are up-to-date
    2.4   Eliminate variability

    3   Making Decisions from Data

    3.1   Beware of Microbenchmarks!
    3.2   Use Statistics
    3.3   Use a benchmark harness

    4   Tuning Ideas

    4.1   General Tuning Guidelines

    4.1.1   Be Aware of Ergonomics Settings
    4.1.2   Heap Sizing
    4.1.3   Garbage Collector Policy
    4.1.4   Other Tuning Parameters

    4.2   Tuning Examples

    4.2.1   Tuning Example 1: Tuning for Throughput
    4.2.2   Tuning Example 2: Try the parallel old generation collector
    4.2.3   Tuning Example 3: Try 256 MB pages
    4.2.4   Tuning Example 4: Try -XX:+AggressiveOpts
    4.2.5   Tuning Example 5: Try Biased Locking
    4.2.6   Tuning Example 6: Tuning for low pause times and high throughput
    4.2.7   Tuning Example 7: Try AggressiveOpts for low pause times and high throughput

    5   Monitoring and Profiling

    5.1   Monitoring
    5.2   Profiling

    6   Coding for Performance
    7   Pointers
    8   Feedback and the Java Performance Community

    8.1   Feedback
    8.2   Java Performance Community

    Posted by tuning-java
    ,
    http://oreilly.com/news/graphics/prog_lang_poster.pdf

    너무 많은 것을 기대하는 분은 실망할 수 있으나,
    어떤 언어가 언제 나오고 어떻게 버젼업이 되었는지를 볼 수 있는 문서다.
    Posted by tuning-java
    ,
    Java의 Runtime이라는 클래스가 있다.

    이 클래스를 사용하면, shell script 던지, exe 파일이던 어떤 실행파일이라도
    자바 JVM에서 실행시킬 수 있다.

    그런데, 정상적으로 잘 실행되면 걱정이 없는데,
    CreateProcess error=2
    를 떨어뜨리면서 실행이 가끔 안될 때가 있다.

    그럴땐 아래의 링크를 참조해서 해결하기 바란다.

    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1
    Posted by tuning-java
    ,

    http://www.atlassian.com/software/jira/docs/latest/performance.html

    지라 자체적으로 성능 튜닝이 가능한 환경이 마련되어 있다.

    이렇게 링크까지 만들어 정리해 놓은것을 보면 성능 이슈가 많긴 많은가 부다.


     

    Posted by tuning-java
    ,
    자바에서 public, protected, private, 그리고, 아무것도 지정하지 않을 때의 차이점도 가끔 혼동될 때가 있다.

    물론 public 이나 private 갖고 혼동하는 사람은 없겠지만...

    protected는 자기 자신과 같은 패키지, 그리고 상속관계에 있는 클래스에서 접근이 가능하고,

    아무것도 명시하지 않을 경우에는 자기 자신과 같은 패키지에서만 접근 가능하다.

    그래서 접근 가능성은
    public > protected > 아무것도 지정하지 않을 때 > private 순이다.

    Posted by tuning-java
    ,
    자바를 처음 배울때 혼동되는 것중 하나가 equals를 언제 사용해야 하고, ==을 언제 사용해야 하는지에 대해서다.

    영어를 잘 하시는 분은 아래의 링크를 읽어보시면, 자세한 내용을 확인할 수 있을 것이다.

    http://www.javabeat.net/qna/13-what-is-difference-between-equals-and-/

    http://leepoint.net/notes-java/data/expressions/22compareobjects.html

    결론만 이야기하면, equals는 객체의 값을 비교하고, ==은 동일한 객체인지를 비교하는 것이다.

    기본적으로 String 클래스만 값이 같은지를 비교하고, 여러분들이 만든 클래스는 자동으로 각 속성들을 비교해주지 않기 때문에, equals() 메소드를 직접 구현해야만, equals로 비교가 가능하다.

    Posted by tuning-java
    ,

    리눅스 설치후 자바 개발용 세팅...

    1. 자바 설치
       centos가 설치되면, 자바를 선택해서 설치할 수도 있는데, 버젼이 1.4다 - -;
       JDK 5.0이나 6.0 을 설치한 후 해당 경로를 프로파일에 등록한다.

       프로파일 수정은 계정 로그인 후 디렉토리에 존재하는 .bash_profile 파일을 변경하면 된다.
       유의사항 : jdkxxxx.bin파일을 수행한 위치에 jdk가 설치되므로, 압축이 해제될 위치에서 bin을 실행할 것.

    2. eclipse 설치
       eclipse는 www.eclipse.org 사이트 들어가면, 자동으로 리눅스임을 인식하여 리눅스용을 다운 받을 수 있다
       이클립스 설치는 그리 어렵지 않으니(압축만 풀면 된다.

       그런데 만약 centos 5를 설치했다면 JVM exit code = -1 이 나타나면서 프로그램이 수행되지 않을 수도 있다. 그럴 경우 터미널에서 이클리브를 띄우면 다음과 같은 메시지가 나타날 수도 있다.

    /jre/lib/i386/client/libjvm.so: reloc 후에 prot 세그먼트를 복구할 수 없습니다: 허가 거부됨

     이런 경우 SELinux 관련 옵션을 disable 해야 한다.

    1. 다음 명령을 입력하여 로드한 라이브러리에 대한 기본 보안 컨텍스트를 변경
       이때 libjvm.so 가 있는 디렉토리로 이동해야함.
       chcon -t texrel_shlib_t *.so
    2. /etc/selinux 의 config 파일에 다음 줄을 추가하여 SELinux를 비활성화.
       SELINUX=disabled


    3. tomcat 설치
       tomcat도 다운로드해서 압축만 풀면 되므로, 그리 어렵지 않을 것이다.
       단지, catalina.sh에 JAVA_HOME 값을 지정하는 걸 잊지 말아야 한다.


    Posted by tuning-java
    ,

    일시: 2009년 2월12일 목요일 18:00 ~ 20:00
    장소: 멀티 캠퍼스 1702호
     =========================================================================

      18:00 ~ 18:05  세미나 소개
      18:05 ~ 18:30  효과적인 테스트 코드 작성(황상철 책임 SDS)
      18:30 ~ 18:40  휴식
      18:40 ~ 19:05  Secure Web Application(채수민 책임 SDS)
      19:05 ~ 19:15  휴식
      19:15 ~ 19:40  넵튠(Neptune) 과 하둡(Hadoop) 소개 (김형준 NHN)
      19:40 ~ 20:00  Q&A 및 세미나 정리
    =========================================================================
     
    이번 세미나도 알차게 준비했습니다.
    NHN의 김형준 실장이 새로운 오픈소스인 넵튠과 요즘 GFS로 많은 인기를 끌고 있는 하둡에 대해 소개할 예정이며,
    보안그룹의 보안 전문가인 채수민 책임이 안전하게 웹 애플리케이션을 개발하는 방법에 대해 강의합니다.
    끝으로 단위 테스트를 제대로 할 수 있도록 효과적으로 테스트 코드를 작성하는 법에 대해 제가 발표를 진행합니다.
     
    자리가 한정되어 있습니다. 참여를 원하시는 분은 황상철 책임님에게 메일로 신청해 주시면 감사하겠습니다.
    알차고 재미있는 시간이 될것을 약속드리며 엔지니어링에 관심있는 분들의 많은 참여 부탁드립니다.

    Posted by tuning-java
    ,
    얼마전부터 그래프를 사용할 일이 생겨서 각종 그래프를 알아보고 있다.

    그중 GWT와 같이 사용 가능한 Flash 기반의 그래프는 다음과 같다.
    - OFCGWT : http://code.google.com/p/ofcgwt/
    영국 아저씨가 만든 그래프 인듯 하다.
    이 그래프의 가장 큰 단점은 UI가 우리 팀장님 마음에 들지 않는 다는 것이다.
    - Fusion Chart : http://code.google.com/p/gwt-fusionchart/
    근데 Fusion Chart 를 제대로 사용하려면 상용을 구매해야 하므로,
    별로 인기가 많지는 않은 듯 하다.

    추가로 자바 스크립트 기반의 chronoscope라는 그래프도 있다.
    http://timepedia.org/chronoscope/

    'UI > Graph' 카테고리의 다른 글

    [Java Graph] JFreeChart를 쉽게 사용할 수 있는 예제 사이트  (1) 2009.01.26
    Posted by tuning-java
    ,
    http://dlc.sun.com/pdf/819-3681/819-3681.pdf

    문서의 제목은 Sun Java SystemApplication Server 9.1 PerformanceTuning Guide라고 되어 있다.

    하지만, 실제 내용은 특정 Application 서버에 한정된 내용이 아닌 범용적이고, 기본적인 이야기가 많이 정리되어 있다.

    세부적인 내용은 아니더라도, 제목만이라도 읽어 놓으면 많은 도움이 될 듯 하다.

    바로 다운로드 받기 귀찮은 분들은 아래의 내용을 펼쳐서 제목만이라도 읽어보기 바란다.

    Posted by tuning-java
    ,
    1999년도에 내가 자바를 배울때의 개발툴은 Ultra Edit 이었다.
    지금도 울트라 에딧은 자바만이아닌 여러 언어의 최고의 개발 툴이다.

    하지만 현재 가장 많이 사용되는 툴은 누가 뭐래도 eclipse 일 것이다.
    이클립스를 다운로드 받으시려면, 검색엔진에서 www.eclipse.org 에 접속후 상단에 있는 Download를 선택하여,
    원하는 것을 받으면 되는데, 자바 기반의 웹 어플리케이션을 개발할 경우에는 아래의 그림에서 가장 첫번째 이클립스를...
    그렇지 않은 경우에는 그 아래에 있는 이클립스를 다운 받으면 된다.


    추가로 이클립스 이외에 유명한 툴로는 Sun 에서 제공하는 NetBeans라는 툴이 있긴 한데,
    약간 프로그램이 무거워서 많은 사람들이 애용하지는 않는다.

    그리고, 개인적으로는 예전에 세미나 하면서 무료로 받은 IntelliJ라는 툴을 사용할 때도 있는데,
    아직까지는 이클립스보다는 좋은 툴 같다.(상용이라는게 좀 흠이지만...)


    다음에는 equals와 == 에 대해서 알아보도록 하겠다.
    Posted by tuning-java
    ,