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

  1. 2008.09.10 Sun Tech Days 2008 Seoul (썬 테크 데이즈)가 10월 15일~17일까지 열리네요. (1)
  2. 2008.09.03 [분석툴] Java Path Finder
  3. 2008.09.01 [Blog2Book 자바 성능 튜닝] 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기 2쇄가 나왔습니다. (4)
  4. 2008.08.09 [IBM Dump Analyzer] IBM Diagnostic and Monitoring Tools for Java - Dump Analyzer 를 이용한 메모리 분석 가이드
  5. 2008.08.01 [Head First Software Development] HFSD 감수중 (2)
  6. 2008.07.29 [vmstat manager v.2008.04.14] vmstat manager(자작 vmstat 로그 정리 툴) - windows client용
  7. 2008.07.29 [강의취소] 8월 11일부터 진행하기로 한 강의가 취소 되었다.
  8. 2008.07.21 [강의계획] 8월 11일부터 3일간 삼성 멀티캠퍼스에서... (2)
  9. 2008.07.18 [쓰레드 덤프 분석] 자바 쓰레드 덤프 분석을 통한 병목 구간 찾기
  10. 2008.07.05 [Link] 자바 JVM에 대한 튜닝에 대한 자료가 잘 정리되어 있는 사이트
  11. 2008.07.05 [Link] AIX (IBM JVM사용시)에서의 자바 문제 해결 방법
  12. 2008.06.28 [세미나자료] 2008년 07월 18일 OKJSP 세미나 자료. (1)
  13. 2008.06.13 [Memory leak] Oracle의 OCI를 사용할 때 C Heap 과 관련된 OutOfMemoryError가 발생할 때
  14. 2008.06.04 [Java Basic] 자바 주석 (자바 코멘트) 관련 문서
  15. 2008.05.15 [Java Basic] Regular Expression (정규식, 정규 표현식)의 형식
  16. 2008.05.14 [Java Basic] Regular Expression (정규식, 정규 표현식)의 기본
  17. 2008.04.28 [Blog2Book] 자바 성능을 결정 짓는 코딩 습관과 튜닝 이야기 책에 대한 다양한 이야기들 (1)
  18. 2008.04.16 [Good Article] C++로 돌아가는 자바를 읽고
  19. 2008.04.11 [Google Android-구글 안드로이드] 본격적으로 만들어 보기-5 Activity 추가하기~~~
  20. 2008.04.02 [Spring] 초간단 Spring MVC 구현하기
  21. 2008.04.02 [Spring] Spring MVC에 대한 기초중의 기초
  22. 2008.04.02 [eclipse 팁] 이클립스의 신기한 기능
  23. 2008.04.01 [링크] 자바의 어노테이션 (Annotation)
  24. 2008.04.01 [Spring] AspectJ 에서의 Point cut (포인트 컷) 언어 정리
  25. 2008.04.01 [Spring] AOP 의 Proxy를 보다 쉽게 이해하기 위한 Proxy 패턴 예제
  26. 2008.04.01 [Spring] AOP(Aspect Oriented Programming) 란?
  27. 2008.03.31 [Spring] IoC와 DL과 DI
  28. 2008.03.31 [eclipse] eclipse를 시작할때 JVM terminated exit code=-1 이 뜨면서 제대로 시작이 되지 않을때
  29. 2008.03.31 [Spring] Spring Framework (스프링 프레임웍) 이란?
  30. 2008.03.31 [Spring] Spring Framework의 등장배경
http://www.suntechdays2008.com/

10월 15일~17일에 썬 테크 데이즈가 잠실 롯데 호텔에서 열린다.
사전등록(9월말까지)자는 이보다 약간 싸지만,
10월에 신청한다면
참가비는 11마넌. - -;
회사 단체 5인이상은 9만 9천원
학생은 7만 7천원
이다.

금요일에 하는건 내가 갈 필요는 없을 것 같고...
목요일날 가장 마지막에 하는
"자바 성능 향상" 세션은 무조건 참석해야 겠다.

회사 어딘가에 표가 공짜로 떨어지는 팀이 있을 텐데....
어떻게 찾남???
여기 저기 찔러봐야 겠다.

그나저나 위대하신 분(GGP)께서는 별말 없이 보내주시려나 모르겠다.
그 전주가 신임 과장 교육인데...



 
시 간 내 용
07:30 ~ 09:00 참가 등록
09:00 ~ 09:10
환영 오프닝쇼
09:10 ~ 09:50
기술 데모 : 참여의 시대 내일의 기술
09:50 ~ 10:10
환영사
10:10 ~ 11:00 기조 연설
Rich Green/썬마이크로시스템즈 소프트웨어부문 수석 부사장
11:00 ~ 11:45
점심 식사 및 전시부스 방문
  자바와 클라우드
컴퓨팅
효율적인 개발을
위한 혁신
오픈솔라리스 Hands-on-Lab
(실습)
11:45 ~ 12:35 클라우드 컴퓨팅 :
기술과 사례 연구
JavaSE6U10 무엇이
달라졌나
리눅스의 미래 :
오픈솔라리스
3410 - Metro
12:45 ~ 13:35 GlassFish와
Java EE의 미래
MySQL: Web 2.0을
위한 데이터베이스
C/C++/Fortran
애플리케이션 구축
13:45 ~ 14:45 점심 식사 및 부스 방문
14:45 ~ 15:35 Comet 및 Ajax를
이용한 개발자
웹 애플리케이션
JavaFX로 RIA 쉽게
만들기
오픈솔라리스와
리눅스를 위한
애플리케이션 성능
최적화 기술
시스템 어드민
실습: ZFS를
활용한 간편한
데이터 관리
15:45 -16:45 자바 플랫폼의
신기능
Real Time Java로
예측 가능한
시스템 만들기
오픈솔라리스
개발방법 및
IPS 저장소에의
이용방법
시스템 어드민
실습: 오픈스토리지
16:55 - 17:15 휴식 및 전시 부스 방문
17:15 - 18:05 EJB 3, Spring,
SEAM
JavaFX로 쉽게
만드는 애니메이션과
미디어
오픈솔라리스 시작과
쿨 피쳐
4530 - Jmaki
18:15 - 19:05 (J)Ruby와 Rails Dtrace로 JVM 내부
들여다 보기
오픈솔라리스에서
개발부터 배포까지
19:05 - 19:05 경품 추첨

 
시 간 내 용
09:00 ~ 09:10 환영사
09:10 ~ 09:50
썬 커뮤니티 기조 연설
09:50 ~ 10:40
스폰서 기조연설
10:40 ~ 11:10
개발자 스타킹 대회 - 개발자 스타를 찾아라!
11:10 ~ 11:55
휴식 및 전시 부스 방문
  자바와 Web 2.0 Scripting and
