반응형

Mocha - http://www.brouhaha.com/~eric/computers/mocha.html 
Hanpeter van Vliet's first Java Decompiler. Orphaned at Java 1.02, so crashes on inner classes. [Freeware]

WingDis 2.15 - http://www.wingsoft.com/wingdis.shtml 
Command line Java decompiler. [Commercial]

SourceAgain - http://www.ahpah.com/product.html 
Java Decompiler for Win95/NT, Unix, web-based trial version from Ahpah Software. [Commercial]

Jad - http://www.geocities.com/SiliconValley/Bridge/8617/jad.html 
the fast Java decompiler. Separate versions for Win32, OS/2, most Unixen. [Freeware].

SourceTec Java decompiler - http://www.srctec.com/decompiler.htm 
Patch to Mocha which defeats Crema. [Shareware]

NMI's Java Code Viewer - http://njcv.htmlplanet.com 
The "user-friendly, visual" Java decompiler and disassembler for Win32 platform. [Shareware]

Java Code Engineering - http://www.meurrens.org/ip-Links/Java/codeEngineering/ 
Marc Meurrens' page on engineering & reverse engineering Java class files. Review of books and on line resources on: the Java Virtual Marchine (JVM); code engineering & reverse engineering; class browsers, viewers & editors; assemblers; compilers; disassemblers & decompilers; obfuscators & unobfuscators. Comprehensive, well organized site.

Decafe Pro - http://decafe.hypermart.net/ 
Java Decompiler for Win32 platform. [Commercial]

 Kimera - http://kimera.cs.washington.edu/disassembler.html 
Online Java Disassembler. Just enter an URL of a .class file and it will be disassembled into a form suitable for re-assembly by Jasmin. [Freeware] 

Dumping Class Files - http://professionals.com/~cmcmanis/java/dump/index.html 
Chuck McManis's code to parse class files. [Free for non-commercial].

ClassCracker - http://www.pcug.org.au/~mayon/ 
Visual Java decompiler from Mayon Software Research. [Commercial]

Java Optimize and Decompile Environment (JODE) - http://jode.sourceforge.net/ 
Java decompiler with full source code. Supports inner/anonymous classes. Also contains a small, but extensible bytecode obfuscator/optimizer. [Open Source, GPL]

CafeBabe - http://jfa.javalobby.org/projects/CafeBabe.html 
Graphical disassembler and editor of Java bytecodes. Part of the JFA. [Open Source]

RIIS: Decompiling Java - http://www.riis.com/depile.html 
Godfrey Nolan's book on writing your own Java decompiler may never be published, so early chapters are online in PDF format.

dis - http://www.cs.princeton.edu/~benjasik/dis/index.html 
A functional, fast and simple disassembler that is written in C. Like javap, produces bytecode. Download Solaris, Win95/NT versions. Mac or other Unixen or source code by email request. [Freeware]

BackToJava (BTJ) - http://www.backtojava.org/ 
General tool for manipulation of Java bytecode (disassembly, assembly, statistics, decompilation, debug information...), written in Java. In progress. [Open Source, LPGL]

JReveal.Org - http://www.jreveal.org 
Online decompiler and obfuscator. Also has a resource directory. [Freeware]

IceBreaker - http://www.suddendischarge.com/cgi-bin/antileech.cgi?icebreak10.zip 
(Zip-file) A 'Visual' Java decompiler/disassembler. Allows side-by-side comparison of disassembled byte code from class files, for easier decompilation. "Replete with bugs" and dependent on command-line decompiler, such as Mocha or Javap. [Freeware] 

반응형

1. WTP 구하기
http://www.eclipse.org/webtools/

2. WTP 선택
최신 jdk를 사용하다면 1번에 나온 download페이지를 이용하면 될것이고
만약 jdk1.4를 이용한다면 구버전이 들어있는 download를 이용하면 된다.

사용자 삽입 이미지

WTP 다운로드 페이지


압축만 풀면 바로 eclipse에 WTP가 적용된  wtp-all-in-one 파일을 다운로드 받아서 사용하길 권장한다. 아니면 수동으로 WTP가 필요한 기타등등의 plugin 파일을 설치해야된다.

3. WTP 기능 활용하기.
글쓴이는 dynamic web project만 사용한다. 나머지도 많은데 차차알게되면 써볼것이다.
준비물: jdk 1.4.x
           tomcat 5.5(1.4버전 사용가능한것)
           wtp-all-in-one-sdk-R-1.5.5-200708291442-win32.zip

이클립스 실행
메뉴에서
file -> new -> project -> web -> dynamic web project -> NEXT 클릭
-> Project Name을 넣고 -> New 버튼 클릭
사용자 삽입 이미지

- 톰켓서버 잡아주기.
Apache 트리를 열어 5.5 버전을 선택한다. Next 클릭
사용자 삽입 이미지

톰켓서버 잡아주기


- 톰켓이 설치된 경로를 잡아주고, JRE 선택.
본인이 원하는 jre 선택한다. 1.4대를 사용하고자 하니 default말고 명확하게 1.4버전을 선택하자.
사용자 삽입 이미지

톰켓경로설정, JRE선택


그리고 Finish 클릭 -> Finish 또 클릭 하면 J2EE Perspective 화면 이동 하겠냐고 물어보는 NO를 하고 Java Perspective 화면을 이용한다.

사용자 삽입 이미지

Dynamic Web Project 완성

왼쪽에보면 JRE도 보이고 톰켓 관련 라이브러들도 연결된게 보일것이다.
EAR, Web App Libraries는 아무것도 들어있지않다. 자세한 사항은 J2EE 공부를해야할꺼 같다.
src 폴더는 java 파일이 위치하고 build폴더에 class들이 쌓인다.
WebContents 폴더는 jsp 파일이 위치할 것이다.
WebContents 폴더에 우클릭 -> New -> Other -> Web -> JSP 파일을 선택 Next
file name을  적고 finish 클릭.
<body></body> 테그 사이에 Hello World! 적고 저장한다.

그럼 이제 실행을 해보자 톰켓을 이용해 jsp를 브라우저에서 봐야된다.
메뉴 -> Run -> Run on Server 클릭.
톰켓 5.5환경으로 세팅이 되었는지 확인하고 Next 클릭.

사용자 삽입 이미지

Run on Server


아래 마지막으로 우측에 프로젝트가 존재하는지 확인하고 Finish 클릭.
사용자 삽입 이미지

그럼 브라우저에 Hello World! 가 나타나는것을 확인할 수 있다.
eclipse 안에서 브라우저가 나타날땐 메뉴 -> Windows -> Web Browser -> Default System Web Browser 를 선택하면 된다.
사용자 삽입 이미지


* 디버그 활용하기 *
System.out.println(); 으로 디버깅도 하지만 더 편하게 할 수 있는 방법이 있다.
Run on Server 말고 Debug on Server를 이용하는것이다.

먼저 간단한 debug를 위해 사전에 준비해야 할 작업이 있다. 아래 그림처림
1. test 페키지를 생성하고 첨부된 TEST.java 파일을 넣는다.
2. WebContent 밑에 첨부된 debug.jsp 파일을 넣는다.
사용자 삽입 이미지

debug 연습



3. BreakPoint 찍기
프로그램은 간단하다 10번 카운트 세면서 10번째에 발사! 하는 프로그램이다.
값이 어떻게 변화하는지 debug 를 이용해서 추적할 수 있다면 기초적인 디버그는 완료.
참고로 jsp debug는 톰켓 5.x 이상부터 지원된다고 한다. 4.1 대로 jsp debug를 시도했으나 실패하고 5.5를 설치하고 나서 jsp 디버깅에 성공하였다. (JSP 디버깅은 5.5를 이용하자)

본격적으로 디버깅을 해보자.
디버깅을 하는 이유는 우리가 원하는 값을 변수가 제대로 가지고 있는지 맞게 변화하는지 예외는 어떤 시점에서 발생하는지에 대한 수정을 좀더 쉽고 빠르게 접근하기 위함이다.

다음은 cnt 값의 변화를 살펴보기 위해 BreakPoint를 찍는 화면이다. 찍는 방법은 화면에 표시된 위치 즉 cnt += 1; 구문이 있는 라인에 빨간박스 안을 더블 클릭 하는 방법이다. 그럼 포인트가 찍히게 된다.
사용자 삽입 이미지

BreakPoint


다음은 서버를 디버그 모드로 실행 시키는 것이다.
메뉴 -> Run -> Debug As -> Debug on Server 클릭.
서브창에서 Finish 클릭. 브라우저가 실행되며 이클립스에서 디버그 모드 전환을 물어보는 메시지 박스가 나타나며 Ok 눌러서 디버그 모드로 전환한다.
사용자 삽입 이미지

디버그 모드 전환


화면 우측 상단에 Variables 텝을 보면 cnt 값이 0으로 들어있는게 확인이된다.
하단의 jsp 에디터에는 아까 찍어놓은 BreakPoint에 화살표가 되어있는게 보인다.
마지막으로 브라우저를 살펴보면 연결중 상태로 응답을 기다리는 상태가된다.

위의 화면에서 F6 키를 눌러보도록 하자 그럼 jsp 에디터에서 화살표가 아래로 한줄 내려온다. 그리고 Variables 탭을 살펴보면 값이 1증가되어 Value는 1이 되어 있는게 확인된다.

cnt 값이 10 될때까지 F6을 여러번 눌러면서 cnt 값의 변화와 jsp 에디터에서 화살표의 이동을 살펴보도록 하자. 아래와 같은 화면이 나오면 jsp페이지에서 처리해야할 작업들은 완료되고 서버로 브라우저에서 오는 요청에 대한 응답을 하기위한 작업이라 보면되겠다.
화면 상단의 Resume 버튼을 눌러 프로세스를 진행시킨다.
사용자 삽입 이미지
마지막으로 브라우저를 살펴보면 세상아 안녕! 이란 글자가 나타날 것이다.

지금까지 디버깅의 가장 기초적인 기능을 해봤다고 생각한다. 다른 기능들은 여기저기 BreakPoint를 찍어가며 (java 소스에도 물론) 값이 어떻게 변화하는지 확인해보기 바란다.


반응형

애플(Apple)의 아이폰(iPhone) 플랫폼은 개발자들에게 흥미로운 기회를 제공하고 있다. 소형 데스크톱과 터치스크린으로 아이폰과 아이팟 터치(iPod Touch)는 짧은 기간에 100만 명이 넘는 사용자들을 가지게 되었다. 하지만 이런 고품격 디자인과 사유화된(proprietary) 플랫폼은 애플리케이션 개발자들에게 새로운 종류의 도전을 만들어 내고 있다. 애플이 소프트웨어 개발 키트(SDK)를 배포할 때까지는, 아이폰 플랫폼을 목표로 하는 개발자들은 아이폰의 룩앤필(look and feel)을 따르는 웹 애플리케이션을 만들어야만 한다.

운이 좋게도 그 일을 쉽게 할 수 있는 새로운 오픈 소스 도구들을 사용할 수 있다. Aptana의 이클립스용 아이폰 개발 플러그인은 아이폰에 특화된 프로젝트를 생성하고 회전시켜 볼 수 있는 미리 보기 화면을 제공한다. Joe Hewitt의 iUi는 CSS와 자바스크립트 프레임워크인데 아이폰 스타일의 위젯과 페이지를 가지고 있다.

본 기사에서는, Apatana와 iUi를 사용해 새로운 애플리케이션을 만들 것이다. 바로 아이폰에서 사용할 수 있는 간단한 자바독(Javadoc) 뷰어다. 먼저 아이폰에서 자바독을 브라우징할 수 있는 사용자 인터페이스(UI)를 만들겠다. 그런 다음 소스 코드에서 자바독 페이지를 만들어 내는 커스텀 doclet을 만든다. 그 뒤를 이어 아이폰을 목표로 했을 때 생기는 UI 문제를 살펴보고 이 오픈 소스 도구들을 사용해 개발과 디버깅을 간단하게 할 수 있는지, 그리고 앞으로의 아이폰 개발 방향에 대해 설명하겠다.

도구 빠르게 살펴보기

Aptana를 설치하고 iUi를 다운로드하는 것부터 시작한다.

  1. 이클립스 V3.2에서 다음을 선택한다. Help > Software Updates > Find and Install.
  2. Search for new features to install을 선택한다. 이 창에서는 여러분이 다운로드한 플러그인과 이클립스가 미리 정의해둔 플러그인 사이트의 목록을 보여준다.
  3. New Remote Site를 클릭해 Aptana를 추가하고 URL을 다음과 같이 설정한다. http://update.aptana.com/update/3.2/.
  4. 목록에서 새로 추가한 Aptana를 선택하고 Next를 클릭해 이용할 수 있는 모든 기능을 선택한다. 창을 닫고 기본 Aptana 편집기로 돌아온다.
  5. 이클립스를 재시작한다.
  6. Window > Open Perspective > Other를 선택하고 Aptana를 창에서 클릭한다. 툴바에 새로운 아이콘이 나타날 것이다.
  7. Home 아이콘을 클릭한다. Aptana 기능에 대한 소개 페이지가 보일 것이다.
  8. Apple iPhone Development에서 Download and Install을 선택한다.
  9. 기능들을 설치하고, 창을 닫고 아이폰에 특화된 기능들을 Aptana에 설정한다.
  10. 이클립스를 다시 시작한다.
  11. 최신 버전의 iUi를 다운로드한다(참고자료 참조).

모든 준비가 끝났다면, 이클립스를 사용해 그림 1에 보이는 것처럼 iDoc이라는 새로운 아이폰 프로젝트를 생성한다.


그림 1. 새로운 아이폰 프로젝트 만들기
새 아이폰 프로젝트 만들기

그림 2는 간단한 아이폰 애플리케이션을 담고 있는 프로젝트를 보여준다.


그림 2. 이클립스에 생성된 아이폰 프로젝트
이클립스에 생성된 아이폰 프로젝트

HTML, CSS, 그리고 자바스크립트를 지원하는 Aptana의 기본 편집기가 제공하는 문법 하이라이팅을 확인할 수 있다.

아이폰 미리보기 모드와 애플리케이션 서버

텍스트 편집기 아래 부분에 Source, iPhone Preview, 그리고 시스템에 설치된 각종 브라우저(예를 들어 Safari Preview, Firefox Preview) 탭들을 볼 수 있다. iPhone Preview를 클릭하여 아이폰에서 보이는 샘플 애플리케이션을 보자. 폰을 돌리려면 브라우저의 바깥을 클릭하고, 네비게이션 막대를 숨기려면 폰 제목을 클릭하라. 가로로 보는 아이폰 미리보기 모드는 아래와 같다.


그림 3. 아이폰 미리보기 모드에서 가로 보기
아이폰 미리보기 모드에서 가로 보기

아이폰 미리보기 모드는 시간을 매우 많이 절약할 수 있게 하는 장치다. 새로운 디자인 아이디어를 빠르게 테스트할 수 있고 컴퓨터에서 벗어나지 않고도 점진적으로 개발할 수 있다. 애플리케이션을 실제 아이폰에서 테스트해야 할 때가 오면, Aptana에 내장된 애플리케이션 서버가 매우 유용할 것이다. 이클립스 툴바에 있는 Run 아이콘을 클릭하여 서버를 실행한다. 그림 4는 이클립스에서 동작하는 애플리케이션 서버를 보여준다.


그림 4. Aptana의 아이폰 애플리케이션 서버가 페이지를 호스트하고 그 URL을 가지고 있는 email을 생성한다.
Aptana의 아이폰 애플리케이션 서버가 페이지를 호스트하고 그 URL을 가지고 있는 email을 생성한다.