Deployment
오픈솔라리스 Hands-on-Lab
(실습)
11:55 ~ 12:45 REST를 통한
네트워킹
자바 챔피언 세션 오픈솔라리스와
리눅스를 위한 병렬
애플리케이션의 개발
7355 - JavaFX
12:55 ~ 13:25 대화의 시간 대화의 시간 대화의 시간
13:25 ~ 14:25 점심 식사 및 전시 부스 방문
14:25 ~ 15:15 AMD 기술 세션 Java ME SDK
(CLDC with on
device debugging
etc, CDC, blu-ray)
스폰서 세션 9400 - Dtrace
15:25 -16:15 Ajax와 프레임워크 OpenESB와
기업 네트워킹
고가용과 업무
연속성을 위한
아키텍쳐
16:15 - 16:45 휴식 및 전시 부스 방문
16:45 - 17:35 Local Session OpenSSO 및
OpenID를 비롯한
웹보안 강화방안
데스크탑 및 기업을
위한 가상화 기술
ZFS & IPS HOL
17:50 - 18:40 Java 성능 향상 없어서는 안되는
Java Script
- 자바 스크립트
언어의 중요성
안전한 개발부터
배포까지
18:40 - 18:40 경품 추첨


Posted by tuning-java
http://javapathfinder.sourceforge.net/
허광남님 블로그를 통해서 알아낸 툴...
정말 deadlocks 이나 unhandled exceptions 을 알아서 분석해줄까?
나중에 시간나면 확인해 봐야겠다.
Posted by tuning-java
Blog2Book 2nd


드디어 기다리던 Blog2Book 3호점 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기의 2쇄가 나왔습니다.
2쇄가 나오면서 드릴 말씀이 많지만....
그동안 하고 싶었던 몇가지만 말씀드리겠습니다.

드리는 말씀 1
가장 먼저 드리고 싶은 이야기는 저자는 책을 내기 전에는 정신 수양을 미리 해야한다는 사실을 알았습니다. ^^;
책이 잘 팔려서 기분이 좋기는 하지만, 악평들 때문에 기분 나쁜건 어쩔 수 없더군요.

드리는 말씀 2
그래도 이 책을 내면서 기본적인 목적은 이뤘습니다.
- 적어도 2쇄 찍기
  (제 책이 나올 수 있도록 도와 주신분들에게는 2쇄가 나와야 본격적인 이득이 되기 때문에 ...)
- 검색엔진에서 "자바 성능 튜닝"을 치면 제 책이 나오게 하기
  (구글이나 네이버, 야후, 엠파스에서 한번 쳐 보시면 압니다. ^^)

드리는 말씀 3
자바 성능을 결정짓는 코딩 습관과 튜닝 이야기는 제 첫 책입니다. (번역본과 멀티 캠퍼스 교재를 제외한...)
일반 서점이나 온라인 서점에서 팔리는 그런 책은 처음 쓴 셈이죠.
제 책에 대한 좋은 평들도 많이 있습니다. 그런 글을 블로그나 온라인 서점 사이트에 올려주신 분들에게는 이 글을 통해서 정말 고맙다고 말씀 드리고 싶습니다.

드리는 말씀 4
제 책에 대한 악평을 쓰신 분들에게는 아무말도 하지 않겠습니다.
(그와 관련된 글을 몇번 썼다가, 지웠다가 했지만, 똑똑하신 여러분들의 이야기가 다 맞겠지요. ^^; 물론 제가 실수한 부분도 있긴 합니다. ㅋㅋ 2쇄에서 수정된 부분과 오타에 대해서는 조만간 정리 해서 올리겠습니다.)

드리는 말씀 5
제 책을 앞으로 사실 분들에게는 몇 마디만 말씀 드리겠습니다.
(참고로 저는 초급, 중급, 고급 개발자의 기준은 모르겠습니다만 저는 제가 고급은 안되고, 중급 정도는 된다고 생각합니다. 초보는 아니니까 ^^)
본인이 고급이라고 생각하시는 분들중 성능에 대한 정리를 하고 싶은 분만 구매하셨으면 합니다.
절대 제 책은 고급 분들을 위한 책이 아닙니다. 제가 고급이 안되기 때문에 제가 쓴 책을 고급 분들이 보시면 안돼겠지요.
이제 갓 자바를 배우고 실무를 시작하시려는 초보 분들이라던지, 어느 정도 개발 경험이 있는데 자바 성능에 대한 궁금증을 어느 정도 확인하고 싶은 분들이 제 책을 구매하시기 바랍니다.
제가 책을 쓴 이유중 하나가 이겁니다. 매번 프로젝트에 갈때마다 로그 빼라, 스트링 잘써라 등등을 반복하는 것이 너무나 힘들고 싫었습니다. 그런 내용을 쓰다보니 자바 초보 분들을 위해서 기본적인 API에 대한 설명을 넣어야 이해가 쉽겠더군요.

제 책은 웹 시스템에서의 WAS에서 성능에 영향을 주는 부분을 어떻게 코딩해야 하는지를 정리한 책입니다. WAS자체를 개발하고, 코어 부분을 튜닝하는(0.01 ms가 중요한 그런)분들이 읽어야 하는 그런 책이 아닙니다. 그런 분들은 자바 언어 스펙 (번역본이나 원서), 이펙티브 자바, 자바 퍼포먼스 튜닝(한빛에 번역서가 있습니다.)등을 읽으시면 더 도움이 많이 될것 같습니다.

긴 글 읽어 주셔서 감사합니다.

PS : 만약 "자바 성능을 결정짓는 코딩 습관과 튜닝 이야기"의 5쇄가 나온다면,
"자바 성능을 결정짓는 코딩 습관과 튜닝 그 두번째 이야기"로 보다 심도 깊은 이야기를 할까 생각하고 있습니다. ^^;
  
Posted by tuning-java
내용 및 기획 의도 :
IBM 기반의 서버에서 WAS를 운영하거나, 자바 기반의 웹 시스템을 개발할 때 메모리 문제가 발생하면 대부분의 개발자나 서버 운영자들이 많이 난처해 합니다.
그러한 개발자분들의 고생을 조금이라도 덜어주기 위한 Dump analyzer의 설치부터 사용법을 소개함으로써,
문제를 빨리 해결하고 개발에 좀더 집중할 수 있는 기회를 제공해 드리기 위해서 이 가이드를 만들게 되었습니다.

이 가이드는 Dump Analyzer 를 다운로드 하는 방법부터 설치, 사용하는 방법까지 정리해 놓았습니다.
그리고, 음성을 녹음하기엔 좀 쑥스러워서 자막으로 처리했습니다.

첫번째 동영상은 다운로드 방법입니다.

두번째 동영상은 IBM Support Assistant 설치 방법입니다.

세번째 동영상은 덤프 분석기를 IBM Support Assistant 에 설치하는 방법 동영상입니다.
 

네번째 동영상은 덤프 분석기를 수행하는 동영상입니다.
실제 수행시키면 엄청나게 오래 수행됩니다.


마지막 동영상을 통하여 분석된 내용이 어떻게 제공되는지를  확인합니다.


참고 문서 목록 :
Java diagnostics, IBM style, Part 1: Introducing the IBM Diagnostic and Monitoring Tools for Java - Dump Analyzer
http://www.ibm.com/developerworks/java/library/j-ibmtools1/
Memory leak detection and analysis in WebSphere Application Server: Part 1: Overview of memory leaks
http://www.ibm.com/developerworks/websphere/library/techarticles/0606_poddar/0606_poddar.html
WebSphere Application Server에서의 메모리 누수 탐지와 분석: Part 2: WAS에서의 메모리 누수 탐지와 분석 (한글)
http://www.ibm.com/developerworks/kr/library/0608_poddar/0608_poddar.html
Posted by tuning-java
Head First Software Development 라는 책의 감수를 하고 있다.

번역을 시작한지는 좀 되었는데, 번역 기한은 좀 지났고, 하루에 거의 한 챕터씩 리뷰를 해 주고 있다.

Head First 책을 몇번 간단히 훑어 보긴 했지만, 이렇게 상세하게 읽어본적은 별로 없었지만,
정말 책을 오랜 시간에 걸쳐서 치밀하게 구성되어 있다는 느낌을 많이 받는다.

그래서 잘 팔리긴 하지만...

소프트웨어 개발이라는 분야에 대한 사람들의 관심이 많은지는 모르겠지만,
Head First Java 만큼 잘 팔리지는 않겠지...

여하튼 올해 내로는 나올 것 같으니,
Head First Software Development의 번역본을 기다리는 분들은 조금만 더 기다려 주시기 바란다.

근데 Head First SQL 보다는 번역해야 하는 양이 비교가 안되는듯...
Posted by tuning-java

주의 : 이 툴로 인해서 발생하는 문제는 제가 책임을 안집니다.
이 툴에 대한 불만이 있으시면 과감히 본인의 PC에서 삭제를 해주시고,
제가 명시하지 않은 버그가 있다면 댓글에 달아주시면 확인하고 조치하도록 하겠습니다.
반드시 이 글을 다 읽은 후에 사용하시기 바랍니다.

vmstat로 로그를 남기면, 중간중간에 필요 없는 제목이라던지, 제목 헤더 정보를 정리하기 귀찮을 때가 많이 있다.

그러한 단점을 보완하기 위해서 vmstat manager를 만들게 되었다. (2005년에 만들어 놓고 사용하다가, 올해 4월에 수정한 이후로 아직 보완은 하지 않고 있다.)

SWT를 사용했고, JDK 5.0 이상에서 컴파일을 했기 때문에 이 툴을 사용하기 위해서는 되도록이면, JDK 6.0 이상을 사용해야 한다. (제가 갖고 있는 JDK 5.0의 update 버젼이 높기 때문에 안된다는 분들이 몇분 계시더군요.)

윈도는 암꺼나 사용해도 되지 않을까 생각된다.
HP, IBM, Sun, Linux, Mac 등에서 나오는 모든 vmstat가 분석 가능 할 것으로 판단된다.


첨부 파일의 압축을 풀어 run.cmd파일을 실행하여 프로그램을 시작하면 다음과 같은 화면이 나타난다.

여기서 파일 메뉴의 "로그파일 열기..."을 누르면 로그파일을 선택할 수 있는 창이 나타난다. vmstat 로그를 선택한다. 그럼 아래와 같은 화면이 나타나야 한다.

여기서 로그를 찍기 시작한 시간과 로그 남긴 주기를 Drop down 메뉴에서 선택한다.
그 다음 중요한 것이 필요없는 부분을 삭제하는 건데, 위의 예와 같이 되어 있을때...

System Configuration: lcpu=16 mem=31488MB

kthr    memory              page              faults        cpu   
----- ----------- ------------------------ ------------ -----------
r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
2  1 7022690 520427   0   2   0   0    0   0 1366 13820 2866 31  2 58  8
3  0 7018965 524126   0   1   0   0    0   0 1149 16379 2925 29  2 64  5

System.... 요 줄은 그냥 "선택행 삭제"를 눌러서 지우고,
kthr   memory ... 이 있는 줄과, ----- ---- 가 있는 줄은 반복되는 행이므로 "선택행과 같은 모양의 반복되는 행을 삭제"를 눌러서 지워야 한다.
반드시 행을 클릭하기 바란다. Check box를 클릭하면 오류가 발생하기 때문에...
(아직 이 부분에 대한 오류 수정하지 않았고, 앞으로도 언제할 지 모른다...)

그리고 절대로 r b avm등의 제목줄을 지워서는 절대 안된다.

그런 후에, Generate 버튼을 누르면 아래와 같은 화면이 나타나는데 변경된 내용을 저장할 것인가를 묻는 부분이다.
저장하고 싶으면 OK 싫으면 취소를 누르면 된다.(엎어쓰지 않으니 걱정 마시고...)

정상적으로 수행이 되었으면, 위와 같은 화면이 나타난다.

그래프를 그리고 싶은 항목을 왼쪽에서 선택후 "전체 구간으로 그래프 생성"을 누르면 전체 시간의 그래프를 그려주고,
오른쪽 화면에서 선택을 하고,"선택한 구간으로 그래프 생성"을 누르면 선택한 구간만의 그래프를 그려준다.

전체 데이터를 엑셀로 옮기고 싶다면 "Excel Export"를 누르면 된다.

로그 그래프는 보고 싶으면 보셔도 되는데, 아직 오류가 많아서 별로 추천하고 싶지 않다.
이 부분에 대한 업그레이드 예정도 아직 엄따.
그냥 엑셀로 저장해서 사용하기 바란다. ^;

Posted by tuning-java
제목 그대로 멀캠에서 진행하기로 한 자바 성능을 거시기 과정의 강의가 취소 되었다.

휴가철에 강의를 계획한거 자체가 실수인듯 하다.

요즘 심신이 편치 않은 상태라서, 오히려 잘 된 듯 하다.