만약 아이폰이 와이파이(WiFi) 연결을 통해 로컬 네트워크에 연결되어 있다면, 서버 창에 보이는 URL에 접속할 수 있다. E-mail this url을 클릭하여 한 단계를 생략하고 여러분 아이폰에 있는 이메일 계정으로 메시지를 보낼 수 있다. 이메일에 있는 링크를 탭(화면을 툭 치는 것)하면, 아이폰의 웹 브라우저에서 애플리케이션을 실행한다.

iUi 데모: 극장 목록 웹 애플리케이션

Aptana의 기본 애플리케이션이 아이폰에 특화된 HTML과 CSS를 포함하고 있더라도 그 기능은 매우 제한적이다. 좀 더 나은 대안책은 iUi 프레임워크다. iUi는 다양한 아이폰 인터페이스 스타일의 커스텀 위젯과 자바스크립트 효과를 가지고 있다.

다운로드한 iUi 파일 iui-0.13.tar의 압축을 풀고, 파일을 이클립스에 있는 iDoc 프로젝트로 복사한다. 그림 5는 iUi를 가지고 있는 프로젝트를 보여준다.


그림 5. iUi 프레임워크와 예제 프로젝트가 들어 있는 iDoc 프로젝트
iUi 프레임워크와 예제 프로젝트가 들어 있는 iDoc 프로젝트

iUi를 사용한 데모 웹 애플리케이션은 위에서 펼쳐진 샘플 폴더에서 찾을 수 있다. 음악 브라우저, 극장 목록 그리고 Digg와 비슷한 사이트를 포함하고 있다. Aptana의 아이폰 미리보기 모드를 사용해 이클립스에서 그것들을 확인할 수 있다. 그림 6은 극장 목록 웹 애플리케이션(samples/theaters/index.html)의 검색 페이지를 보여준다.


그림 6. iUi의 예제 극장 목록 웹 애플리케이션
iUi의 예제 극장 목록 웹 애플리케이션

진짜 아이폰의 룩앤필과 얼마나 비슷한지 보기 바란다. 이렇게 미리 만들어둔 위젯은 아이폰 웹 애플리케이션을 빠르게 개발할 수 있도록 해준다.




위로


UI 디자인하기

이번 예제에서는 iDoc이라는 자바독 뷰어를 만들 것이다. 썬(Sun Microsystems)의 표준 자바독 생성기에 의해 만들어진 방대한 양의 HTML 문서들을 데스크톱에서는 잘 볼 수 있다. 하지만 아이폰에서 읽고 네비게이션하기에는 불편하다. iDoc은 아이폰에 적합한 자바독을 생성한다. — 지하철이나 짝 프로그래밍 팀에서 관찰자가 도움을 줄 수 있도록 하기에 완벽한 브라우징 애플리케이션 프로그램 인터페이스(API)를 제공할 것이다.

아이폰 휴먼 인터페이스 가이드라인

iDoc에 필요한 UI를 디자인하기 전에 아이폰 개발과 일반적인 웹 애플리케이션의 다른 점을 이해하는 것이 중요하다. 애플의 iPhone Dev Center(참고자료 참조)에서 인용한 그림 7을 보면 이를 매우 멋지게 요약했다. 손가락은 마우스가 아니다. 데스크톱에서 볼 수 있는 픽셀 선택을 없애고 그 대신 탭(툭 치는 것), 플릭(화면을 가볍고 빠르게 휙 스치는 모션) 그리고 핀치(두 손가락으로 화면을 꼬집는 듯한 모션)와 같은 풍부한 사용자 상호작용 모델을 사용했다. 게다가 아이폰은 사용자가 들고 다니면서 시급한 상황에서 자주 쓰기 때문에 애플리케이션에서 원하는 정보를 빠르고 쉽게 제공할 필요가 있다.


그림 7. 손가락은 마우스가 아니다.
손가락은 마우스가 아니다.

애플의 iPhone Human Interface Guidelines(참고자료 참조)는 아이폰 웹 컨텐츠의 세 가지 타입을 정의하고 있다.

아이폰에 있는 사파리(Safari)와 호환
비록 페이지의 일부분이 어도비 플래시(Adobe Flash)나 Java™ 애플릿처럼 지원되지 않는 플러그인에 의존하더라도 정확하게 보여줄 수 있는 모든 타입의 웹 페이지
아이폰에 있는 사파리에 최적화
아이폰에 맞게 내용의 크기를 조정했으며, 지원되지 않는 플러그인에 의존하지 않는 웹 페이지
아이폰 애플리케이션
웹 페이지가 아이폰의 룩앤필을 따르는 애플리케이션처럼 보이고, 가능하다면 전화, 이메일, 구글맵과 같은 아이폰의 서비스와 연동된다.

표준 자바독 페이지는 첫 번째 범주에 해당된다. 아이폰에 있는 사파리와 호환되는 형태다. 정확하게 보이긴 하지만 관련된 정보를 찾으려면 핀칭과 플릭을 매우 잘 해야 한다. iDoc은 완전한 아이폰 애플리케이션을 목표로 하고 있다. 비록 다른 서비스와 연동할 일은 없지만 iDoc의 인터페이스는 마치 아이폰 애플리케이션처럼 느껴질 것이다.

iDoc UI

아이폰을 목표로 할 때는 포커스를 유지하는 것이 중요하다. 애플리케이션은 특정 작업을 빠르게 수행해야 한다. 모든 가용한 기능을 포함시키려고 하면 안 된다. iDoc에서 사용자들은 클래스 이름, 메서드 이름, 메서드 시그너처 그리고 주석 등과 같은 자바 클래스에 대한 기본 정보를 찾아내야 한다. 이런 정보를 목적지인 구체적인 페이지로 안내하는 세 개로 나눈 네비게이션을 통해 제공할 것이다.

패키지 네비게이션
최상위 패키지
클래스 네비게이션
패키지 안에 있는 클래스, 인터페이스, 예외와 에러
자세한 클래스 네비게이션
클래스 안에 있는 설명, 필드, 상수, 그리고 메서드
세부 페이지
주석, 시그너처 그리고 매개변수

iDoc을 산만하지 않고 태스크에 집중된 상태로 유지하기 위해 기존의 자바독 기능을 몇 가지 제거했다. 예를 들어 패지키 설명 주석은 보여주지 않는다. 이것들은 대개 정보가 유익하지 않거나(예를 들어 acme.client에는 클라이언트 코드가 들어 있다.) 보통 존재하지 않으므로 그것들을 iDoc에서 빼고 인터페이스를 간단하게 만드는 것이 더 나은 선택이다.

세 부분으로 나눈 네비게이션을 위해 edge-to-edge 리스트를 사용한다. 이것은 전형적인 아이폰 애플리케이션에 익숙한 구조로 연락처, 이메일 그리고 음악을 브라우징할 때 사용된다. Edge-to-edge 리스트는 아이템을 44픽셀 높이의 같은 크기로 보여준다. 그리고 많은 양의 정보를 스크롤할 때 유용하다. 애플의 iPhone Human Interface Guidelines는 글꼴, 글자 크기 그리고 경계선 공간 수치를 제공한다. iUi 프레임워크는 CSS와 자바스크립트 언어로 이러한 수치에 맞게 구현해두었다. 따라서 아이폰 컴포넌트처럼 보이는 HTML 목록을 간단하게 만들 수 있다.

Listing 1은 페이지 헤더와 java.applet과 java.rmi 패키지의 첫 번째 2단계 네비게이션을 보여준다.


Listing 1. 페이지 헤더와 첫 번째 2단계 네비게이션 HTML 문서
                
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>iDoc</title>
<meta name="viewport" content="width=320; initial-scale=1.0;
   maximum-scale=1.0;
   user-scalable=0;"/>
<style type="text/css" media="screen">@import
   "iui/iui.css";</style>
<style type="text/css" media="screen">@import
   "iDoc.css";</style>
<script type="application/x-javascript"
   src="iui/iui.js"></script>
</head>

<body onclick="console.log('Hello', event.target);">
   <div class="toolbar">
     <h1 id="pageTitle"></h1>
     <a id="backButton" class="button"
        href="#"></a>
   </div>
  <ul id="home" title="Packages" selected="true">
      <li><a href="#java.applet">java.applet</a></li>
      <!-- more packages...-->
      <li><a href="#java.rmi">java.rmi</a></li>
  </ul>
  <ul id="java.applet" title="java.applet">
      <li class="group">Interfaces</li>
      <li><a href="java.applet.AppletContext.html">
         AppletContext</a></li>
      <li><a href="java.applet.AppletStub.html">
         AppletStub</a></li>
      <li><a href="java.applet.AudioClip.html">
         AudioClip</a></li>
      <li class="group">Classes</li>
      <li><a href="java.applet.Applet.html">Applet
         </a></li>
      <li><a href="java.applet.Applet.AccessibleApplet.html">
         AccessibleApplet</a></li>
  </ul>
  <ul id="java.rmi" title="java.rmi">
      <li class="group">Interfaces</li>
      <li><a href="java.rmi.Remote.html">
         Remote</a></li>
      <li class="group">Classes</li>
      <li><a href="java.rmi.MarshalledObject.html">
         MarshalledObject</a></li>
      <li><a href="java.rmi.Naming.html">
         Naming</a></li>
      <li><a href="java.rmi.RMISecurityManager.html">
         RMISecurityManager</a></li>
      <li class="group">Exceptions</li>
      <li><a href="java.rmi.AccessException.html">
         AccessException</a></li>
      <li><a href="java.rmi.AlreadyBoundException.html">
         AlreadyBoundException</a></li>
      <li><a href="java.rmi.ConnectException.html">
         ConnectException</a></li>
      <li><a href="java.rmi.ConnectIOException.html">
         ConnectIOException</a></li>
      <li><a href="java.rmi.MarshalException.html">
         MarshalException</a></li>
      <li><a href="java.rmi.NoSuchObjectException.html">
         NoSuchObjectException</a></li>
      <li><a href="java.rmi.NotBoundException.html">
         NotBoundException</a></li>
      <li><a href="java.rmi.RemoteException.html">
         RemoteException</a></li>
      <li><a href="java.rmi.RMISecurityException.html">
         RMISecurityException</a></li>
      <li><a href="java.rmi.ServerError.html">
         ServerError</a></li>
      <li><a href="java.rmi.ServerException.html">
         ServerException</a></li>
      <li><a href="java.rmi.ServerRuntimeException.html">
         ServerRuntimeException</a></li>
      <li><a href="java.rmi.StubNotFoundException.html">
         StubNotFoundException</a></li>
      <li><a href="java.rmi.UnexpectedException.html">
         UnexpectedException</a></li>
      <li><a href="java.rmi.UnknownHostException.html">
         UnknownHostException</a></li>
      <li><a href="java.rmi.UnmarshalException.html">
         UnmarshalException</a></li>
  </ul>
				

그림 8은 edge-to-edge 리스트를 사용하여 패키지를 선택할 수 있는 최상위 레벨 네비게이션을 보여준다.


그림 8. 진짜 아이폰 애플리케이션처럼 자바독 패지키 네비게이션하기
진짜 아이폰 애플리케이션처럼 자바독 패지키 네비게이션하기

그림 9는 아이폰 미리보기 모드로 java.rmi 패지키의 결과를 보여준다.


그림 9. Java.rmi 패키지에 있는 인터페이스, 클래스, 예외 네비게이션하기
Java.rmi 패키지에 있는 인터페이스, 클래스, 예외 네비게이션하기

iDoc의 세부 페이지에서는 아이폰의 또 다른 구조를 사용한다. 바로 둥근 사각형 리스트다. 이 리스트는 정보를 그룹핑할 때 유용한데 아이폰의 설정 창에서 볼 수 있다. 둥근 사각형 리스트를 사용해 메서드 시그너처와 매개변수 목록 그리고 예외를 구분할 것이다. V0.13에서 iUi는 둥근 사각형 리스트를 오직 폼 입력 용도로만 사용하도록 지원하고 있다. 따라서 정적인 텍스트를 출력할 때 이들 엘리먼트를 그냥 사용하면 틀에 맞지 않은 블록을 만들어 낸다. 그것들의 CSS를 확장하여 (Listing 2에 보이는) iDoc.css 파일을 만들고 정적인 텍스트를 둥근 사각형 리스트로 보여줄 textRow 엘리먼트를 추가한다.


Listing 2. 정적인 텍스트를 정확하게 보여주기 위한 커스텀 textRow CSS 확장
                
/* Adding a new row CSS style to iUi for displaying blocks of text */
.textRow  {
    position: relative;
    border-bottom: 1px solid #999999;
    -webkit-border-radius: 0;
    text-align: right;
}

.textRow > p {
    text-align: left;
    margin: 5px 8px 5px 10px;
    padding: 0px 0px 0px 0px;
}


fieldset > .textRow:last-child {
    border-bottom: none !important;
}
				

Listing 3은 java.math.BigDecimal의 생성자 중 하나를 보여준다.


Listing 3. textRow 엘리먼트를 사용한 세부 페이지 HTML
                
<div id="java.math.BigDecimal(long,java.math.MathContext)" title="BigDecimal"
        class="panel">
    <fieldset>
        <div class="textRow"><p><b>
           public BigDecimal(long, MathContext)</b></p></div>
        <div class="textRow"><p>Translates a
           <code>long</code> into a
        <code>BigDecimal</code>,with rounding according to the contextsettings.
        The scale of the <code>BigDecimal</code>, before any rounding,is zero.
      </p></div>
    </fieldset>
    <h2>Parameters</h2>
    <fieldset>
        <div class="textRow"><p><b>long val
           </b>: <code>long</code> value to be converted
         to <code>BigDecimal</code>.</p></div>
        <div class="textRow"><p><b>MathContext mc
           </b>: the context to use.</p></div>
    </fieldset>
    <h2>Throws</h2>
    <fieldset>
        <div class="textRow"><p><b>ArithmeticException
           </b>: if the result is inexact but
    the rounding mode is <code>UNNECESSARY</code>.</p></div>
    </fieldset>
</div>
				

<fieldset> 태그에 있는 모든 것들이 textRow <div>를 사용해 둥근 사각형 안으로 들어갔다. <h2> 헤드 태그는 목록 위에서 그룹 제목을 보여준다. 그림 10은 결과 페이지를 보여준다.


그림 10. java.math.BigDecimal의 생성자 자세히 보기 화면
java.math.BigDecimal의 생성자 자세히 보기 화면

3단계 네비게이션과 세부 페이지 UI를 모두 끝냈다. iDoc은 사용자들이 특정 작업에 집중할 수 있게 해준다. iUi 프레임워크의 도움과 약간의 커스텀 CSS를 사용해 마치 진짜 아이폰 애플리케이션처럼 보이게 만들었다.





iDoc 개발하기

자, UI 디자인을 만들었고 이제 HTML 파일을 생성하는 코드를 만들어야 한다. 썬의 javadoc 명령어를 끼워 넣은 간단한 Doclet를 만들어보자. 이 예제는 자바 표준 java.* 패키지를 사용하지만 iDoc은 어떤 소스 코드로부터든지 자바독을 생성할 수 있다. OpenJDK(참고자료 참조)라, 공개적으로 사용 가능하며 GPL V2 라이선스를 사용하는 소스 코드를 사용해 자바독을 만들고 배포할 수 있다.

iDoc은 간단하게 패키지와 클래스를 순회하며 위에서 만든 형식대로 정적인 HTML 페이지를 출력하기 위한 메서드를 호출한다. Listing 4는 최종 세부 페이지를 출력하기 위한 메서드다.


Listing 4. 세부 페이지를 출력하기 위한 Doclet 코드
                