9월달에 강의해 달라고 하고는 있지만,

왜이리 귀찮지???

책이나 열심히 써야지~~~ ㅋㅋ

근데, 대전은 너무 덥다~~~
Posted by tuning-java
8월 11일부터 3일간 삼성 멀티캠퍼스에서 내 책을 교재로 하는 자바 성능 튜닝과 관련된 과정이 개설된다.
분기당 한번씩 저자 직강으로만 하기로 했는데, 이번에 해보지도 못하고 없어지는건 아닌지 모르겠다.

과정 설명은 아래 링크 참조.

http://www.multicampus.co.kr/education/course.do?method=detail&classify_code=000100100000&course_code=39775


근데, 휴가기간이라 신청한 사람이 별로 없는듯...
5명은 넘어야 과정이 개설될텐데... - -;

괜히 과정 만들자고 했나 ???

Posted by tuning-java
http://www.j2eestudy.co.kr/lecture/lecture_read.jsp?table=j2ee&db=lecture0201_1&id=24

금일 세미나 수강생중 한분이 쓰레드 덤프를 어떻게 분석하는지에 대한 질문을 하셔서,

관련 자료를 찾다가 가장 적절한 내용이기에 링크를 정리해 둔다.

조대협님이 정리하신 내용인데,
정말 상세하고 잘 되어 있다.

근데...

개발자 분들은 직접 분석하려고 하는 것 보다는,
WAS 엔지니어나 서버 엔지니어 분들께 분석을 요청 드리는 것이
가장 빠르고, 현명하고, 간편하고, 머리 안아픈 방법이라는 것을 명심해 주기 바란다.
Posted by tuning-java
http://ukja.tistory.com/category/Enterprise%20Java

이 글을 작성하신 분께서는 JVM 떄문에 단단히 고생하신것 같다. ^^;

제 책에 있는 메모리 부분에 대한 설명을 읽은 후 이 블로그에 있는 글을 읽으시면 굉장히 많은 도움이 되겠네요.

특히 IBM JVM의 가장 큰 문제인 Compaction 문제에 대해서도 정리가 잘 되어 있다.
Posted by tuning-java
http://www.ibm.com/developerworks/kr/library/au-javaonaix_memory.html

AIX 서버 (IBM JVM을 사용하는 서버)에서 자바 관련 문제가 발생되었을때 해결방안이 정리되어 있다.

그중 가장 마음에 드는 구절은 다음 부분이다. ^^;

메모리 문제는 매우 복잡하고, 해결하기도 매우 어려우며, 진단에도 많은 시간이 요구됩니다. 메모리 관련 문제들은 다음과 같은 이유로 인해 해결하기 매우 어려운 작업입니다.

  • 부적절하게 튜닝 된 OS나 JVM
  • 부적절하게 객체를 관리하는 자바 애플리케이션
  • 부적절하게 할당된 큰 객체 또는 중첩 객체들
  • 단편화(Fragmentation)
  • JNI/네이티브 코드에서 올바르게 릴리스 되지 못한 메모리
  • JVM 메모리 할당과 사용에 대한 이해의 부족

ㅋㅋㅋ

Posted by tuning-java



2008년 7월 18일 OKJsp 와 함께하는 세미나에서 발표할 자료입니다.

원본을 PDF로 변환하였습니다.

상황에 따라서 내용이 변경될 수 도 있습니다.

여기에 있는 모든 내용은 불펌하시면 안됩니다. ^^;

만약 가져가실 경우 출처를 명시해 주시기 바랍니다.

(뭐 가져가셔도 별 필요는 없겠지만.. ㅋㅋ)

컬러판은
http://www.slideshare.net/javatuning/okjsp-performance-and-java-tuningv20080702/
에서 확인하실 수 있습니다.

Posted by tuning-java

http://www.jennifersoft.com/46/forum/page/3/show/1130.html

메모리 릭을 발생시키는 원인은 무척 많지만,
Oracle의 OCI를 사용할때 C Heap이 계속 누적되어 OutOfMemoryError가 발생할 수 있다고 한다.

데이터 건수가 적을때는 조금씩 쌓여도 간에 기별도 안가겠지만,
화면에서 제대로 처리하지 못하고 3만, 10만건을 조회하다가 오류가 발생하면 이러한 문제가 발생할 수도 있다.


 

Posted by tuning-java
http://java.sun.com/j2se/javadoc/writingdoccomments/

자바로 개발하다 보면, 주석을 잘 정리하지 않는 경우가 있는데
-나중에 내가 이 메소드를 왜 만들었는지,
-무슨 역할을 하는 클래스인지
를 기억 못하는 경우가 종종 있다.

그리고 추후에 Java doc 문서를 만들때 필요한 요소들을 모르면 제대로 된 문서가 생성되지 않는다.

위에 있는 링크를 참조하여, 반드시 자신의 클래스에 주석을 다는 버릇을 들이자.
특히 이 버릇은 정말 고치기 힘들다.

참고로 eclipse에서는 comment를 달기 위해서 해당 메소드나 클래스의 블록 안에서 Alt+Shift+J 를 누르면, 기본적인 주석이 생성된다.

public class A {
  //지점 1
  public void methodB () {
    //지점 2
  }
}

즉 지점 1에서 단축키를 누르면 클래스의 주석이 자동 생성되고,
지점 2에서 단축키를 누르면 메소드의 주석이 자동 생성된다.
Posted by tuning-java

자바 API에 있는 java.util.regex 패키지의 Pattern 클래스를 보면 정규식을 표현하는 Construct가 나와 있다.
http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html

아래 내용은 Java JDK에 있는 내용을 재 정리 한것이다. (시간이 되면 번역을 할까 생각중인데, 궂이 그럴필요가...)

가장 먼저 특수 문자에 대해서 알아보자. 각각의 8진수, 16진수, tab, 이스케이프 문자등을 나타내기 위해서는 다음과 같이 사용하면 된다.

x The character x
\\ The backslash character
\0n The character with octal value 0n (0 <= n <= 7)
\0nn The character with octal value 0nn (0 <= n <= 7)
\0mnn The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhh The character with hexadecimal value 0xhh
\uhhhh The character with hexadecimal value 0xhhhh
\t The tab character ('\u0009')
\n The newline (line feed) character ('\u000A')
\r The carriage-return character ('\u000D')
\f The form-feed character ('\u000C')
\a The alert (bell) character ('\u0007')
\e The escape character ('\u001B')
\cx The control character corresponding to x

그 다음에는 문자를 표현하는 방식을 보자. 특정 범위의 문자나 범위 이외의 문자는 다음과 같이 표시한다.