private void printDetail(PrintStream p, ProgramElementDoc doc,
    String id, String name) {
    divHeader(p, id, name, "panel");
    textHeader(p, null);
    textRow(p, getSignature(doc));
    textRow(p, getCommentText(doc.commentText()));
    textFooter(p);
    if (doc instanceof ExecutableMemberDoc) {
        printMethodDetail(p, (ExecutableMemberDoc) doc);
    }
    divFooter(p);
}

private void printMethodDetail(PrintStream p, ExecutableMemberDoc field) {
    if (field.parameters().length > 0) {
        textHeader(p, "Parameters");
        for (int i=0; i<field.paramTags().length; i++) {
            textRow(p, "<b>" + field.parameters()[i].typeName() + " "
                    + field.paramTags()[i].parameterName()
                    + "</b>: "
            + getCommentText(field.paramTags()[i].parameterComment()));
        }
        textFooter(p);
    }
    if (field.throwsTags().length > 0) {
        textHeader(p, "Throws");
        for (int i=0; i<field.throwsTags().length; i++) {
            textRow(p, "<b>" +  field.throwsTags()[i].exceptionName()
                    + "</b>: "
            + getCommentText(field.throwsTags()[i].exceptionComment()));
        }
        textFooter(p);
    }
}
				

이 코드는 일반화된 메서드인데 printDetail()는 클래스 설명, 필드, 생성자 그리고 메서드를 출력한다. 나머지 두 개의 타입은 ExecutableMemberDoc의 서브 클래스로 그것들의 매개변수와 던지는 예외에 대한 정보를 추가로 출력한다.

성능 이슈

GZIP 압축

간단하지만 효율적인 성능 팁을 소개하겠다. 바로 웹 서버에서 GZIP 압축을 가능케 하는 것이다. 현재 쓰이는 웹 서버는 대부분 이 옵션을 제공하며, 이를 사용하는 클라이언트로 보내기 전에 페이지를 압축한다. 아이폰의 사파리도 그런 클라이언트 중 하나다. GZIP 압축을 자동으로 지원한다. 간단하게 GZIP 압축을 자신의 웹 서버에서 쓸 수 있게 하면, 아이폰 사용자들은 좀더 빠른 다운로드 시간을 경험하게 될 것이다.

Aptana의 아이폰 미리보기 모드는 결과 파일에 대한 디버깅에 도움을 준다. 각 주기마다 빠른 클릭을 통해 설계했던 인터페이스와의 불일치를 찾아낼 수 있다. 하지만 미리보기 모드를 사용하는 것은 성능 문제를 일으킬지도 모른다. 대부분의 컴퓨터들은 아이폰의 620MHz ARM 프로세서보다 세 배 내지 다섯 배 정도 빠르다. 또한 사용자들은 느린 휴대폰 네트워크를 통해 페이지를 다운로드할 것이다. 따라서 자신의 애플리케이션을 실제 아이폰에서 동작시켜 보는 것이 중요하다.

아이폰에서 iDoc을 시험해본 결과 매우 덩치 큰 HTML 파일을 출력할 때 흔들리는 듯한 화면과 성능 저하를 발견했다. 이것을 수정하기 위해 패키지와 클래스 이름을 네비게이션하는 메인 파일을 하나 만들고 별도의 파일로 각각의 클래스의 주석, 메서드에 대한 자세한 정보를 보여주는 페이지들을 만들었다(Listing 5). 비록 이런 과정을 통해 여러 개의 파일을 만들어 내게 되었지만, 각각의 파일 크기가 작기 때문에 애플리케이션이 매우 부드럽게 동작하게 되었다.


Listing 5. 각각의 패키지를 순회하는 Doclet 코드와 각각의 클래스마다 별도의 파일 만들기
                
out = new FileOutputStream(index);
p = new PrintStream(out);
printHeader(p);

PackageDoc[] packages = root.specifiedPackages();
Arrays.sort(packages);

printPackages(p, packages);

for (int i=0; i<packages.length; i++) {
    printPackageDetail(p, packages[i]);
}
for (int i=0; i<packages.length; i++) {
    ClassDoc[] classes = packages[i].allClasses();
    Arrays.sort(classes);
    for (int j=0; j<classes.length; j++) {
        // Creating a separate file for each class.
        PrintStream p2 = new PrintStream(new FileOutputStream(getFilename(classes[j])));
        printClassDetail(p2, classes[j]);
        p2.close();
    }
}
printFooter(p);
p.close();
				

iDoc 사용하기

성능 향상을 통해 iDoc은 이제 출시될 준비가 끝났다. OpenJDK에 있는 java.*와 javax.*에 있는 51개 패키지와 1304개 클래스에 대한 자바독을 만들, 모든 것을 웹 서버로 업로드한다. 16MB가 넘는 크기의 파일이지만 주요 네비게이션 페이지는 단지 112KB에 불과하며 각각의 클래스 자세히 보기 페이지는 평균적으로 13KB다. EDGE 네트워크를 사용하더라도 애플리케이션은 매우 잘 응답한다. 아이폰이 있다면 iDoc 사이트(참고자료 참조)에 접속해 보거나 iDoc을 다운로드하여 아이폰을 위한 자바독을 생성할 수 있다. 그림 11은 최종 애플리케이션을 보여준다.


그림 11. 아이폰을 위해 준비된 51개의 패키지 자바독
아이폰을 위해 준비된 51개의 패키지 자바독

iDoc의 잠재적인 확장기능으로는 자바 5 제네릭과 자바독 주석에 포함된 페이지 사이의 링크를 위한 태그를 더 잘 파악하는 것이다. iDoc의 기능 추가에 관심이 있다면 모든 소스 코드는 온라인에서 받을 수 있다(참고자료 참조).




위로


아이폰 개발의 미래

소셜 북마크

mar.gar.in mar.gar.in
digg Digg
del.icio.us del.icio.us
Slashdot Slashdot

2007년 10월 Steve Jobs는 애플이 아이폰 SDK를 2008년 2월에 공개할 것을 발표했다. 글을 쓰고 있는 시점이 2007년 12월이기 때문에 아직 구체적인 것은 미지수이지만 SDK를 통해 사파리의 도움 없이 아이폰 바로 위에서 동작하는 애플리케이션을 작성할 수 있게 될 것이다. 아이폰 아키텍처 기반을 얻는 것은 Mac OS X과 비슷하게 개발 플랫폼이 코코아(Cocoa)와 오브젝티브-C가 된다는 것이다. 최근 소식에 의하면 애플의 한 중역은 서드파티 애플리케이션이 몇 가지 인증 절차를 거치도록 하는 것을 제안하기도 했다.

발전된 애니메이션, 그래픽 그리고 네트워크 접속을 사용하는 애플리케이션이 네이티브로 동작할 수 있는 이점을 얻을 것이다. 하지만 SDK가 배포되더라도 아이폰을 위한 웹 개발은 여전히 매력적인 위치에 있을 것이다. 웹 애플리케이션은 쉽게 만들고 간단하게 배포할 수 있다. Aptana와 iUi 같은 도구는 개발을 간편하게 해주며 웹 애플리케이션을 빨리 만들 수 있도록 해준다. iDoc을 통해 보았듯이 SDK를 기다릴 필요도 없다. 오늘 배운 도구를 사용해 아이폰 기능을 완전히 사용하며 진짜 같은 룩앤필을 가진 웹 애플리케이션을 만들 수 있다.



참고자료

교육
  • iPhone Dev Center에는 Apple Developer Center에 있는 아이폰 웹 개발과 관련된 유용한 참조 문서들이 있다.

  • iPhone Human Interface Guidelines 는 UI 개발 기준과 가이드라인 모음이다.

  • OpenJDK는 썬의 오픈 소스 자바 개발 키트다.

  • iDoc 시연 —OpenJDK Javadoc—를 여러분의 아이폰에서 참조하라.

  • "Eclipse 추천 도서 리스트 (한글)"를 확인하라.

  • developerWorks의 모든 이클립스 기사를 확인하라.

  • 이클립스가 처음이라면 developerWorks의 기사 "Eclipse Platform 시작하기 (한글)"를 읽고 이클립스의 탄생과 아키텍처 그리고 플러그인을 사용하여 어떻게 이클립스를 확장할 수 있는지 공부하라.

  • IBM developerWorks의 Eclipse 프로젝트 리소스를 참조하고 여러분의 이클립스 기술을 확장하라.

  • 소프트웨어 개발에 관한 흥미로운 인터뷰와 논의 소식을 듣기 원한다면 developerWorks 포드캐스트를 확인하라.

  • developerWorks의 기술 행사와 웹 캐스트에서 최신 정보를 접하라.

  • developerWorks On demand demos에서 IBM과 오픈 소스 기술 그리고 제품에 대한 정보를 무료로 보고 익힐 수 있다.

  • IBM 오픈 소스 개발과 관련하여 앞으로 개최될 컨퍼런스, 트레이드 쇼, 웹 캐스트 그리고 다른 행사들을 확인하라.

  • 한국 developerWorks 오픈 소스 존을 방문하여 방대한 how-to 정보, 도구, 프로젝트 업데이트를 확인하여 오픈 소스 기술을 활용한 개발에 도움을 얻고 IBM의 제품들을 활용하라.


제품 및 기술 얻기
반응형

앤트 파일 디버깅

자바 파일을 디버깅하는 것처럼, 이클립스에서 앤트 파일을 디버깅할 수 있으며, 모든 표준 디버깅 기능을 사용할 수 있다. 이것이 이클립스 앤트 통합에서 가장 유용한 기능이다.

타깃 내에 중단점 설정하기

자바 파일로 작업할 때처럼, 한 단계씩 확인을 하고 싶을 때, 작업을 호출하는 타깃에 있는 라인에 중단점을 설정할 수 있다. 라인에 중단점을 넣으려면, 간단히 왼쪽에 있는 회색 바에서 더블 클릭을 하면 된다. 녹색 공이 나타나 중단점이 정해졌음을 나타낸다(그림 15). 클릭함으로써 일시적으로 중단점을 활성화하거나 비활성화할 수 있고, Breakpoints 뷰에서도 중단점을 비활성화로 변경할 수 있다. 비활성화된 중단점은 하얀색 공 모양으로 표시된다. 자바의 중단점과 달리 카운트를 세거나 중단점에 상태를 줄 수 없다는 점-앤트 파일을 디버깅할 때는 결국 필요 없다-을 주의하자.


그림 15. 빌드파일 라인에 중단점 설정
빌드파일 라인에 중단점 설정



위로


빌드 파일 디버깅

이제 디버깅을 시작해 보자. Ant 뷰나 Outline 뷰에서 타깃에 마우스 오른쪽 버튼을 클릭한 다음, Debug As > Ant Build를 클릭하자. 자바 파일을 디버깅할 때처럼, 빌드 파일은 우리가 설정해두었던 중단점이 있는 라인에 도달하게 되면 멈춘다.

여기부터가 중요하다. Debug 뷰에서 Step Over 버튼을 클릭하면 자바 구문이 실행되는 것처럼, 빌드 파일이 한 줄씩 진행된다(그림 16). 각 작업을 순차적으로 진행함으로써, 작업이 실행되고 결과가 나온다. 이를 통해 빌드 프로세스에서 무엇이 잘못 됐는지를 확인할 수 있다. 오른쪽 버튼을 클릭하고, Run to Line을 클릭함으로써 해당 줄에서 마우스 특정 줄에 도달할 때까지 계속 빌드 파일을 실행한다. 이 과정은 선택된 줄에 도착하자마자 중단점을 삭제하는, 줄에 일시적으로 설정하는 중단점과 비슷하다.


그림 16. 빌드 파일에서 줄별로 한 단계씩 진행하기
빌드 파일에서 줄별로 한 단계씩 진행하기

Debug 뷰는 현재 실행되는 작업의 호출 스택을 보여준다. 작업에서 또 다른 타깃을 호출하면(antcall이라고 한다), 호출 스택의 현재 작업 위에 해당 타깃이 나타난다.

Variable 뷰 또한 이용할 수 있다(그림 17) 이 뷰를 열면 앤트에서 변수와 동일한 역할을 하는 모든 앤트 속성을 보여준다. 속성들은 다음 세 부분으로 분류된다.

  • 시스템 속성(System properties): 빌드를 하기 위해 시스템에서 설정하는 속성
  • 사용자 속성(user properties): -D 옵션을 사용해 지정한 것과 같은 속성User properties:
  • 실시간 속성(Runtime properties): 실행되는 동안에 빌드 파일에 정의된 속성

그림 17. 모든 속성을 보여주는 Variable 뷰
모든 속성을 보여주는 Variable 뷰

자바 디버거와는 달리, 앤트 디버거는 Variables 뷰에 있는 속성들의 값을 바꿀 수 없다.

프로젝트 구축을 위해 앤트 빌드파일 사용하기

이클립스 자바 IDE를 사용할 때, 무의식적으로 자바 빌더(Java Builder)를 사용한다. 자바 빌더는 파일을 저장하자마자 즉시 컴파일 작업을 내부적으로 수행하는 조용하고 날쌘 녀석이다.

비록 이 기능이 크게 다룰 문제가 아닌 것처럼 보일지라도, 사실 이클립스의 가장 놀라운 기능 중 하나다. 모든 코드가 에러 상태일지라도, 항상 컴파일되기 때문에, 자바 빌더는 모든 컴파일 과정을 유지해준다. 그러므로 길고, 성가신 컴파일 단계를 먼저 수행하지도 않고, 소스 작성 후 바로 자바 프로그램을 즉각 실행할 수 있다. 이 유용한 기능 덕분에 이클립스 사용자들은 불필요한 노력과 많은 시간을 절약할 수 있었고 프로그래머들 사이에서의 이클립스가 엄청난 인기를 끌 수 있었다.

그러나 우리가 단지 파일을 컴파일하는 것보다 더 많은 일을 하고 싶다면? 전체 프로젝트를 묶는 jar 파일을 만들길 원하고, 프로젝트가 변경될 때마다 특정 디렉토리에 이 jar를 복사하고 싶다면 어떻게 해야 할까? 그리고 매번 이클립스에 지시하지 않고, 내부적으로 이 모든 작업이 수행되길 원한다면? 차분히 앉아, 마음을 가라 앉히고, 코드 몇 줄을 작성한 다음에, 커피 맛을 음미하는 동안 이클립스에서 실제로 무슨 일이 벌어나는지 알 필요도 없이 내부적으로 복잡한 빌드 프로세스를 관리해 준다면 어떨까.

꿈처럼 들리는가? 꿈이 아니다. 우리는 실제로 이 일을 할 수 있다. 우리는 내부적으로 복잡한 모든 빌드 프로세스를 포함하면서 프로젝트의 “builder” 역할을 하는 앤트 빌드 파일을 추가만 하면 된다. 이 일을 하면 마법이 시작될 것이다.

왜 프로젝트 빌더로 앤트를 사용하는가

프로젝트에 있는 클래스 파일을 jar 파일로 만들고, 프로젝트의 최상위 경로에 위치시켜 주는 앤트 빌드 파일이 있다고 가정해 보자(빌드 파일의 정확한 내용은 지금 나오는 내용과 관련이 없다). 우리는 자바 파일이 수정될 때마다 실행되는 빌드 파일을 원하며, jar 파일은 항상 최신 상태를 유지한다. 이 작업은 다음 단계를 거쳐 완성된다.

  1. Package Explorer 뷰에서 해당 프로젝트를 마우스 오른쪽 버튼으로 클릭하고, 다음으로 Properties를 클릭한다.
  2. Builder를 선택하고, 프로젝트에 새로운 빌더를 추가하기 위해New를 클릭하자.
  3. 결과 화면에서 Ant Build를 선택하고, OK를 누르자.
  4. 빌더의 속성 창jd 다음과 같이 나타난다(그림 18). 여기서 빌더를 구성하자.


    그림 18. 빌더 설정 창
    빌더 설정 창

  5. Name 박스에 MyBuilder를 입력하자.
  6. 프로젝트에 있는 빌드 파일을 선택한 다음, Buildfile 바로 아래 Browse Workspace를 클릭하자.
  7. Base Directory 밑에 있는 Browse Workspace를 클릭하고, 빌드 파일이 포함하는 프로젝트를 선택한다. 빌드 파일에 인자를 제공할 수 있지만, 우리는 지금 이 예제에서는 제공할 필요가 없으니, 공백으로 남겨두자.
  8. Refresh 탭을 클릭하자(그림 19).
    프로젝트를 다시 로드하면 앤트와 같은 외부 도구에 의해 로컬 파일 시스템에 생성된 프로젝트가 변경된 부분이 있는지를 찾도록 Eclipse Workbench에 지시하게 된다. 그리고 이제 빌드 스크립트가 끝난 후에 Refresh를 수행해야 할지 말지, 만약 수행한다면 workspace에서 어느 부분을 Refresh를 해야 하는지를 이클립스에 정해줘야 한다.


    그림 19. Refresh 탭
    Refresh 탭

  9. 체크 박스에서 Refresh resources upon completion을 선택하자. 탭 아래에 있는 옵션을 선택할 수 있게 되었다. 얼마나 많은 workspace가 Refresh될 것인지 이클립스에 정해주자. Workbench를 계속 빠르게 실행할 수 있도록 가능한 가장 범위가 좁은 옵션을 선택하자. 이 예제의 경우 단지 현재 프로젝트의 Refresh만 필요하기 때문에, The project containing the selected resource 옵션을 선택하자.
  10. Targets 탭을 클릭하자.


    그림 20. Targets 탭
    Targets 탭


    이제 실제 실행될 빌드 파일을 선택할 수 있고, 좀 더 상세하게 실행될 타깃까지 선택할 수 있다. 네 가지 옵션을 사용할 수 있다.
    • - After a "Clean" – 프로젝트에 clean 작업을 수행할 때마다 타깃을 실행함.
    • - Manual Build – 이 옵션은 자동 빌드 기능이 꺼져 있는 경우에 사용된다. 사용자가 수동으로 빌드를 수행할 때마다, 정해진 타깃이 실행된다.
    • - Auto-Build - 자동 빌드가 수행될 때마다 타깃이 실행된다. 일반적으로 이 옵션은 자바 파일을 저장할 때마다 수행된다.
    • - During a "Clean" – 이 옵션은 After a “Clean” 옵션과는 다르게 타깃이 clean 오퍼레이션을 수행하는 동안에 호출된다. 이 옵션은 clean 오퍼레이션을 수행하는 동안에 파일의 맞춤 삭제 작업을 수행하기 위해 사용된다.
  11. 타깃이 실행되도록 설정하자. 각각의 타깃 옵션에는 매번 오퍼레이션이 수행되는 동안 실행되는 타깃을 설정하는 Set Targets 버튼이 있다. 일반적으로 여기서는 기본 타깃을 설정하지만, 실행되는 순서를 정해줌으로써 어떤 타깃-심지어 다수의 타깃의 동시 설정도 가능-이든지 설정할 수 있다.
  12. 실행하는 빌드 파일을 원하는 오퍼레이션이 무엇이든 이에 상응해 실행되는 타깃을 정의하자.
    이 경우에 우리는 항상 최신 jar 파일을 원하기 때문에 After a “Clean”과 Auto Build 오퍼레이션으로 타깃을 설정하자. 이렇게 설정하기 위해, Set Targets를 클릭하고, 그 다음 실행되는 타깃을 선택하자. Manual Build처럼 어떤 다른 오퍼레이션을 위해 정의되어 있는 타깃이 있다면, Set Targets을 클릭하고 그 오퍼레이션이 수행되는 동안에 실행되는 빌드 파일이 이용될 수 없도록 해당 타깃의 체크 박스에서 선택을 해제하자.

    또한 예를 들어, 매번 Auto Build 오퍼레이션이 수행된 후에 실행되는 타깃까지도 선택할 수 있다는 것을 알아두자. 하지만 일반적으로 빌드 프로세스가 길게 진행된다면 Workbench 속도가 반으로 저하되기 때문에, 이 옵션은 주의 깊게 사용해야 한다. 보통 Manual Build와 After a “Clean”만을 옵션으로 설정한다.
  13. OK를 클릭하자.


이제 새로 추가된 빌더를 테스트할 시간이다. 프로젝트에서 자바 파일을 열고, 몇 가지를 수정하고(예를 들어, 빈 공간을 넣는다든지), 저장을 하자. Auto Build가 수행되고, 콘솔에서 빌드 파일이 선택해놨던 타깃을 수행하는 것을 확인할 수 있다. jar 파일은 빌드되고, Navigator와 Package Explore 뷰에 보인다. 이 모든 작업은 자동으로 매번 발생한다.

결론

이클립스가 제공하는 소스 작성하기, 디버깅, 앤트 빌드 스크립트 내 이동을 위한 막강한 기능들을 살펴 봤다. 심지어 앤트 파일을 백그라운드에서 자동으로 실행함으로써 프로젝트 빌더로 앤트를 사용할 수 있었다. 이제 이클립스에서 매우 친숙하게 빌드 스크립트를 작성할 준비가 되었다.

앞서 설명한 기능을 더 공부해 스스로 앤트 빌드 스크립트를 작성하고 앤트를 프로젝터 빌더로 사용해 보기를 추천한다. 또한 빌드 스크립트를 작성하면서 사용할 수 있는 모든 작업들의 설명을 찾아 볼 수 있는 앤트 공식 레퍼런스 문서를 확인하는 것을 잊지 말자.



참고자료

교육


제품 및 기술 얻기


토론

반응형
2008년 3월호
 
[Java SE]  BoxLayout 알아보기
[Java EE]  상태 유지 세션 빈에서의 확장 지속성 컨텍스트
[Java EE]  SIP 서블릿을 사용하여 자바 EE에 음성 추가하기
[Java ME]  자바 ME 장치 매트릭스로 필터 사용
[Java ME]  자바 ME 옵션 패키지 검색


> 2008 자바원 참석 티켓 이벤트


2008 년 5월 5일부터 9일까지 미국 샌프란시스코에서 진행되는 2008 자바원 컨퍼런스 한장
의 무료 티켓! 지금까지의 활동하신 자바 프로젝트 활동과 자바원 행사 이후의 발표,기고 기획을 알기쉬운 자유형식으로 보내주세요. 한분을 선정하여 자바원 참가 티켓을 보내드립니다.

>>지금 신청하기



> 썬 교육센터 추천 과정


>> J2EE기반의 CBD 개발방법론 5/19 ~ 5/23
  >> AJAX 기반의 JSF Web Application 개발4/14 ~ 4/18  
  >> 실무자를 위한 파워 웹 컴포넌트 개발4/21 ~ 4/25

반응형

자바 SE 6의 성능 모니터링 및 진단 (한글)

자바 최신 버전에서 향상된 성능과 모니터링의 장점을 활용하기

 

 

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

 




난이도 : 중급

Cathy Kegley, 소프트웨어 엔지니어, IBM
Greg Roberts, 스태프 소프트웨어 엔지니어, IBM

2008 년 3 월 11 일

자바 SE 6(Java™ Platform, Standard Edition 6)은 성능에 초점을 맞춰 응용 프로그램을 모니터링, 감시하고 공통적인 문제를 진단하기 위해 확장된 도구들을 제공합니다. 이 기사에서는 자바 SE 플랫폼의 모니터링과 관리에 대한 기본적인 사항들을 소개하고, 자바 SE 6에서 보강된 사항들에 대한 상세한 정보를 제공합니다.

자바 SE 6은 응용 프로그램을 관리, 모니터링하고 일반적인 문제점을 진단하는 확장된 도구들을
제공한다. 개선된 사항은 다음과 같다.

  • 모니터링 및 관리(Monitoring and management) API 향상
  • 개선된 그래픽 모니터링 도구인 JConsole에 대한 공식 지원
  • 강화된 자바 가상 머신(JVM) 도구

이 기사는 자바 SE 플랫폼의 모니터링과 관리에 대한 기본적인 사항들을 소개하고, 최신 버전에서
보강된 사항들에 대해 상세한 정보를 제공한다. 또한 자바 SE 6 플랫폼에서 사용할 수 있는 진단
및 문제 해결 도구들에 대해 설명한다.

이 기사를 통해 이전 버전의 자바 SE에서 소개된 모니터링 및 관리 기능을 확실히 이해하게
 될 것이다.  참고자료를 통해 자세한 배경 정보를 볼 수 있다.

모니터링 및 관리 API

자바 SE 5는 java.lang.management 패키지에 플랫폼 MBean 또는 MXBean이라는 9개의
MBean을 정의한다(참고자료). 각 MXBean은 JVM의 단일 기능 영역을 감싸고 있다.
자바 SE 5부터 JVM은 플랫폼 MBean 서버라고 부르는 MBean 서버를 내장하고 있다.
MBean은 이 저장소 안에 존재하고 관리된다. 표 1에 자바 플랫폼에 포함된 9개의
MXBean을 요약했다.


표 1. 플랫폼 MBeans
관리 인터페이스 관리되는 자원
ClassLoadingMXBean 클래스 로더
CompilationMXBean 컴파일러
MemoryMXBean 메모리
ThreadMXBean 스레드
RuntimeMXBean 런타임
OperatingSystemMXBean 운영체제
GarbageCollectorMXBean 가비지 컬렉터
MemoryManagerMXBean 메모리 관리자
MemoryPoolMXBean 메모리 풀

어떤 응용 프로그램이라도 원하는 빈의 인스턴스를 얻고 절적한 메서드를 호출해 JVM이 제공하는
 플랫폼 MBean을 사용할 수 있다. 로컬 또는 원격 JVM의 동작을 모니터링하고 정보를 얻기 위해
MXBean을 사용할 수 있다.

플랫폼 MBean은 적재된 클래스 개수, JVM 가동시간, 메모리 소모량, 실행 중인 스레드 개수,
스레드 경쟁에 대한 통계 등의 정보에 대해 접근을 제공한다.

JVM 리소스를 모니터링하고 관리하는 두 가지 방법이 있다.

  • MXBean 인터페이스를 통한 직접 접근
  • MBeanServer 인터페이스를 통한 간접 접근

MXBean 인터페이스를 통한 직접 접근

정적인 팩토리 메서드를 통해 MXBean 인스턴스를 얻어 로컬에서 실행 중인 JVM의
MXBean 인터페이스에 직접 접근할 수 있다. ManagementFactory 클래스는 MXBean을 얻을 수
있는 정적인 팩토리 메서드를 제공한다. Listing 1은 이 팩토리를 통해 RuntimeMXBean을 얻어
표준 속성 중 하나인 VmVendor의 값을 얻는 방법을 보여준다.


Listing 1. MXBean에 직접 접근하기
                
RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();

// Get the standard attribute "VmVendor"
String vendor = mxbean.getVmVendor();

MBeanServer 인터페이스를 통한 간접 접근

플랫폼 MBeanServer 인터페이스는 원격 JVM에 연결하고 그 플랫폼에서 실행 중인 MXBean에
접근하기 위해 MXBeanServerConnection을 사용한다. ManagementFactory 클래스의 getPlatformMBeanServer 메서드를 사용해 플랫폼 MBean 서버에 접근할 수 있다. Listing 2는
원격에서 실행 중인 JVM에서 RuntimeMXBean을 얻고, VmVendor 속성의 값을 얻는 방법을
보여준다.


Listing 2. MXBean에 간접 접근하기
                
MBeanServerConnection serverConn;

try {
   //connect to a remote VM using JMX RMI
JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://<addr>");

   JMXConnector jmxConnector = JMXConnectorFactory.connect(url);

   serverConn = jmxConnector.getMBeanServerConnection();

   ObjectName objName = new 
   ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);

   // Get standard attribute "VmVendor"
   String vendor = 
   (String) serverConn.getAttribute(objName, "VmVendor");

} catch (...) { }

참고자료에서 MXBean과 the java.lang.management API에 대한 더 자세한 정보를 볼 수 있다.

자바 SE 6에서 보강된 API

자바 SE 5는 락(lock)과 대기 조건(wait codition)에 대한 프레임워크를 제공하는 java.util.concurrent.locks 패키지를 도입했다. 이 프레임워크는 자바의 내장된 동기화
지원과는 별도로 더욱 융통성 있는 락 사용을 가능케 해 주었다.

자바 SE 6은 java.lang.management 패키지에 java.util.concurrent.locks에 대한 지원을
추가했다. 여기에는 락에 대한 정보를 제공하는 새로운 클래스와 ThreadInfo, ThreadMXBean, OperatingSystemMXBean에 대한 보강이 포함되었다.

자바 SE 6은 새로운 클래스 두 개를 도입했다.

  • LockInfo는 락에 대한 정보를 갖고 있다.
  • MonitorInfoLockInfo를 상속해 객체 모니터 락에 대한 정보를 갖고 있다.

ThreadInfo 클래스는 새로운 객체들을 사용하기 위해 새 메서드 세 가지를 도입했다.

  • getLockInfo()는 주어진 스레드가 차단 대기중인 LockInfo 객체를 반환한다.

  • getLockedMonitors()는 주어진 스레드에 의해 현재 락된 MonitorInfo 객체를 반환한다.

  • getLockedSynchronizers()는 주어진 스레드에 의해 현재 락된 소유 가능한 동기화

객체(ownable synchronizer)를 표현하는 LockInfo 객체를 반환한다.

ThreadMXBean.getThreadInfo 메서드는 자바 SE 5에서는 스레드가 획득 대기중이거나
진입 차단된 차단된 객체 모니터에 대해서만 보고했지만, 자바 SE 6부터는 획득 대기중인 스레드의 AbstractOwnableSynchronizer를 보고하도록 보강되었다.

ThreadMXBean 인터페이스도 메서드 네 개를 추가했다.

  • isObjectMonitorUsageSupported()는 가상 머신이 객체 모니터에 대한 모니터링을

지원하는지 여부를 검사한다.

  • isSynchronizerUsageSupported()는 소유 가능한 동기화 객체의 사용 모니터링을

지원하는지 여부를 검사한다.

  • findDeadlockedThreads()는 데드락된 스레드 ID의 배열을 반환한다. 데드락된 스레드는 다른 스레드가 객체 모니터나 동기화 객체에 진입하는 것을 차단하고 있는 스레드다.

  • dumpAllThreads()는 모든 살아있는 스레드에 대한 스택 트레이스와 동기화 정보를 반환한다.

마지막으로, OperatingSystemMXBean 인터페이스에 최근 수 분 동안 시스템의 평균 부하를 반환하는 getSystemLoadAverage()가 추가되었다.

프로그래밍 수준 지원과 더불어, 자바 SE 6은 문제를 감지하고 JVM의 자원 사용량을 모니터링하기
위한 몇 가지 진단 및 문제 해결 도구를 제공한다. 다음 두 절에서는 사용할 수 있는 진단 도구들에
설명하고 사용 예를 보여준다.






자바 모니터링 및 관리 콘솔(JConsole)