[abc] a, b, or c (simple class)
[^abc] Any character except a, b, or c (negation)
[a-zA-Z] a through z or A through Z, inclusive (range)
[a-d[m-p]] a through d, or m through p: [a-dm-p] (union)
[a-z&&[def]] d, e, or f (intersection)
[a-z&&[^bc]] a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]] a through z, and not m through p: [a-lq-z](subtraction)

위의  방식을 사용하여 정의할 수도 있겠지만, 다음과 같이 미리 정의된 문자열을 사용하면 보다 편하게 사용 가능하다.

. Any character (may or may not match line terminators)
\d A digit: [0-9]
\D A non-digit: [^0-9]
\s A whitespace character: [ \t\n\x0B\f\r]
\S A non-whitespace character: [^\s]
\w A word character: [a-zA-Z_0-9]
\W A non-word character: [^\w]

그리고, POSIX 문자열을 사용할 경우에는 다음과 같이 정의할 수 있다.
(참고로 POSIX가 뭔지 모르시는 분은 http://ko.wikipedia.org/wiki/POSIX 를 참조하시면 쉽게 이해 될것이다.)

\p{Lower} A lower-case alphabetic character: [a-z]
\p{Upper} An upper-case alphabetic character:[A-Z]
\p{ASCII} All ASCII:[\x00-\x7F]
\p{Alpha} An alphabetic character:[\p{Lower}\p{Upper}]
\p{Digit} A decimal digit: [0-9]
\p{Alnum} An alphanumeric character:[\p{Alpha}\p{Digit}]
\p{Punct} Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph} A visible character: [\p{Alnum}\p{Punct}]
\p{Print} A printable character: [\p{Graph}\x20]
\p{Blank} A space or a tab: [ \t]
\p{Cntrl} A control character: [\x00-\x1F\x7F]
\p{XDigit} A hexadecimal digit: [0-9a-fA-F]
\p{Space} A whitespace character: [ \t\n\x0B\f\r]

자바의 Character 클래스와 같은 방식으로 사용하려면 다음과 같이 사용 가능하다.

\p{javaLowerCase} Equivalent to java.lang.Character.isLowerCase()
\p{javaUpperCase} Equivalent to java.lang.Character.isUpperCase()
\p{javaWhitespace} Equivalent to java.lang.Character.isWhitespace()
\p{javaMirrored} Equivalent to java.lang.Character.isMirrored()

유니코드를 처리하기 위해서는 다음과 같이 사용하면 된다. (한글에 대해서는 아직 테스트 해보지 않았다. ^^)

\p{InGreek} A character in the Greek block (simple block)
\p{Lu} An uppercase letter (simple category)
\p{Sc} A currency symbol
\P{InGreek} Any character except one in the Greek block (negation)
[\p{L}&&[^\p{Lu}]]  Any letter except an uppercase letter (subtraction)

각 경계값을 나타내는 것은 다음과 같이 할 수 있다.

^ The beginning of a line
$ The end of a line
\b A word boundary
\B A non-word boundary
\A The beginning of the input
\G The end of the previous match
\Z The end of the input but for the final terminator, if any
\z The end of the input

이제부터 정신을 바짝 차려야 하는데, 위의 각 방법을 조합해서 각 문자의 횟수를 다음과 같이 지정할 수 있다.
(이를 Greedy quantifiers라고 부른다.)

X? X, once or not at all
X* X, zero or more times
X+ X, one or more times
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times

그리고, ? 와 +를 사용하여 각각 제외 및 포함의 의미를 나타낸다. 각 예는 다음과 같다.

Reluctant quantifiers
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}? X, exactly n times
X{n,}? X, at least n times
X{n,m}? X, at least n but not more than m times

Possessive quantifiers
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+ X, exactly n times
X{n,}+ X, at least n times
X{n,m}+ X, at least n but not more than m times

논리 부분은 다음과 같이 표시한다.

XY X followed by Y
X|Y Either X or Y
(X) X, as a capturing group

특수 Construct는 다음과 같다.

(?:X) X, as a non-capturing group
(?idmsux-idmsux)  Nothing, but turns match flags i d m s u x on - off
(?idmsux-idmsux:X)   X, as a non-capturing group with the given flags i d m s u x on - off
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?<=X) X, via zero-width positive lookbehind
(?<!X) X, via zero-width negative lookbehind
(?>X) X, as an independent, non-capturing group

기타 관련 Construct들은 다음과 같다.

Back references
\n Whatever the nth capturing group matched

Quotation
\ Nothing, but quotes the following character
\Q Nothing, but quotes all characters until \E
\E Nothing, but ends quoting started by \Q

이 내용들에 대해서는 한번 쭉~~~ 읽어보면 이해가 되겠지만, 예제를 봐야지만 보다 더 쉽게 이해할 수 있으리라 생각된다.

다음 글에는 예제를 통해서 각 Regular Expression을 어떻게 사용하는지 정리하도록 하겠다.

Posted by tuning-java

String 데이터를 처리하기 위한 코딩을 할 때 알아두면 굉장히 도움 되는 것이 Regular Expression이다.

이게 뭔지도 모르신다면, 아래의 링크를 따라가서 한번 읽어 보시기를 권장한다.

http://java.sun.com/docs/books/tutorial/essential/regex/index.html

예를 들어 e-mail 주소나 URL의 정합성을 체크할 때 굉장히 편하게 사용할 수 있다.
Regular Expression을 주로 사용하는 언어들은 grep, Perl, Tcl, Python, PHP, awk 등이 있다.

Java 에서도 JDK 1.4 버젼부터 Regular Expression을 사용하기 시작했으며, java.util.regex.Pattern 클래스의 API 를 보면 Regular Expression에서 사용되는 패턴 구성을 볼 수 있다.

참고로,이미 만들어진 Regular Expression 들을 참조하고 싶다면, 아래의 사이트를 방문하기 바란다.
http://regexlib.com/

그럼 간단하게 Java를 이용해서 Regular Expression을 사용하는 방법에 대해서 알아보자.

import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexTester {

    public static void main(String[] args){
        RegexTester rt=new RegexTester();
        while(true) {
            rt.checkRegularExpression();
        }
    }
    public void checkRegularExpression() {       
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter Regular expression pattern : ");
        String regex=sc.nextLine();
        while(check(regex));
    }
    public boolean check(String regex) {
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter data: ");
        String data=sc.nextLine();
            Pattern samplePattern = Pattern.compile(regex);
            Matcher matcher = samplePattern.matcher(data);
            boolean found = false;
            while (matcher.find()) {
                System.out.format("Text \"%s\" is found : from index %d - to index %d.\n",
                    matcher.group(), matcher.start(), matcher.end());
                found = true;
            }
            if(!found){
                System.out.format("No match found.\n");
            }
            System.out.print("Check another data ? [Y or y] or Quit [Q or q] : ");
            String another=sc.nextLine();
            if(another.equals("Q") || another.equals("q")) {
                System.exit(0);
                return false;
            } else if(another.equals("Y") || another.equals("y")) {
                return true;
            } else {
                return false;
            }
    }

}