자바 SE 6은 자바 SE 5부터 도입된 모니터링 및 관리 콘솔인 JConsole에 대한 공식 지원을 포함한다. JConsole을 통해 실행 중에 다양한 JVM 통계를 모티터링할 수 있다. 이 도구는 데드락, 락 경합,
메모리 누수, 순환 스레드 등의 증상을 감지하는 데 유용하다. 이 도구는 로컬이나 원격 JVM에
연결하여 다음과 같은 정보를 모니터링할 수 있다.

  • 스레드 상태(연관된 락을 포함한)
  • 메모리 사용량
  • 가비지 컬렉션
  • 런타임 정보
  • JVM 정보

다음 절에서 자바 SE 6에서 JConsole의 보강된 부분들을 설명한다. 참고자료에서 JConsole을
시작하고 사용하는 방법에 대한 추가 정보를 볼 수 있다.

Attach API 지원

자바 SE 6부터 JConsole은 새로운 Attach API를 구현하고 있다. 이 com.sun.tools.attachcom.sun.tools.attach.spi 두 개의 패키지로 구성되어 있으며, 대상 가상 머신에 동적으로
부착되어 대상 JVM에서 에이전트를 실행하는 응용 프로그램을 구현할 수 있다.

예전에는 JConsole로 모니터링하려면 응용 프로그램을 -Dcom.sun.management.jmxremote
옵션을 사용하여 시작해야 했지만, 더 이상 그 옵션을 사용할 필요가 없다. 동적인 부착을 통해 JConsole은 Attach API를 지원하는 어떤 응용 프로그램이라도 지원할 수 있게 되었다. JConsole은
 시작하면서 호환 응용 프로그램을 자동으로 감지한다.

보강된 UI와 MBean 표현

자바 SE 6에서는 JConsole이 Windows® 운영체제나 GNOME 데스크톱 등의 실행 중인 플랫폼과
 비슷한 룩앤필을 갖도록 수정했다. 이 기사에서 이후부터 볼 스크린샷은 윈도우 XP에서 찍은
것으로 이전 버전과 달라진 UI 기능들을 보여준다.

일단 시작해 응용 프로그램과 연결되면, JConsole은 각각 다른 JVM 자원을 표현하는 6개의
 탭으로 구성된 화면을 제공한다.

  • Overview
  • Memory
  • Threads
  • Classes
  • VM Summary
  • MBeans

Overview 탭은 상호 연관된 메모리 사용량, 스레드, 클래스, CPU 사용량에 대한 정보를 그래프
 형식으로 표시한다. Overview 탭은 예전에는 여러 개의 탭을 전환해야 했던 관련된 정보들을
한 페이지에 표시한다. 그림 1은 예제 응용 프로그램의 Overview 탭을 보여준다.


그림 1. JConsole의 Overview 탭
JConsole의 Overview 탭

Overview 탭은 VM 자원 사용 정보에 대한 4개의 그래프와 결과를 보고 싶은 시간 범위를 바꾸기
위한 선택 목록을 표시한다. 첫 번째 힙 메모리 사용량 그래프는 시간대별로 사용된 힙 메모리의
양을 메가바이트 단위로 표시한다. 이 그래프는 메모리 누수를 감지하는 데 유용하다.
응용 프로그램에 메모리 누수가 있다면 힙 메모리 사용량은 시간이 지남에 따라 꾸준히 늘어난다.

스레드 그래프는 시간대 별로 살아있는 스레드 개수를, 클래스 그래프는 적재된 클래스 개수를
표시한다. CPU 사용량 차트는 응용 프로그램 생명 주기의 다양한 지점에서의 CPU 사용량을
표시한다.

그림 2의 VM Summary 탭은 자바 SE 6에 새로 추가된 것이다. 여기에는 총 가동시간, 스레드 정보,
적재된 클래스 개수, 메모리 통계, 가비지 컬렉션, 운영체제 정보를 포함한 JVM에 대한 자세한
정보를 제공한다.


그림 2. JConsole의 VM Summary 탭
JConsole의 VM Summary 탭

MBeans 탭은 MBean들의 동작과 속성에 더 쉽게 접근할 수 있도록 개선되었다. 플랫폼에 등록된
모든 MBean의 정보를 표시한다. 모든 플랫폼 MBean은 이 탭을 통해 접근할 수 있다. 왼쪽에 현재
실행중인 모든 MBean을 트리 구조로 표시한다. MBean을 선택하면 MBeanInfo와 설명자가
오른쪽에 표시된다(그림 3).


그림 3. JConsole의 MBean 탭
JConsole의 MBean 탭

Attributes 노드를 선택하면 MBean의 모든 속성을 표시한다(그림 4).


그림 4. MBean Attributes
MBean 속성

오른쪽에 표시된 속성과 값은 앞에서 설명한 java.lang.management 패키지의 ThreadMXBean
API를 통해 접근할 수 있다는 점을 주목하자. 나열된 속성 값을 더블클릭하면 추가 정보를 얻을 수
있다. 굵게 표시된 속성값은 확장할 수 있다. 예를 들어, AllThreadIds 값을 더블클릭하면 22개
스레드의 스레드 ID를 모두 표시한다(그림 5).


그림 5. 확장된 속성 값
확장된 속성 값

쓰기 가능한 속성은 파란색으로 표시되는데, 클릭한 다음 새 값을 입력해 편집할 수 있다. 예를 들어,
그림 5의 JConsole 화면에서 ThreadContentionMonitoringAvailable 속성을 이 방식으로
편집할 수 있다.

왼쪽 트리 구조에서 Operations 노드를 선택하면 MBean과 연관된 동작들을 표시한다. MBean
동작은 오른쪽에 버튼으로 표시되는데, 클릭하면 지정한 메서드를 호출한다. 그림 6은
ThreadMXBean의 가용한 동작들을 보여준다.


그림 6. MBean Operations
MBean 동작

핫스팟 진단 MBean

자바 SE 6부터 JConsole은 핫스팟 진단(HotSpot Diagnostic) MBean을 지원한다. 이 MBean은
즉석(on-the-spot) 동작을 수행하기 위해 이번 버전에 도입되었다. 이 API를 통해 사용자는 실행
중에 힙을 덤프하거나 다른 VM 옵션을 설정할 수 있다. MBean 탭에서 com.sun.management
노드를 확장하고 HotSpotDiagnostic을 선택하면 핫스팟 진단 MBean에 접근할 수 있다.
그림 7에서 핫스팟 진단 MBean에서 가용한 메서드들을 볼 수 있다.


Figure 7. 핫스팟 진단 MBean
핫스팟 진단 MBean

JConsole 플러그인 지원

자바 SE 6부터 JConsole은 플러그인을 지원한다. JConsole과 함께 실행할 수 있는 고유한
플러그인을 만들 수 있다. 예를 들어, 응용 프로그램에 특화된 MBean에 접근해 고유의 모니터링
 동작을 수행하는 탭을 JConsole의 메인 화면에 추가할 수 있다.

커스텀 JConsole 플러그인을 만들려면 com.sun.tools.jconsole.JConsolePlugin 추상
클래스를 상속해야 한다. JConsole 화면에 제대로 나타나게 하려면 메서드 두 개를 구현해야 한다.

  • newSwingWorker()는 플러그인의 GUI를 갱신하는 SwingWorker 객체를 반환한다.
  • getTabs()는 JConsole 창에 추가될 탭의 맵을 반환한다.

JConsole은 서비스-공급자 메커니즘을 사용해 모든 플러그인 클래스를 감지하고 적재한다.
 이 때문에, 플러그인 클래스는 META-INF/services/com.sun.tools.jconsole.JConsolePlugin
파일을 포함하는 JAR 파일로 제공해야 한다. 이 파일은 한 줄에 하나씩 나열된 플러그인 클래스의
완전한 이름 목록을 포함해야 한다. 아래 명령으로 JConsole을 실행하면 새로운 플러그인
클래스를 JConsole 화면에 불러온다.

jconsole -pluginpath plugin_path
            

이 명령에서, plugin_path는 JConsole 플러그인들이 들어있는 디렉터리나 JAR 파일의 위치다.
여러 개의 경로를 지정할 수 있다.

자바 SE 6에는 JTop이라는 JConsole 플러그인이 예제로 포함되어 있다. JTop은 현재
 응용 프로그램 내에서 실행중인 스레드의 CPU 사용량을 보여준다. JConsole을 JTop과
 함께 실행하려면 아래 명령을 실행하면 된다.

jconsole -pluginpath JAVA_HOME/demo/management/JTop/JTop.jar

그림 8은 JTop 탭이 선택된 JConsole을 보여준다. 왼쪽 컬럼은 실행 중인 스레드의 이름을
표시한다. 각 스레드에 대해 CPU 사용량과 스레드 상태가 표시된다. 통계가 변하면 화면이
자동으로 갱신된다. JTop 플러그인은 CPU 점유율이 높은 스레드를 식별하는 데 유용하다.


그림 8. JConsole의 JTop 플러그인
JConsole의 JTop 플러그인





모니터링 및 문제 해결 도구

자바 SE 6은 JConsole 외에도 몇 가지 다른 명령행 도구를 포함한다. 이 진단 도구들은 응용
프로그램을 특수한 모드로 실행할 필요 없이 아무 응용 프로그램에나 부착할 수 있다.
응용 프로그램이 의도한 대로 동작하는지를 확인하기 위한 정보를 얻을 수 있다. 이 도구들은
실험적이며 이후에 나올 자바 SE 버전에서는 지원되지 않을 수 있음을 주의하자.

모니터링 도구

자바 SE 6은 JVM의 성능 통계를 모니터링하는 데 유용한 명령행 유틸리티들을 포함하고 있다(표 2).


표 2. 모니터링 도구
도구 설명
jps JVM 프로세스 상태 도구
jstat JVM 통계 모니터링 도구
jstatd JVM jstat 데몬

jps 유틸리티는 대상 시스템의 현재 사용자에 대한 가상 머신을 나열한다. 이 유틸리티는
일반적인 자바 실행기 대신, JNI Invocation API를 통해 시작한 VM 환경에 유용하다.
이러한 환경에서는 프로세스 목록에서 자바 프로세스를 식별하는 것이 쉽지만은 않다.
jps 도구는 이 문제를 완화한다.

다음 예제는 jps 사용 예를 보여준다. 단순히 명령행에서 jps를 입력하면, 사용자가 접근
권한을 가진 가상 머신 목록과 프로세스 ID를 나열한다(Listing 3).


Listing 3. jps 유틸리티 사용하기
                
$ jps
16217 MyApplication
16342 jps

jstat 유틸리티는 JVM에 내장된 도구를 사용해 실행 중인 응용 프로그램의 성능과 자원 소모에
 대한 정보를 제공한다. 이 툴은 힙 크기 및 가비지 컬렉션과 연관된 성능 이슈를 진단하는 데
유용하다.

jstatd 데몬은 JVM 생성과 종료를 모니터링하고 원격 모니터링 도구가 로컬 호스트에 실행 중인
 JVM에 부착할 수 있도록 해주는 원격 메서드 호출(Remote Method Invocation, RMI) 서버
애플리케이션이다. 예를 들어, 이 데몬을 통해 jps 유틸리티는 원격 시스템의 프로세스 목록도
나열할 수 있다.

참고자료에서 이 도구들 각각에 대한 추가 문서와 사용 예를 볼 수 있다.

문제 해결 도구

자바 SE 6은 응용 프로그램이 예상치 못한 동작을 할 때 정밀한 처방을 내릴 수 있도록 도와주는
몇 가지 문제 해결 도구들도 포함하고 있다(표 3).


표 3. 문제 해결 도구
도구 설명
jinfo 설정 정보
jhat 힙 덤프 열람기
jmap 메모리 맵
jsadebugd 서비스 가능 여부 진단 에이전트 디버그 데몬
jstack 스택 트레이스

jinfo 명령행 유틸리티는 실행 중인 자바 프로세스의 설정 정보나 충돌 덤프를 추출하고, 가상
머신을 시작할 때 사용한 시스템 프로퍼티나 명령행 플래그를 출력한다.

jhat 도구는 힙의 스냅샷에서 객체 위상을 열람할 수 있는 편리한 수단을 제공한다. 힙 분석 도구
(Heap Analysis Tool, HAT)를 대체하기 위해 자바 SE 6에서 도입된 이 도구는 메모리 누수를
감지하는 데 유용하다.

jmap 명령행 유틸리는 실행 중인 VM이나 코어(core) 파일에 대한 메모리 관련 통계를 출력한다. jsadebugd 데몬을 사용하면 원격 기계의 프로세스나 코어 파일을 조회할 수 있다. jmap 도구는 OutOfMemoryError를 야기할 수 있는 finalizer의 과도한 사용을 진단하는 데 유용하다.

jsadebugd(Serviceability Agent Debug Daemon)은 자바 프로세스나 코어 파일에 부착되어
디버그 서버처럼 동작한다. 이 유틸리티는 현재 솔라리스 OS와 Linux®에서만 사용할 수 있다.
자바 RMI를 사용해 jstack, jmap, jinfo 같은 원격 클라이언트를 이 서버에 부착할 수 있다.

jstack 명령행 유틸리티는 지정한 프로세스나 코어 파일에 부착되어 VM의 내부 스레드를
포함한 가상 머신에 부착된 모든 스레드의 스택 트레이스를 출력하며, 선택적으로 네이티브
스택 프레임도 출력할 수 있다. 이 도구는 jsadebugd 데몬을 통해 원격 기계의 프로세스나
코어 파일을 조회할 수 있다. jstack 도구는 데드락을 진단하는 데 유용하다.

참고자료에서 이 도구들 각각에 대한 추가 문서와 사용 예를 볼 수 있다.






결론

자바 6 플랫폼은 자바 응용 프로그램의 성능과 메모리 문제를 효과적으로 식별하고 진단하는 것을
 돕기 위해 몇 가지 VM 기구, 관리 API, 그리고 JDK 도구들을 강화했다. 이 기사는 자바 SE의
모니터링 및 관리 프레임워크에서 향상된 부분들을 설명하고, 개발자들이 사용할 수 있는 명령행
 진단 유틸리티에 대해 다루었다.

자바 응용 프로그램의 평균 속도는 시간이 지남에 따라 꾸준히 증가하고 있다. 자바 SE 6이
나오면서 자바의 성능은 C나 C++에 비견할 정도가 되었다. 많은 경우에 자바 코드는 눈에
띌 정도로 빨라졌다. 그리고 여기에서 소개한 도구들을 사용해 더 나은 성능 최적화를 이룰 수
있을 것이다. 시도해보자. 예전에는 결코 알 수 없었던, 응용 프로그램의 성능을 향상시킬 수
있는 지점을 발견하게 될 것이라고 장담한다.



참고자료

교육

Caroline Gough, developerWorks, 2006년 4월): MXBean에 대한 더 자세한 정보

썬 개발자 네트워크, 2006년 8월): 자바 SE에서 공통적인 성능 문제 진단하기

이 API를 먼저 살펴보라.

소개한 모니터링 및 문제 해결 도구들에 대한 문서와 예제


토론


필자소개

Cathy Kegley는 IBM의 Lotus Expeditor 클라이언트 팀의 소프트웨어 엔지니어다.


Greg Roberts는 IBM의 Lotus Expeditor 클라이언트 개발 팀의 스태프 소프트웨어 엔지니어다.

반응형
Generic (제너릭)
 
 
What ?
 
제너릭은 컬렉션(자료구조),
 
즉 쉽게 말해서 객체들을 저장(수집)하는
 
구조적인 성격을 보강하기 위해 제공되는 것.
 
 

0. GENERIC

다들 아시겠지만, Generic의 사전적인 의미는 다음과 같습니다.


 1.     (생물) 속의 , (성질) 속에 특이한

 2.     일반적인, 포괄적인

 3.     (수,인칭,시제) 총칭적인



1. generic 필요성

Java 에서는 객체들을 담아 편하게 관리하기 위해  Collection 을 제공한다. 이 Collection 의 대부분이

어떤 객체를 담을지 모르기 때문에 모든 자바 객체들의 base 객체 (최상위 객체)인 Object로

저장되어 설계하도록 설계되어 있습니다.

문제는 이 Collection 에 Element로 어떤 Type을 받아 들임이 좋을수도 있지만

서로 다른 Type이 하나의 Collection 에 섞여 들어 가는것이 문제 JDK 5.0 에 와서 제너릭이 포함되면서

이제는 실행하기 전에 컴파일 단계에서 특정 Collection 에 객체 타입을 명시하여

지정된 객체가 아니면 절대 저장이 불가능하게 할수 있습니다.

2. 제너릭의 타입

제너릭 타입은 < > 사이에 컴파일할 당시 사용될 객체자료형만 선언 해주면 객체를 저장할 때

선언된 제너릭 타입으로만 저장된다.

API 에서는 전달되는 객체가 현 객체 내에서 하나의 자료형(Type)으로 쓰일 때 <T> 로 유도하고 있으며

전달되는 객체가 현 객체 내에서 하나의 요소(Element)로 자리를 잡을때는 <E> 로 , 그리고 전달되는 객체가

현 객체 내에서 Key 값으로 사용될 때는 <K>로,

만약 전달되는 객체가 현 객체 내에서 Value 값으로 사용될 때는 <V> 로 표현된다.

3. 사용자 정의 제네릭 클래스  


앞에서 언급한 자료형을 제너릭으로 set 하고 print 해주는 간단한 사용자 정의 클래스를 만들어 보겠습니다.

/*
* FILE NAME  : Generic.java
* DATE   : 2007. 8. 5
* Written By  : yangck20@naver.com
*
*/
package ckbin.array;
public class Generic<T> {
 T[] v;
 
// Generic 타입으로 Set
 public void set(T[] n) {
  v = n;
 }
 
// T[] 원소 출력
 public void print() {
  for(T s : v)
   System.out.println(s);
 }

}




 

 
사용자_Class명 <적용할_제너릭 타입> 변수명;   // 선언
 
 
변수명 = new 사용자_Class명<적용할_제너릭 타입>( ) ; // 생성
 



4. 제너릭 타입 사용하기


사용자 정의형으로 만든 제너릭 클래스의 사용

 




위에서 생성한 사용자_Class를 사용하여 생성할때는 다음과 같이 생성자를 만들수 있습니다.

Generic<String> Gen = new Generic<String> ();

 위에서 생성한 사용자_Class 를 사용하는 Main Class 를 만들어 보겠습니다.

 /*
* FILE NAME  : GenericMain.java
* DATE   : 2007. 8. 5
* Written By  : yangck20@naver.com
*
*/
package ckbin.array;
import ckbin.array.Generic;
public class GenericMain {
 
 public static void main(String ar[]) {
 
  Generic<String> Gen = new Generic<String> ();
 
  String[] StrArr = {"디워","정말","보고파"};
 
  Gen.set(StrArr);
  Gen.print();

 
  Generic<Integer> Gen2 = new Generic<Integer> ();
 
  Integer[] IntArr = {2,0,0};
 
  Gen2.set(IntArr);
  Gen2.print();

 
 }
}
 
== 출력 결과 =============================================================================
디워
정말
보고파
2
0
0
 

 



















위 GenericMain 소스를 보면 Generic 클래스는 String 배열과

Integer 배열을 받아 출력해주는 아주 간단한 소스지만 타입을

달리주어 객체에 담은 배열들을 출력해주는것이 이상적입니다.

HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("1", new Integer(1));
map.put("2", 2);            // auto boxing
 
Integer i = map.get("1");   // 따로 캐스팅이 필요 없다.
int j = map.get("2");       // auto unboxing


이렇게 별도의 캐스팅 없이 처리할 수 있다는 점에서 좋아졌네요..

반응형

J2SE 5.0에는 새로운 언어 기능이 다수 도입되었는데, 여기에는 제네릭(Generics)과 향상된 루프문(Enhanced for Loop)이 포함된다. 제네릭(GENERIC)향상된 루프문에 대해서는 이미 이전 테크 팁에서 살펴본 바 있다. J2SE 5.0에 추가된 또 다른 중요한 기능으로 주석을 들 수 있으며, 본 팁에서는 J2SE 5.0에 내장된 주석을 살펴보기로 한다.

먼저, 주석이란 무엇인가? JSR 175: A Metadata Facility for the Java Programming Language의 일부로 정의된 주석은 메타데이터를 프로그램 엘리먼트(클래스, 인터페이스, 메소드 등)에 연결하는 방법을 제시해준다. 주석은 해당 엘리먼트에 대해 생성된 바이트코드를 변경하지 않는 추가 수식자(modifier)라고 할 수 있다.

메타데이터를 소스 코드에 도입한다는 개념은 J2SE 5.0에서 처음 등장한 것은 아니다. 사용자가 @deprecated 태그를 메소드의 javadoc 코멘트에 추가하면 컴파일러는 이를 메소드에 관한 메타데이터로 취급하는데, 이런 기능은 J2SE의 1.0 버전부터 포함되었다. 초기 버전의 플랫폼의 경우 이미 Systemgetenv() 메소드(1.1 addendum까지는 Java Language Specification에 포함되어 있지 않았음)와 더불어 구(deprecated) 메소드가 포함되어 있었지만, 현재로서는--적어도 구문의 @ 부분에 관한 한--개념은 거의 동일하다고 볼 수 있다. 단, 위치에는 변동 사항이 생겼다는 점을 알아두기 바란다--주석 태그가 코멘트가 아니라 소스에 포함된다. 여기서 주안점은 주석이 선언적 프로그래밍 모델을 체계적으로 지원하기 위한 방법이라는 사실이다.

이제 J2SE 5.0에 포함된 최초의 주석, @Deprecated부터 살펴보도록 하자. 우선 여기서는 대문자 D에 유의할 필요가 있다. 기능적으로 볼 때, 소스 내의 @Deprecated는 클래스 또는 메소드와 연결된 javadoc 내의 @deprecated와 동일하게 작동한다. 메소드에 @Deprecated 태그를 플래그하면 해당 메소드나 클래스 사용 시 사용자에게 경고 메시지를 보내도록 컴파일러를 환기시키는 효과가 있다.

아래의 Main 클래스는 @Deprecated 주석과 @deprecated 코멘트가 플래그된 deprecatedMethod()라는 이름의 메소드를 가진다.

  public class Main {

/**
* @deprecated Out of date. Use System.foobar() instead.
*/

@Deprecated
public static void deprecatedMethod() {
System.out.println("Don't call me");
}
}

주석이 붙은 클래스도 주석이 붙지 않은 경우와 동일한 방식으로 컴파일한다.

> javac Main.java

예상대로 Main.class가 생성된다.

deprecated 메소드를 사용하면 javadoc 내의 @deprecated 태그를 사용할 때와 마찬가지로 컴파일 시간 경고가 생성된다. 관련 예는 다음과 같다.

  public class User {
public static void main(String args[]) {
Main.deprecatedMethod();
}
}

아래의 클래스를 컴파일하면,

> javac User.java

deprecated 메소드를 사용하는 데 대한 경고 메시지가 다음과 같이 표시된다.

  Note: User.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

컴파일 라인에 -Xlint를 추가하면 무엇이 잘못되었는지 구체적으로 표시할 수 있다.

> javac -Xlint:deprecation User.java

User.java:3: warning: [deprecation] deprecatedMethod() in
Main has been deprecated
Main.deprecatedMethod();
^

1 warning

@deprecated 코멘트에서 @Deprecated 주석으로 변경되더라도 시스템에는 아무런 변화가 생기지 않으며, 단지 작업 수행 방식에 약간의 변화가 발생하는 것 뿐이다. 하지만 J2SE 5.0 플랫폼에 새로 추가된 다른 두 개의 주석, @Override@SuppressWarnings의 경우에는 플랫폼에 새로운 기능을 부여할 수 있다.

@Override 주석은 메소드 선언과 함께 사용할 수 있는데, 이름에서 알 수 있듯이 @Override 주석을 사용하여 수퍼클래스의 메소드를 오버라이드하도록 되어 있는 메소드를 플래그한다. 이 주석은 왜 사용하는 것일까? 오류를 더 신속하게 잡아내기 위해서이다. 아마도 여러분은 메소드를 오버라이드하려다가 메소드 이름의 철자를 틀리거나, 잘못된 인자를 지정하거나, 다른 리턴 타입을 설정했던 적이 무수히 많았을 것이다. 즉, 원래의 의도는 기존의 메소드를 오버라이드하는 것이었는데 그만 새로운 메소드를 정의해 버리는 결과가 종종 발생하게 되는 것이다. @Override를 이용하면 그나마 클래스에서 문제점을 빨리 발견할 수가 있다.

  public class Overrode {
@Override
public int hashcode() {
return 0;
}

@Override
public boolean equals(Object o) {
return true;
}
}

여기서 문제는 메소드 이름이 hashcode가 아니라 hashCode여야 한다는 점이다. 메소드 선언이 훨씬 더 큰 클래스 정의를 위해 소스에 묻혀 버린다고 가정해보자. 최초의 @Override 주석이 없다면, hashCode() 메소드(모두 소문자가 아니라, 대문자로 시작되는 두개의 영단어를 붙여 써서)가 호출되는 대신 상위 Object 클래스의 기본값 동작을 얻고 있다는 사실을 알아차리는 데 얼마나 많은 시간이 걸리겠는가? 하지만 이제는 @Override 주석 덕분에, 클래스 컴파일 시 컴파일 시간 오류가 생성되어 문제점을 경고할 수 있다.

> javac Overrode.java

Overrode.java:2: method does not override a method from its
superclass
@Override
^
1 error

이런 특성의 오류를 좀더 빨리 발견할 수만 있다면 수정에 드는 수고와 비용을 획기적으로 절감할 수 있을 것이다. hashCode() 메소드의 경우 절대로 상수를 리턴해서는 안된다는 점에 유의할 것. hashCode()equals()의 올바른 사용법에 관한 자세한 설명을 보려면 Joshua Bloch가 저술한 Effective Java Programming Language Guide(영문)의 8항을 참조할 것.

J2SE 5.0에 새로 추가된 주석의 마지막 @SuppressWarnings는 그 중에서도 가장 흥미롭다고 할 수 있다. 이 주석은 일반적으로 경고하는 내용을 경고하지 말도록 컴파일러에게 지시하는데, 경고는 일종의 범주에 속하므로 주석에 대해 어떤 종류의 경고를 금지할 것인지 지시해야 한다. javac 컴파일러는 all, deprecation, unchecked, fallthrough, path, serial, finally 등 7개의 금지 옵션을 정의한다. (언어 스펙은 이 중에서 두 가지-- deprecation과 unchecked--만을 정의함.)

예시를 위해 fallthrough 옵션 금지사항에 대해 살펴보기로 한다. 먼저 아래의 클래스를 사용해보자. 클래스에는 switch 문의 각 케이스에 대한 break 문이 빠져 있다는 점에 유의할 것.

  public class Fall {
public static void main(String args[]) {
int i = args.length;
switch (i) {
case 0: System.out.println("0");
case 1: System.out.println("1");
case 2: System.out.println("2");
case 3: System.out.println("3");
default: System.out.println("Default");
}
}
}

javac으로 클래스를 컴파일하면 단순히 .class 파일만 생성되고 경고는 표시되지 않는다는 것을 알 수 있다.

javac Fall.java

컴파일러가 fall through하는(즉, 하나 이상의 break 문이 빠져 있는) switch 문에 관해 경고하기를 원할 경우에는 -Xlint:fallthrough 옵션으로 컴파일한다.

javac -Xlint:fallthrough Fall.java

그러면 아래의 경고문이 생성된다.

Fall.java:6: warning: [fallthrough] possible fall-through into case
case 1: System.out.println("1");
^
Fall.java:7: warning: [fallthrough] possible fall-through into case
case 2: System.out.println("2");
^
Fall.java:8: warning: [fallthrough] possible fall-through into case
case 3: System.out.println("3");
^
Fall.java:9: warning: [fallthrough] possible fall-through into case
default : System.out.println("Default");
^
4 warnings

그러나 switch 문에 각 케이스에 대한 break 문이 빠져 있다는 사실을 무시하고 싶은 경우에는 어떻게 해야 할까? 바로 이 때 @SuppressWarnings 주석이 필요하다. main() 메소드 선언 앞에 다음 행을 추가하면,

@SuppressWarnings("fallthrough")

-Xlint:fallthrough 옵션으로 클래스를 컴파일할 경우,

   javac -Xlint:fallthrough Fall.java

.class 파일만 생성되고 경고문은 표시되지 않는다.

@SuppressWarnings 주석은 또한 컬렉션 엘리먼트의 데이터 유형을 지정하지 않고 컬렉션을 사용할 경우에 표시되는 것과 같은 그 밖의 경고를 금지하는 데도 사용될 수 있다. 그러나 단순히 컴파일 시간 경고를 피하기 위해서 @SuppressWarnings 주석을 사용해서는 안 된다. 제네릭을 염두에 두지 않고 구축된 라이브러리를 사용할 때처럼, 금지되지 않은 경고가 불가피한 경우에 이 주석을 사용하도록 한다.

이것으로 내장 주석 기능에 관한 설명은 마무리하고, 마지막으로 (인자를 포함한) 주석은 통상적으로 하나의 행에서 독자적으로 지정된다는 점에 유의하기 바란다.

J2SE 5.0에 이미 정의되어 있는 주석을 사용하는 것 보다 사용자가 직접 주석을 정의하는 경우에는 더 많은 기능들을 활용할 수 있다. 주석 정의에 관한 자세한 내용은 Annotations(영문)를 참조하기 바란다.

<출처 - http://kr.sun.com/developers/techtips/2006/c0713.html >

반응형
J2SE 6.0 1.5(한) 1.5(영)
J2EE 5.0 1.4
SERVLET 2.5 2.4
JSP 2.0
WEB DTD 2.3 2.4
HTML 4.1
CSS2