이 프로그램은 Regular Expression을 입력하고, 문자열을 입력하면 입력된 문자열중 Regular Expression과 맞는 (match되는) 문자열이 어떤것이 있는지를 화면에 뿌려준다.

실행 결과 예는 다음과 같다.

Enter Regular expression pattern : [abc]
Enter data: abcdefg
Text "a" is found : from index 0 - to index 1.
Text "b" is found : from index 1 - to index 2.
Text "c" is found : from index 2 - to index 3.
Check another data ? [Y or y] or Quit [Q or q] : y
Enter data:
No match found.
Check another data ? [Y or y] or Quit [Q or q] : y
Enter data: cbfhgft
Text "c" is found : from index 0 - to index 1.
Text "b" is found : from index 1 - to index 2.
Check another data ? [Y or y] or Quit [Q or q] : q

다음 글에는 Regular Expression을 어떻게 지정하는지 알아보자.

Posted by tuning-java

책이 나온지 거의 두달 되어가니 여러분들의 이야기들이 블로그에 올라와 있다.

좋은 리뷰도 있고, 좋지 않은 리뷰도 있네요. 모든 의견이 중요하다고 생각합니다.

단지, 이 책에서 부족하다고 생각들 하시는 튜닝의 기법이라든지, 툴에 대한 자세한 내용은 다음 책을 위해서 아껴 두었다고 너그럽게 생각해 주시면 감사하겠습니다.

이 책을 사려는 분들이나, 다양한 의견을 공유하시려는 분들은 아래의 링크를 클릭해 보시면 됩니다. ^^;

<<<<< Yes24 사이트의 주옥같은 리뷰들 보기 >>>>>

최종 update date : 2008. 05. 10.

Posted by tuning-java

IBM developerWorks 뉴스레터를 보다가 괜찮은 글을 하나 발견했다. 링크는 아래에...

http://www.ibm.com/developerworks/kr/library/dwclm/20080408/

내 생각도 이 글의 필자와 크게 다르지는 않다. 

예전부터 해온 생각이 "굳이 이렇게 자바를 확장할 필요가 있을까? "라는 것이다.

지금까지의 자바를 보다 안정적이고, 보다 빠르게 개선하는 것이 더 중요하다고 생각한다.

프로그래밍 언어의 버젼이 개발툴 버젼처럼 지속적으로 빠르게 올라갈 필요는 없다고 생각한다.

오히려 그 언어를 사용하는 "프레임웍"들을 보다 더 좋게 향상 시키는 것이 낫지 않을까?

Posted by tuning-java
TAG java, 자바

이제 메인 화면에서 다른 화면으로 전환하는 Activity를 만들어보자.

(아마도 제가 쓰는 글을 계속 읽어오신 분들은 이 부분에 대해서 많이 궁금해 하셨을 것이라 생각한다. 그리고 물론 쉽지도 않다.)

다음과 같이 클래스를 하나 맹근다.

이제, 다음과 같이 소스를 작성하자.

package com.min.summary.layouts;

import android.app.Activity;
import android.os.Bundle;

import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.RelativeLayout;
public class RelativeTest extends Activity {
    RelativeLayout relativeLayout;
    LayoutParams lpFillFill=new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        relativeLayout=new RelativeLayout(this);
        relativeLayout.setLayoutParams(lpFillFill);
        setContentView(relativeLayout);
    }
}

그럼 바로 앞서 만든 MainButtonManager 클래스의 setButtons() 메소드에 다음과 같은 버튼을 만들자.

        Button relBut=new Button(parent);
        relBut.setText("Show relative layout");
        relBut.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                Intent intent = new Intent(parent,com.min.summary.layouts.RelativeTest.class);
                parent.startActivity(intent);

            }
        });
        parentLayout.addView(relBut, lpFillWrap);

intent 객체를 만들어서 부모에서 startActivity 메소드에 intent 객체를 넘겨주면 된다.
(정확하게 이렇게 intent객체를 만드는 이유에 대해서는 좀더 공부해 봐야겠다.)


이제 한번 실행해 볼까?

새로 추가된 버튼이 추가되었다. ㅋㅋ

한번 눌러보자.

어라? 이게 뭐야?
에러가 난다. 에러를 잘 읽어보자.


AndroidManifest.xml 파일에 내가 추가한 클래스를 선언한걸 못찾겠단다.
하래면 해야지머...

AndroidManifest.xml 파일을 더블클릭하면, 안드로이드 어플리케이션 설정 화면이 나타난다.
거기서 두번째 탭에 있는 Application을 클릭하자.
하단에 있는 Appilcation Nodes 에서 "Add..." 버튼을 클릭하자.
그 다음 나타나는 팝업 화면에선 Activity를 클릭하자.

여기서 일단 돌아가게하려면 입력해야 하는건 달랑 하나~~ "Class Name*" 이라고 되어 있는 곳에서 "Browse" 버튼을 클릭한다.

마지막으로 해야하는 것은 새로 만든 .layouts.RelativeTest 를 추가하는 것 뿐이다.

결과는 다음과 같다.

까만화면이닷~~~. - -;

왜냐하면, 아무것도 RelativeLayout에 추가하지 않았기 때문이다.

그러면 다음 글에는 RelativeLayout을 사용하는 방법에 대해서 알아보자.

Posted by tuning-java

Eclipse를 사용하여 Spring MVC 을 구현하는 것에 대해서 알아보자.

일단 가장 먼저 Eclipse에서 Dynamic Web Project를 맹글자.
(이 부분은 다 알고 있으리라 생각하고 패쑤~~)

그 다음 맹글어진 프로젝트에서 WebContents 밑에 있는 web.xml을 열자.
web.xml 파일의 </web-app> 태그 위에 아래의 내용을 복사하여 붙이자.
-------------------------------------------------------------------
<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>
   org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
    /WEB-INF/action-servlet001.xml
   </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
------------------------------------------------------------------------
잘 붙였으면, 간단하게 내용을 살펴보자.
DispatcherServlet은 말 그대로 Servlet 클래스이기 때문에 web.xml에 추가한 것이고,
앞으로 모든이름.do를 호출하면 이와 관련된 클래스가 호출될 것이다.
중간에 action-servlet001.xml이라는게 아직 없다.
없으니 만들자...