출처 : http://www.jakartaproject.com
반응형
유용한 즐겨찾기 모음 ======================================================================================= JDK 1.4 한글 도움말(javastudy) : http://www.javastudy.co.kr/api/api1.4/ JDK 1.4 한글 API(forcert) : http://www.forcert.com/programming/api/j2se/1.4.0k/index.html servlet api : http://jakarta.apache.org/tomcat/tomcat-4.1-doc/servletapi/index.html - 2.3 http://jakarta.apache.org/tomcat/tomcat-5.0-doc/servletapi/index.html - 2.4 jsp2.0 api : http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jspapi/index.html - 2.0 J2EE 한글 도움말 : http://forcert.com/programming/api/j2ee/1.3.0k/ J2EE 1.4 튜토리얼 : http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html JSTL 1.1 : http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html Spring API : http://www.springframework.org/docs/api/index.html Hibernate API : http://www.hibernate.org/hib_docs/api/ 자바 패키지별 예제(영문) : http://sangchin.byus.net/FlashHelp/Almanac.htm ================================================================================== 자바 싸이트 ----------------------------------------------------------------------------------- 자바스터디 : http://www.javastudy.co.kr/ (강좌 정리) 자바누리 : http://www.javanuri.com/ 자바랜드 : http://www.javaland.co.kr/ 소설같은 자바 : http://www.jabook.org/ (책 한권) 자바서비스넷 : http://www.javaservice.net/ (중고급 정보) 김상욱의 개발자side : http://50001.com/ (소스 등) 종스클럽닷컴: http://www.jongsclub.com/ JLAB : http://www.jlab.net/ OKJSP : http://www.okjsp.pe.kr/ 제이스톰 : www.jstorm.pe.kr/ 자바 튜토리알(영어) : http://java.sun.com/docs/books/tutorial/index.html 스윙 컴포넌트 예제(영어) : http://java.sun.com/docs/books/tutorial/uiswing/components/components.html MS SQL2000 JDBC 드라이버 다운로드 : http://www.microsoft.com/korea/download/server.asp 자카르타 프로젝트 한글화 : http://jakarta.apache-korea.org/ 자바지기 : http://wiki.javajigi.net/ 자바지기 eclipse 강좌 : http://wiki.javajigi.net/display/IDE/Eclipse 자바지기 struts 강좌 : http://wiki.javajigi.net/display/FRAMEWORK/Home 이클립시안 : http://eclipsians.net/ 자바 카페 : http://www.javacafe.or.kr/ 자바 API 예제(영어) : http://javaalmanac.com/egs/ Sun Korea Developer Network : http://kr.sun.com/developers/ IBM Java 입문서 : http://www-128.ibm.com/developerworks/kr/java/newto/ ================================================================================== JSP 싸이트 ----------------------------------------------------------------------------------- JSP 스쿨 : http://www.jspschool.com/ (정리 잘됨, 자료실 Good) OKJSP : http://www.okjsp.pe.kr/ (종류별로 정리잘된 싸이트) JSP스터디 : http://www.jspstudy.co.kr/ (오른쪽 메뉴중 lecture list 강좌보면 좋다) AboutJSP : http://aboutjsp.com/ (강좌, 팁, QnA 등) 자북 (소설같은 JSP) : http://www.jabook.org/ (책 소설같은 JSP의 1부, 2부 있음) 까오기 : http://www.kkaok.pe.kr/ (여러 유영한 팁들) 더블 아이큐 : http://www.doubleiq.pe.kr/ (정리된 강좌와 QnA 등 ) 김호 JSP : http://www.kimho.pe.kr/jsp/index.html ================================================================================== J2EE 싸이트 ----------------------------------------------------------------------------------- J2EE 스터디 : http://www.j2eestudy.co.kr/ 웹로직 관련 문서 등 있는 싸이트 : http://www.itadvisor.co.kr/ ======================================================================================== 홈페이지 관련 싸이트 ----------------------------------------------------------------------------------- 태그매니아 : http://www.tagmania.net/ 야자바 HTML : http://www.yajava.com/shop/mart7/inc.php?inc=content_main/html HTML's Land : http://ilovehansem.com/~html/ ib96 동영상 무료 회원 HTML 강좌 : http://htm.ib96.com/ 태그조아 : http://www.tag.zoa.to/ 모노카페 : http://my.dreamwiz.com/monocafe/ 김덕현 : http://my.dreamwiz.com/kim0057/ 송파나루터 : http://www.studyho.com/ 트리오 : http://trio.co.kr/ 태그대학 : http://www.tag4u.wo.to/ 송현건 : http://home.introcom.net/~gosoo99/ 스타트 홈페이지 : http://www.starthomepage.com/index.jsp 태그야 놀자 : http://www.tagyanolja.com/ 컴으로 허자허자(다음카페) : http://cafe.daum.net/herjaherja 태그 연습장(컴으로 허자허자) : http://www.herjaherja.com/bonus/tag.htm 태그 연습장(샐리디카) : http://myhome.naver.com/sallynice/blog/sallyedit.htm ======================================================================================== 자바스크립트 관련 싸이트 ----------------------------------------------------------------------------------- 자바스크립트 정리 Good : http://koxo.com/lang/js/ 자바스크립트 인터넷 강의 : http://javascript.ubedu.com/ CGI & JavaScript : http://www.cginjs.com/ JS Guide : http://jsguide.net/ver2/ 이용석의 자바스크립트 : http://user.chollian.net/~spacekan/ 블루 비 : http://www.blueb.co.kr/ 자바방 : http://javabang.net/ 학꺼니 홈 : http://user.chollian.net/~chk012/frame.html 까오기(왼쪽 developer 메뉴의 javascript 클릭) : http://www.kkaok.pe.kr/ 해피스크립트 : http://www.happyscript.com/ 자스코 (유료싸이트) : http://www.jasko.co.kr/ 영문 싸이트 : http://www.devguru.com/Technologies/ecmascript/quickref/javascript_index.html 자바스크립트 정리(영어 사이트) : http://www.javascripttoolbox.com/bestpractices/ ======================================================================================== 개발자 참고 싸이트 ----------------------------------------------------------------------------------- 웹 개발자 가이드 : http://www.mozilla.or.kr/docs/web-developer/standard/ MSDN 링크 : http://msdn.microsoft.com/library/default.asp ======================================================================================= 온라인 해킹/바이러스 진단 및 치료 프로그램(국민은행 제공, 하우리 백신) : http://update.inca.co.kr/kookmin/livecall/kook_livecall.html ======================================================================================= ====================================================================================== 기타 관련 다운로드 싸이트(JDK, MySQL, 톰캣 등) ====================================================================================== JDK 1.4.x 자바 Development Kit http://java.sun.com 톰캣 : http://tomcat.apache.org/ --------------------------------------------------------------------------------------- MySQL MySQL 데이터베이스 http://mysql.com 한국 MySQL : http://mysqlkorea.co.kr/ MySQL Connector/J (JDBC Driver for MySQL) http://dev.mysql.com/downloads/connector/ MySQL-Front : http://www.mysqlfront.de/download.html SQLyog(MySQL툴) 다운 : http://www.webyog.com/sqlyog/thanks.php --------------------------------------------------------------------------------------- 오라클 9i 링크 : http://www.oracle.com/technology/software/products/oracle9i/index.html 오라클 다운 : http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk1.zip http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk2.zip http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk3.zip ================================================================================== All In One Eclipse 이클립스 다운로드 ---------------------------------------------------------------------------------- 일본어 : http://aioec.sourceforge.jp/cgi-bin/wiki.cgi 영어 : http://aioec.sourceforge.jp/cgi-bin/wiki.cgi?page=english%5Ftop ================================================================================== 이클립스 eclipse 3.1.1 다운로드 정리 WTP 다운 : http://www.eclipse.org/webtools/ 이클립스 플러그인 순위 : http://eclipse-plugins.info/eclipse/ratings_overview.jsp 한국의 미러 싸이트 : http://eclipse.areum.biz/downloads/ (톰캣 개발시 유용한 플러그인) 톰캣 플러그인 : http://www.sysdeo.com/sysdeo/eclipse/tomcatplugin 직접 다운 : http://www.sysdeo.com/sysdeo/content/download/393/4930/file/tomcatPluginV31.zip tomcatPluginV31.zip 다운 받아서 압축 해제해서 C:\eclipse\plugins 에 복사 ================================================================================== 자카르타 Ant 한글 싸이트 : http://ant.apache-korea.org/ 자카르타 Ant 다운로드 : http://ant.apache.org/bindownload.cgi 다운로드 리스트 : http://archive.apache.org/dist/ant/binaries/ ant 1.5.4 다운 로드 : http://archive.apache.org/dist/ant/binaries/apache-ant-1.5.4-bin.zip ant 1.6.5 다운 로드 : http://ftp.apache-kr.org/ant/binaries/apache-ant-1.6.5-bin.zip ---------------------------------------------------------------------------------------- 자바스크립트 에디터 : http://sourceforge.net/projects/jseditor http://heanet.dl.sourceforge.net/sourceforge/jseditor/net.sf.wdte.js_0.0.9b.zip CSS 에디터 : http://www.vasanthdharmaraj.com/Software.aspx?=csseditor JSEclipse : http://www.interaktonline.com/downloads/eclipse/100/JSEclipse_1.2.1.zip AnyEdit : http://andrei.gmxhome.de/anyedit/links.html --------------------------------------------------------------------------------------- (스트럿츠 개발시 유용한 플러그인) EasyStruts : eclipse 에서 스트럿츠 개발시 사용하는 플러그인. 1. 다운로드 : 주소 http://sourceforge.net/projects/easystruts 2. 직접 다운로드 http://prdownloads.sourceforge.net/easystruts/org.easystruts.eclipse_0.6.4.zip?download --------------------------------------------------------------------------------------- (스트럿츠) 1. 스트럿츠 다운 http://archive.apache.org/dist/struts/ 2. 스트럿츠 직접 다운로드 http://ftp.apache-kr.org/struts/binaries/struts-1.2.7.zip http://mirror.apache.or.kr/jakarta/struts/binaries/jakarta-struts-1.1.zip (ANT 다운 로드) http://www.apache.org/dist/ant/ --------------------------------------------------------------------------------------- (스트럿츠 참고 싸이트) 자바 프레임워크(네이버 스트럿츠 카페) : http://cafe.naver.com/deve.cafe ======================================================================================= MyClipse 동영상 자료 : http://www.myeclipseide.com/images/tutorials/webprojectdemo.htm ======================================================================================= 우키의 블로그 : http://www.jaewook.net/ 한글패치 : http://lang.playxp.com/ 웹마 : http://www.mdiwebma.com/ jwBrowser : http://samba.ssyy.net/ 구글 : http://www.google.co.kr 심파일 : http://simfile.chol.com/ 이클립스 : http://www.eclipse.org/ ie toy, ad-free : http://loser.miniwini.com/tt/ 자료 : http://baechul.com/cgi/technote/main.cgi?board=pds 브피피닷넷 : http://vbpp.net/ 자료 소스 : http://semtle.cuk.ac.kr/bbs/list.php?id=pds 웹빌드 : http://www.webbuild.co.kr 넷탑 : http://www.nettop.pe.kr 파워빌더 유저 가이드 : http://www.pbuser.com/main.html 미친감자 : http://mazinga.egloos.com/ EditPlus 자바 컴파일 설정 : http://www.javacafe.or.kr/lecture/cafeLecture/tool/EditPlusSetting/EditPlusSetting.htm 구글 툴바 : http://toolbar.google.com/T3/intl/ko/index_ie.php ================================================================================== PDA 싸이트 ----------------------------------------------------------------------------------- 투데이스피피시 : http://www.todaysppc.com PDA 프로그램 모음 싸이트 : http://www.fingertool.com/ 포인트피디에이 : http://www.pointpda.com 코리아닷컴 피디에이 : http://pda.korea.com/ 정리 잘된 싸이트 : http://www.114pda.com/ 무료 PDA 소프트웨어(영어) : http://www.freewareppc.com 클리앙 : http://www.clien.net/ PDA용 GPS : http://www.freenavi.co.kr/ PDA용 GPS : http://shop.free-gps.com/ RW6100 드라이버 다운로드 : http://h50177.www5.hp.com/support/FA294PA/drivers/os_2045.html RW6100 메뉴얼 : http://h50201.www5.hp.com/manual/index.asp MissPDA : http://www.misspda.com/ 아이핸디고(외국의 아방고와 비슷한 한국판 사이트) : http://www.ihandygo.com/ 마이폴더 PDA 자료실 : http://pda.myfolder.net/ PDA용 뉴스 싸이트 정리 : http://clip.bakion.com/ PPC용 프로그램 개발(영어) : http://www.codeppc.com/ ================================================================================== XML 싸이트 ----------------------------------------------------------------------------------- 안항준의 XML : http://my.netian.com/~aphise/ XML 스터디 : http://www.xmlstudy.co.kr/ 김종민의 XML : http://xml.80port.net/ 자바지기 : http://www.javajigi.net/ XML Developer Group : http://xml.geonji.co.kr/ Rapsodie's XML Resource : http://user.chollian.net/~rapsodie/main.html 용어사전과 XML : http://trio.co.kr/ HowXML : http://www.howxml.com/ 군산대학교 XML 연구실 : http://xmlab.kunsan.ac.kr/ XML 강좌 링크 : http://www.howon.ac.kr/~ktlim/lecture/xml/xml-index.htm 코리아 인터넷 XML 강좌 : http://korea.internet.com/channel/index.asp?cid=193 XML 홈페이지 만들기 강의 자료 : http://muse.inchon.ac.kr/jschae/internet_xml.html XML 강의 자료 : http://kuic.kyonggi.ac.kr/~ejlee/xml/#course-note XML 강의 : http://hyejeon.ac.kr/%7Ekrkuki/xmlq_1.html 자바지기 XML 강좌 : http://wiki.javajigi.net/display/XML/Home ================================================================================== 기타 싸이트 ----------------------------------------------------------------------------------- 소스들 : http://bluebild.byus.net/ 구글툴바 : http://toolbar.google.com/intl/ko/index_ie.php 개인 이글루 싸이트(프로그래밍) : http://kwon37xi.egloos.com/ 자카르타프로젝트(?) : http://www.jakartaproject.com/ TDD : http://wiki.tdd.or.kr/wiki.py CSS : http://ilmol.com/wp/css DB Desiner 4 : http://www.fabforce.net/ manwal 블로그 : http://blog.etnews.co.kr/html/blog_home.php?bid=manwal 데이타베이스 사랑 넷 : http://database.sarang.net/ Xrath 블로그 : http://xrath.com/blog/index.php?category=Development 루비 : http://forum.rubykr.org/ 루비 홈 : http://www.ruby-lang.org/en/ RDE : http://homepage2.nifty.com/sakazuki/rde_e.html MMF 플레이어 : http://www.playersparadise.net/download/ 누룽지 : http://www.nulunggi.pe.kr/ JavaRSS : http://javarss.pe.kr/ ======================================================================================== OKJSP 동영상 강좌 : http://www.okjsp.pe.kr/lecture/viewlet/ 이클립스 톰캣 디버그 : http://www.okjsp.pe.kr/lecture/viewlet/okjsp2005/10_lomboz_tomcat_debug.html Xper 위키 : http://xper.org/wiki/xp/ 자카르타 한글 번역 : http://jakarta.apache-korea.org/ 이클립시안 : http://eclipsians.net/ 국현님 싸이트 : http://goodhyun.com/ Jazz Virtual Machine : http://www.jazzvm.net/ 오라클자바 : http://www.oraclejava.co.kr/ JavaJiGi 강좌 1. Eclipse 강좌 2. Struts 강좌 3. XML 강좌 빌크 블루엣 인터내셔널에서 운영하는 작은 커뮤니티 : http://www.bilc.co.kr/ 구글 바로 가입하기 : http://www.bytetest.com/ larky : http://larky.biz/blog/ mabaji " http://tong.nate.com/mabaji J2EE Study : http://www.j2eestudy.co.kr 한국 JBoss 사용자 그룹 : http://www.krjbug.com/ 행복한고니 블로그 : http://mygony.com/tt/index.php 주홍넷 : http://www.joohong.net/ (게임기획) NT FAQ : http://www.ntfaq.co.kr/ 해킹 : http://www.ganseo.com/zboard/new_center.php ======================================================================================== 데이타베이스 관련 싸이트 ======================================================================================== 오라클 강좌 : http://oracleclub.com/ 오라클용 무료 DB 툴 (DBA Master 2000) : http://www.dbany.com/ 데이타베이스 정보 : http://www.databaser.net/ Korea Oracle Use Group : http://www.koug.net/ 데이터베이스 벤더간 함수, 문법 비교 : http://www.crossdb.com/dbknowledgebase/differencestable.html 데이타베이스 : http://home.ditco.com/~angel/Advanced/advanced.html 무료 오라클 툴(SmartSQL) : http://smartsql.hubweb.net/ ======================================================================================== 인터넷 서점 ======================================================================================== 도서가격 비교 (마이마진): http://book.mm.co.kr/ 강컴 : http://www.kangcom.com 네이버 책 : http://book.naver.com/ 리브로 : http://www.libro.co.kr/books/index.asp?mall_id=1 알라딘 : http://www.aladdin.co.kr/home/wbookmain.aspx 모닝365 : http://www.morning365.com/ 반디앤루니스 : http://www.bandibook.com/ yes24 : http://www.yes24.com 교보 : http://www.kyobobook.co.kr/ ======================================================================================== 파이썬 관련 싸이트 ======================================================================================== 파이썬 문서고 : http://home.paran.com/johnsonj/ Python : http://www.python.org/ 왕초보를 위한 파이썬 : http://turing.cafe24.com/ ======================================================================================== C 컴파일러 다운로드 ======================================================================================== C++ 다운로드 : http://turboc.borlandforum.com/impboard/attach/0000043200/tc++win31.zip MS Visual C++ Toolkit 2003 : http://msdn.microsoft.com/visualc/vctoolkit2003/ 볼랜드 BC++ 컴파일러 : http://www.borland.com/products/downloads/download_cbuilder.html 아래의 Compiler 라고 써있는 링크를 클릭하면 다운로드 받을 수 있음. Compiler Windows 5.5 08/24/2000 8.7 Mb 무료 C++ 컴파일러 DevC++ : http://turboc.borlandforum.com/impboard/attach/0000071056/devcpp4990setup.exe ======================================================================================== 프로그램 소스 모음 링크 ======================================================================================== 생각하며 배우는 C++ 소스 링크 : http://www.hanbitbook.co.kr/example/1277/ 알기쉽게 풀어쓴 웹로직과 EJB 소스 : http://www.hanbitbook.co.kr/exam/1278 자바5.0 프로그래밍 소스(한빛미디어) : http://hanbitbook.co.kr/example/1377/ 인포북 소스 : http://www.infopub.co.kr/info/pds/group_pds/bbs.asp 정보문화사 소스 : http://www.infopub.co.kr/jungbo/pds/group_pds/bbs.asp 영진 프로그래밍 소스 링크 : tp://board3.youngjin.com/bbs/List_new.asp?bbsidx=135 대림 자료실 : tp://www.drbook.co.kr/pds/?pds=1-1 한빛 자료실 : tp://www.hanbitbook.co.kr/old_board/arumari2.html?id=data&n=&s=&query=&t=&kind=&page=0 한빛 미디어 소스 : http://www.hanbitbook.co.kr/exam/ ======================================================================================== 크랙 링크 ======================================================================================== http://www.astalavista.box.sk/ http://www.crackdb.com/ ======================================================================================== 지도 링크 ======================================================================================== 네이버 지도 : http://local.naver.com/navermap_browser/?mode=1&init=1 엠파스 지도 : http://map.empas.com/ 지도 찾기 : http://www.speednavi.co.kr/searchmap/ 지하철 노선도 : http://www.smrt.co.kr/cyberstation/cyberstation.jsp?sv=1&skind=1&goline=undefined ======================================================================================== 포토샾 ======================================================================================== http://www.photoshopq.com/ ======================================================================================== 기타 ======================================================================================== 폭 맞춰 출력하기 : http://www.visiontech.ltd.uk/ (설명 : 인터넷 익스플로러에서 프린트할 때 내용이 폭에 안 맞아 짤릴때 사용하면 좋음) (방법 : 클릭해서 들어가서 콘트롤 설치한 후 상단 표준단추에 "빨간 W"로 프린트) 테이블은 이제 그만 쉬어야할 때 1 : http://ilmol.com/wp/2005/06/09/25/ 테이블은 이제 그만 쉬어야할 때 2 : http://ilmol.com/wp/2005/08/15/110/ 웹에서 테이블을 DIV로 변경 : http://www.qindex.info/Q_drctry/webtools/StylingTable.asp 레이아웃을 위해 테이블 사용이 잘못된 이유:문제의 원인, 해결방안 : http://softwant.com/standards/index.php ======================================================================================== 컴퓨터 싸게 사기 ======================================================================================== http://www.pops4u.co.kr/ http://www.assacom.com/ ======================================================================================== 컴퓨터 싸게 사기 ======================================================================================== 하드웨어 정보 보여주는 유틸 (everest ) 램 종류와 속도가 궁금해서 찾아봤음 : http://file.naver.com/cgi-bin/simSearchPds.cgi?start=&number=&cat=99&q=everest&w=t&opt=0&x=38&y=13 ======================================================================================== 기타 유용한 정보(?) 잡학지식 ======================================================================================== 휴면 계좌 통합 조회 : http://www.sleepmoney.or.kr/default_cust.jsp 중국사람이 만든 웹 OS ^^ : http://www.pc2n.com/staticos/index.html ======================================================================================== 블로그 ======================================================================================== 네이버 블로그 http://blog.naver.com/free7sh http://blog.naver.com/swinter8 http://blog.naver.com/drods http://blog.naver.com/mmfcom http://blog.naver.com/imcho57 http://blog.naver.com/khd7138 http://blog.naver.com/julymorning4 http://blog.naver.com/geerark 엠파스 블로그 http://blog.empas.com/ahnyounghoe/ 이글루스 블로그 http://kwon37xi.egloos.com/ ======================================================================================= Eclipse Article Eclipse 시작 Eclipse 시작하기 : JDK 설치에서부터 Eclipse 다운로드등 Eclipse를 처음 시작하는 개발자들이 알아야하는 내용에 대하여 다루고 있다. Eclipse에 새로운 플러그인 설치하기 : Eclipse에 새로운 플러그인을 추가하는 방법에 대하여 두가지로 나누어 살펴본다. 또한 새로운 플러그인을 찾을 수 있는 방법에 대해서도 다룬다. Eclipse 사용시 알아두면 좋은 유용한 단축키 모음 Eclipse 강좌 Eclipse 사용을 위한 동영상 강좌 : Eclipse 3.1이 배포되면서 좋은 동영상 강좌들이 많이 올라와 있다. Eclipse의 많은 기능들을 느끼고 사용해 볼 수 있다. Eclipse 에서 Middlegen 사용하기 : 프로잭트를 하다보면 Database의 변경이 있을 수 있다. 만일 이러한 상황에서 Hiberanate같은 framework를 사용할 시에 변경될 때마다 해당 xml mapping파일과 java dto 객체를 생성하는 일은 참으로 번거로운 일이 아닐 수 없으며 이러한 비용을 줄이기 위해 eclipse용 plugin으로 middlegen이 나왔습니다. Eclipse 사용시 유용한 팁 Eclipse 사용시 알아두면 유용한 팁 Eclipse 성능 높히기 Eclipse 기반하에서 Remote Debugging 설정 : Eclipse 기반하에서 Remote Debugging을 실행하는 방법에 대하여 다룬다. Eclipse With PlugIn Eclipse에 Web Tools Project 설치 및 사용방법 : 지금까지 Eclipse에서 불편하게 느꼈던 웹 개발의 편의성을 향상 시켜줄 막강한 플러그인에 관한 설치에서부터 다양한 툴들을 사용방법에 대하여 다룬다. Eclipse에 Tomcat Server플러그인 설치하기 Eclipse에 JRUN Server플러그인 설치하기 Eclipse에 JBoss Server플러그인 설치하기 Eclipse에 Lomboz플러그인 설치하기 1 Eclipse에 Lomboz플러그인 설치하기 2 Eclipse With 버전 관리 시스템 CVS 설치와 Eclipse와의 연동 Eclipse와 CVS과 연결하여 사용하기 [Eclipse와 CVS를 이용하여 팀 작업하기] Subversion 설치 및 Eclipse와의 연동 Visual Source Safe 설치와 Eclipse와의 연동 Children Hide Children | View in hierarchy Eclipse에 Web Tools Project 설치 및 사용방법 (통합 개발 환경) Eclipse 시작하기 (통합 개발 환경) Eclipse에 새로운 플러그인 설치하기 (통합 개발 환경) Eclipse 사용시 알아두면 좋은 유용한 단축키 모음 (통합 개발 환경) Eclipse 사용시 알아두면 유용한 팁 (통합 개발 환경) Eclipse 성능 높히기 (통합 개발 환경) Eclipse에 Tomcat Server플러그인 설치하기 (통합 개발 환경) Eclipse에 JRUN Server플러그인 설치하기 (통합 개발 환경) Eclipse에 JBoss Server플러그인 설치하기 (통합 개발 환경) Eclipse에 Lomboz플러그인 설치하기 1 (통합 개발 환경) Eclipse에 Lomboz플러그인 설치하기 2 (통합 개발 환경) CVS 설치와 Eclipse와의 연동 (통합 개발 환경) Eclipse와 CVS과 연결하여 사용하기 (통합 개발 환경) Subversion 설치 및 Eclipse와의 연동 (통합 개발 환경) Visual Source Safe 설치와 Eclipse와의 연동 (통합 개발 환경) Eclipse 에서 Middlegen 사용하기 (통합 개발 환경) Eclipse 기반하에서 Remote Debugging 설정 (통합 개발 환경) java.net과 이클립스를 이용한 오픈소스 자바 어플리케이션 개발 이 튜토리얼은 이클립스를 소개하고 이를 활용하여 java.net에 호스팅 된 자바 어플리케이션 개발에 대해 살펴봅니다. 1부. 이클립스에서 새로운 프로젝트 생성하기 2부. 이클립스와 CVS를 이용한 팀 개발 ======================================================================================= 자바를 닷넷으로 바꿔주는 프로젝트 (MS) : http://msdn.microsoft.com/vstudio/downloads/tools/jlca/default.aspx 닷넷을 자바로 바꿔주는 프로젝트(라이브러리, 넷빈즈 플러그인) : https://net2java.dev.java.net/ HTML, JavaScript, ASP 등 : http://www.dragoneye.co.kr/ 웹 기획 문서 링크 : http://www.ihelpers.co.kr/webdevdoc/index.php 기획 찜 : http://plan.jjim.com/ ======================================================================================= 사이버유 강의실 Ⅰ. 인터넷기초 & 홈페이지 인터넷과 전자상거래 홈페이지만들기(HTML) Ⅱ. 시스템&프로그램 설치 퍼스널 웹서버(PWS) 설치 액세스로 데이터베이스 만들기 MS-SQL 서버설치 및 운영 리눅스에서 MAP 설치 오디비씨(ODBC) 설정 Ⅲ. 자바(Java) 프로그래밍 자바 프로그래밍 자바이야기 [※ 음성강의] 자바 웹프로그래밍(JSP) [※ 음성강의] 웹 정보추출 에이전트 Ⅳ. 데이터베이스(DB) 구조적 질의어 (SQL) Oracle DBMS & SQL (Link) MySQL for Linux Ⅴ. C언어 프로그래밍 C 언어 프로그래밍 (권수태,황인수) Unix & C Language CGI 프로그램의 개념과 폼 태그 CGI 기초와 CGI 예제 Ⅵ. 액티브서버페이지(ASP) 프로그래밍 ASP(Active Server Pages) 기초 | ASP란? | ASP 문법 | ASP 객체 | 웹과 디비연동 프로그래밍 파일 업로드(Upload) (기초, 예제) ASP와 비주얼 베이직 함수 예제로 배우는 ASP 프로그래밍 | 사용자인증 | 방명록 | 게시판 | Ⅶ. 강의자료(PPT) 경영정보시스템 [ MIS의 이해 ] 의사결정지원시스템 시스템분석 및 설계 데이터베이스 자바 프로그래밍 컴퓨터기초및언어 emwac 설치 : http://empire.achor.net/v7/lesson/win2000/ Oracle Database 10g: The Top 20 Features for DBAs : http://www.oracle.com/technology/pub/articles/10gdba/week5_10gdba.html 손병목의 지식공유 : http://www.itmembers.net/ apmsetup (아파치 PHP MySQL 한방에 설치) : http://www.apmsetup.com/ ======================================================================================== 번역 ======================================================================================== 구글 번역 : http://www.google.co.kr/language_tools?hl=ko 알타비스타 번역 : http://babel.altavista.com/translate.dyn icanread 영어 번역 : http://www.icanread.co.kr/ektran/ektran.html 짧은 문장 번역 : http://standard.beta.amikai.com/amitext/indexUTF8.jsp 영어 문장 번역 : http://ns.cnenews.net/ek-web/cgi-bin/sentTrans-ek 영어/일본어 단문 번역 : http://gtlac.keric.or.kr/cm_menu/home/translate/english.jsp 한중일 번역 : http://www.infoseek.co.jp/Honyaku?pg=honyaku_top.html ======================================================================================== 유용한 링크 ======================================================================================== nullsoft 인스톨 프로그램(무료) : http://nsis.sourceforge.net/Main_Page JBoss IDE tutorial : http://docs.jboss.com/jbosside/tutorial/build/en/html/index.html 자바지기 위키 WIKI : http://wiki.javajigi.net/homepage.action =========================================================================== JBuilder 2005 Foundation - 완전무료 자바 개발툴 =========================================================================== 완전히 무료로 쓸 수 있는 자바 개발툴, JBuilder 2005 Foundation입니다. 심지어 등록조차 필요가 없습니다. J빌더의 가장 기본적인 기능만 있지만, 그래도 같은 무료 배포인 이클립스보다는 강력하다고 하네요. 윈도우용 설치프로그램/문서/예제 http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_windows.zip http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_docs_windows.zip http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_samples_windows.zip 리눅스용 설치프로그램/문서/예제 http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_linux.tar.gz http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_docs_linux.tar.gz http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_samples_linux.tar.gz 솔라리스용 설치프로그램/문서/예제 http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_solaris.zip http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_docs_solaris.zip http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_samples_solaris.zip 맥용 설치프로그램/문서/예제 http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_mac.zip http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_docs_mac.zip http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_samples_mac.zip Extras - Ant 1.6.2 http://file.borlandforum.com/jbuilder/JBuilder2005Foundation/jb2005_fnd_extras.zip eclipse WTP J2EE Tutorials Building a CMP Based School Schedule Web Application This tutorial is similar to the Building a School Schedule Web Application except EJBs are used. This tutorial walks the user through developing a Container Managed Entity Bean (CMP) to store a simple schedule. A Session Bean is used to query the CMP. Finally, a Servlet and JSP are built to serve as the front end. Building and Running a Web Application This document is the first in a series of tutorials where we will demonstrate how you can use the rich set of tools and APIs that comes with the Web Tools Platform Project. This first tutorial will give you a step by step tour of using some the tools for web development. For this purpose we will build and run a J2EE web application using WTP tools and Apache Tomcat. Building a School Schedule Web Application In this tutorial you will create a school schedule Web application. This application will allow students to input their courses and create a schedule. This tutorial will introduce you to JSP's, servlets and the Web Tools Platform project's server tools. Building a Simple EJB Application In this tutorial you will create a simple EJB component and a client web application. This tutorial will introduce you to Session beans and the Web Tools Platform project's support for XDoclet and server tools. Cactus Integration in the Web Tools Project This article briefly explains Cactus, its common uses and advantages and then provides a step-by-step tutorial on how to use the Cactus integration provided by WTP. The article assumes that you are familiar with JUnit and the basics of using WTP to build, deploy and run web projects. Deploy Web Applications to the Oracle Application Server This tutorial will step you through the details of deploying a Web Application to the Oracle Application Server Containers for J2EE (OC4J). SDN JCreater Tutorial : http://developers.sun.com/prodtech/javatools/jscreator/learning/tutorials/index_ko.jsp

+ Recent posts