WEB-INF 디렉토리 하단에 action-servlet001.xml 을 다음과 같이 만들자.
------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans  
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-2.5.xsd">

 <bean id="handlerMapping"
  class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
 
 <bean name="/test.do"   class="test.TestController">
  </bean>

</beans>
-----------------------------------------------------------------------------------
내용은 모른다고 치더라도 test.TestController 라는 클래스가 필요하다고 느낄것이다.
웹에서 test.do를 수행하면 해당 컨트롤러 클래스가 호출될 것이다.

test.TestController 클래스는 다음과 같다.
----------------------------------------------------------------------------------
package test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class TestController implements Controller {
 public ModelAndView handleRequest(HttpServletRequest request,
   HttpServletResponse response) throws Exception
{
  System.out.println("TestController ==> handleRequest");
  return new ModelAndView("redirect:/index.html");
 }
}
-------------------------------------------------------------------------
이 소스에서는 다른 일은 안하고 "TestController ==> handleRequest"를 프린트하고
index.html로 forwarding 하도록만 되어있다.
그럼 마지막으로 이클립스의 WebContents 폴더 하단에 index.html을 하나 생성하자.
html의 body에는 다음과 같이 한번 넣어볼까?
-------------------------------------------------------------------------
<body>
Thank you for follow this tutorial. hahaha.
</body>
-------------------------------------------------------------------------
그럼 이제 코딩해야 할일은 다 끝났다.

하지만 두가지 일이 남아있다.
만든 클래스가 이클립스의 build 폴더에 생성이 되어있지 않으니,
eclipse 메뉴에서 Project --> Build All을 클릭하여 클래스를 빌드해야 한다.
(뭐~ 이게 자동으로 될 수도 있다.)

또 한가지 남은 것은
WEB-INF 하단의 lib 폴더에 Spring framework과 관련된 모든 jar를 집어 넣어 줘야 한다.
(이 방법도 여러분만의 방법이 있을 테니 자세한건 패스하고...
가장 간단한 것은 익스플로러에서 모든 jar를 선택하고 eclipse에 끌어 넣어주면 된다.)

정상적으로 작업이 되었다면
tomcat을 띄워서 해당WebApp/test.do 를 실행해보자.
Tomcat의 console에
"TestController ==> handleRequest"
가 출력되고,
화면에
Thank you for follow this tutorial. hahaha.
가 나타났다면,
초 간단 Spring MVC Framework 실습이 완료된 것이다.

이제 천천히 어려운 부분을 공부해 보자.

Posted by tuning-java

일단 본론에 들어가기 전에 MVC에 대해서는 다 알꺼라 생각한다. 몇줄만 적어보면

MVC는 Model, View, Controller의 약자로 예전의 UI, DB처리, 비즈니스 로직을 하나의 클래스나 파일에서 처리하던 것을 분리하는 것을 말한다.

간단하게 몇줄만 적었다. ㅋㅋ
그럼 Spring MVC 프레임웍에서 어떻게 사용자 요청이 처리되는지 알아보자.

1. 사용자의 요청이 오면 DispatcherServlet이라는 것이 받는다. 얘를 앞단 중계자라는 의미로 Front Controller라고 부른다.
2. 받은 것을 뭔가 매핑이 되어 있는 곳에서 적절한걸 찾아서 다른 곳으로 전달한다. 이 것을 핸들러라고 한다.
3. 전달 받은 데이터를 기반으로 DB에서 데이터를 얻어온 다음에 ModelAndView라는 객체에 저장해서 넘긴다고 한다.
4. 그 다음 DispatcherServlet이라는 놈에서 화면에 보여줄 View 와 Model 정보를 View Resolver라는 것을 통해서 View를 결정한다.
5. 해당 View에 데이터를 넘기고, View에서는 화면을 처리한 결과를 DispatcherServlet으로 넘긴다.
6. 마지막으로 화면으로 보내준다.

이 내용을 그림으로 표현한 것이 바로 아래 링크에 있다.
http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html
마우스 스크롤이 어떻게 되어 있느냐에 따라서 다르겠지만, 한 3번 정도 스크롤하면 볼 수 있다. ^^;

자세한 구현 방법은 다음 글에 올리도록 하겠다.

Posted by tuning-java
만약 여러분의 클립보드에 다음의 내용이 있다고 치죠. (아래의 내용을 복사하거나 Ctrl-C 를 누른 경우)
//내용 시작
package test;
public class Test {
}
//내용 끝

이클립스에서 src 를 누른 후 Ctrl-V를 눌러보자.

그럼 짜잔~~~
하고 여러분의 이클립스에 클래스가 하나 추가되면서, 그 내용이 에디터에 나타날 것입니다.


Posted by tuning-java
자바의 어노테이션이란 것이 JDK 5.0 부터 생겨났기 때문에,
예전부터 자바를 하신분들은 이해하기가 다소 어려울 수 있다.
그럼 어노테이션이란건 왜 만들어서 사람을 귀찮게 할까 ?
궁금하다면, 다음의 글을 읽어보자.
(참고로 한글이다....)

http://www.ibm.com/developerworks/kr/library/j-annotate1/index.html


http://www.ibm.com/developerworks/kr/library/j-annotate2.html
Posted by tuning-java
* Test.*(..)
[리턴타입] [패키지.클래스].[메소드명](매개변수의 타입])
여기서는 모든 리턴타입을 갖는 Test 클래스의 모든 매개변수 타입의 모든 클래스에 적용하라.

여기서 *은 all 이라는 의미가 된다. 즉 Test.* 이라는 것은 Test 클래스의 모든 메소드를 처리하라는 의미가 되고, 다음과 같이 사용할 수 있다.

void Test.hello(..)
void Test.hello*(..)
void Test.hello(int,String)

hello* 이라는 것을 보면, 모든 hello로 시작하는 메소드에 대해서 처리하라는 의미가 된다.

그리고 매개 변수의 타입에서 ..을 쓰면 모든 매개변수 타입에 대한 처리를 하게 되고, 원하는 타입을 명시할 수도 있다.
Posted by tuning-java
먼저 아래의 간단한 소스를 읽어 보자.

package proxytest;
public interface ITempLogic {
 public String greet();
}
----------
package proxytest;
public class TempLogicImpl implements ITempLogic {
 public String greet() {
  return "Hi";
 }
}
----------
package proxytest;
public class TempLogicProxy implements ITempLogic {
 private ITempLogic itl=null;
 public TempLogicProxy(ITempLogic l) {
  itl=l;
 }
 public String greet() {
  System.out.println("before");
  String r=itl.greet();
  System.out.println("after");
  return r;
 }
 public static void main(String args[]) {
  ITempLogic l=new TempLogicProxy(new TempLogicImpl());
  System.out.println(l.greet());
 }
}
----------
 간단하게 소스에 대해서 설명을 하자면,
 ITempLogic이라는 인터페이스를 하나 만들고,
 해당 인터페이스를 구현한 TempLogicImpl 이라는 클래스를 하나 만들었다.
 구현된 TempLogicImpl 이라는 클래스를 감싸주는 TempLogicProxy라는 클래스를 만들어 주어서 그 클래스에서 TempLogicImpl을 대행하여 수행해준다.

Posted by tuning-java

AOP : Aspect Oriented Programming

관점지향 프로그래밍이다. 어플리케이션을 OOP 관점으로 모듈화하여 작성해도 다른 모듈에서 발생하는 횡단 관심을 해결하기 위한 방법이다.

횡단 관심 : 로깅 보안, 트랜젝션등 부가 기능을 의미하며,
기존의 프로그램을 최대한 수정하지 않고 원하는 부가기능을 처리하고자 하는것이다.

AOP로 구현시 핵심 모듈을 건들지 않기 때문에 재사용성과 유지보수성이 쉬워진다.

여기서 AOP의 단점은 성능에 영향을 준다는 것이다.

참고로 횡단 관심을 해결하기 위한 시점은 다음과 같다.

  1. 메소드 호출 이전 시점
  2. Exception이 발생된 시점
  3. 메소드 호출 이후 시점

여기서 시점을 point cut 이라고 하고, 포인트 컷에서 해야하는 동작을 Advice라고 한다.
point cut과 advice를 모아놓은 것을 Aspect 라고 한다.

advice의 종류

  • around advice : org.aopalliance.intercept.MethodInterceptor - 메소드 수행 전후, Exception을 모두 처리할 수 있다.
  • before advice : org.springframework.aop.MethodBeforeAdvice - 메소드 수행전 작업을 처리할 수 있다.
  • after advice : org.springframework.aop.AfterReturningAdvice - 메소드 수행후 작업을 처리할 수 있다.
  • throws advice : org.springframework.aop.ThrowsAdvice - Exception 발생시 작업을 처리할 수 있다.


결론적으로 AOP를 사용하게되면,
원하는 proxy 기반의 interceptor 를 XML 기반으로 지정할 수 있게 되고,
XML에 지정된 bean을 사용하도록 소스를 변경해 주면 proxy에서 처리하는 부분을 사용할 수 있다.

참고로 Spring 에서는 이러한 Aspect를 Java로 구현하기 위해서 다음과 같은 방법을 사용한다.
방법 1 : 스키마 기반의 구현
방법 2 : Anotation을 이용한 구현

Posted by tuning-java

IoC는 Inversion of Control 의 약자이다.
이는 프레임웍에서 클래스의 객체를 관리하는 구조라고 생각하면 된다.

IoC의 구현 방법은 DL과 DI 두가지가 있다.
DL : Dependency Lookup
DI : Dependencty Injection

DL은 JNDI를 이용하여 Lookup 하는 방식을 말하고, DI는 각 오브젝트에서 의존적인 resource나 collaborator에 대한 책임을 갖지 않고 컨테이너가 그 일을 담당하도록 하는 것이다.

DI는 다음과 같이 두가지로 나뉜다.
Setter Injection
Constructor Injection

Setter Injection은 JavaBeans의 Property 구조를 이용하며, 주로 이 방법을 사용한다. 두가지 중 어떤 방법을 사용할 지에 대해서는 개인의 취향을 따르거나, 프로젝트의 표준을 따라야 한다.


Posted by tuning-java
이클립스가 유로파로 오면서 가끔 개길때가 있다.
다음과 같은 화면이 나타나면서...
사용자 삽입 이미지

이럴때에는 batch 파일을 만들거나,
바로가기를 만들어서 다음과 같이 수정해준다.

C:\eclipse\eclipse.exe -vmargs 512m

여러가지 옵션이 있지만,
이 옵션이 가장 간단하고 편한듯
Posted by tuning-java
여기에 있는 내용은 제가 교육 받으면서 필요한 부분에 대해서 정리를 해 놓은 것 입니다.
굉장히 심도가 얕기 때문에, 자세한 내용은 책을 활용하셔야 겠지요?


Spring Framework (스프링 프레임웍) 이란건 대체 무엇일까?

스프링 프레임웍을 한마디로 표현하자면
EJB 기반으로 개발을 하지 않고 POJO(Plain Old Java Object) 기반으로 개발을 하더라도 가볍고, 제어가 가능한 상호 관련이 적은, AOP (Aspect Oriented Programming. 관점지향 프로그래밍)을 지원하고, 컨테이너를 통해 라이프사이클을 관리하고, XML 기반으로 컴포넌트를 개발할 수 있도록 지원해주는 프레임웍이라고 할 수 있다.

(한마디로 표현하자니까 이해하기도 어려울 듯 하고, 열나 길다 - -;)

스프링 프레임웍은 다음과 같은 7개의 모듈로 되어 있다.
Spring Core
Spring Context
Spring DAO
Spring ORM
Spring AOP
Spring Web
Spring Web MVC

Core : DI 라는 Dependency Injection 기능을 제공한다.
Context : 컨텍스트라는 정보를 제공하는 설정을 관리한다. JNDI, EJB, 국제화, 스케줄링이 여기에 포함된다.
DAO : DB와 관련된 JDBC 코딩 부분을 처리해 주기 위한 JDBC 추상화 레이어를 제공한다.
ORM : JDO, Hibernate, iBATIS 등 O-R Mapping API를 위한 레이어를 제공한다.
AOP : 관점지향 프로그래밍을 제공한다.
Web : 웹 기반의 여러가지 기능을 제공한다.
Web MVC : Model과 View(Web form) 사이의 구분을 제공하기 위한 관련된 기능을 제공한다.

이제 스프링 프레임웍이 어떻게 되었는지 간단히 알아보았으니,
다음에는 IoC 컨테이너 부터 천천히 알아보자.
Posted by tuning-java
윤 머시기 강사가 이야기한

Spring Framework 가 만들어진 이유

Proxy의 불편함 => AOP 의 사용
JDBC의 불편함 => Spring JDBC
Web 프로그래밍의 불편함 => Spring MVC

기타 등등의 지금까지 Java 기반의 프로젝트를 하면서 불편한 점에 대해서
보완을 하기 위해서 만들어 졌다고 한다.
Posted by tuning-java