어젠 날씨가 무지 변덕스럽더군요. 눈이 막 쏟아지다가 그쳤다가 ㅋㅋ
요새 날씨는 정말 한겨울 같습니다. 춥네요.

오늘은 마지막으로 Mysql설치한다음 DB와 연결테스트를 한번 해보겠습니다.
머 여기까지 한번 해보면 대충 이런거구나 하실껍니다.
(물론 수박겉핥기지만, 그래도 수박이란건 알지 않았습니까? ^^ )

5. Mysql설치하세요.
   메인 홈페이지: http://www.mysql.com/
   예전에는 무조건 Free 였지만, 이제는 상용버전을 따로 팝니다.~
   다운로드 주소는 http://dev.mysql.com/downloads/mysql/5.0.html 입니다.
   보면 Mysql Community Server에서 5.02가 있네요. 다운로드 받으세요.~

Mirrors in: Korea, Republic of

    We have looked up your IP address using MaxMind GeoIP, and believe that these mirrors may be closest to you. A complete list of mirrors by continent is below.

  • South Korea [byungsoo.net] HTTP FTP
  • South Korea [New21.COM] HTTP

위는 한국 Mirror 사이트 입니다.

사용자 삽입 이미지

모두 설치 하셨나요? 계정은 알아서 기입하시구 설치하세요 (무책임 ㅋㅋㅋ)
참고로 Database 에 좋은 자료나 팁을 주는 사이트를 소개합니다.

데이터 베이스 사랑넷(http://database.sarang.net/)

유명한곳이죠. 대부분 아실거라 믿습니다.

그리고 아래의 프로그램을 추천합니다.
Mysql 사이트에서 http://dev.mysql.com/downloads/gui-tools/5.0.html 로 가보세요.
윈도우 GUI 툴을 다운로드 받을수 있습니다. 아주 편하죠. ^^
MSSQL 클라이언트나, TOAD 처럼 Mysql에 접속하여 여러가지 기능(INSERT,UPDATE, etc..)을 수행할수 있습니다. ( 이프로그램은 GNU 라이센스 입니다. :)   )

아래는 GUI 툴중에 있는 어드민 프로그램이빈다.(시작,정지, 계정, DB생/삭제 등을 할수 있습니다.)
사용자 삽입 이미지

Mysql을 모두 설치하셨나요.
이제 Java JSP와 같이 연동하기 위해서 연결 드라이버(JDBC)를 다운로드 받아야 합니다.
이것역시 Mysql에서 제공하고 있습니다.
Java와 DB를 연결해주는 이런 드라이버는 각 Database 프로그램 사이트에서 모두 제공하고 있습니다.

다운로드 장소: http://dev.mysql.com/downloads/connector/

위에서 Connector/J: 이부분을 다운로드 받으세요.
다운로드 받은 파일을 풀면

사용자 삽입 이미지
위와 같이 나옵니다. 여기서 최종적으로 필요한것은 mysql-connector-java-5.0.5-bin.jar 입니다.
이안에 모든 필요한 라이브러리가 들어있습니다.

그럼 다른것은 모냐구요?
src:드라이버의 모든 소스
docs: 드라이버 클래스의 모든 api ( 전 정말 api란게 너무 좋습니다. ^^ MS에선 MSDN이겠죠. )


이제 mysql-connector-java-5.0.5-bin.jar  파일을 Eclipse의 전에 우리가 생성했던 웹 프로젝트
"TestWeb" 프로젝트에 추가해보겠습니다. 복사해서 붙여넣으세요.
항상 라이브러리는 어디에 붙여 놓는거라 했죠?

바로  웹프로젝트>Webcontent>WEB-INF>lib 디렉토리 입니다.

붙여넣으면 바로 Web-App Libraries 에 등록되는 것을 보실수 있습니다.
사용자 삽입 이미지

저기에 추가된다고 실제 WEB-INF/lib에 있는 파일이 없어진것은 아닙니다. 탐색기로 보세요 그대로 존재합니다. :)

추가된것이 안나타나면, 프로젝트 선택후 "F5"를 눌러 갱신해보자.~

이제 라이브러리도 추가했으니 DB연동을 테스트 해보겠습니다.


2. Mysql DB 연동 테스트
    먼저 테이블을 만들고 그 테이블에 INSERT/UPDATE하는것을 테스트 하지는 않을게요.
    그건 이리저리 쿼리도좀 보시고 수박안도 먹고싶으실때 공부해서 해보세요. (여전히 무책임 ㅋㅋ :)  )

====================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*" %>
.. ..

<%
 String url = "jdbc:mysql://localhost/test";
 Connection conn=null;
 try {
     Class.forName("org.gjt.mm.mysql.Driver");
     conn = DriverManager.getConnection (url, "root", "password");
 } catch(Exception e) {
     out.println(e);
 }
%>

..
=======================================================
위의 코드를 TestWeb>WebContent>index.jsp 파일에 작성해서 실행해 보세요.

단순히 연결이 되는지만 확인하는 겁니다. ㅎㅎ
물론 mysql에 설정한 계정과 비밀번호를 설정하셔야겠죠? 물론 여러 SQL 함수를 쓰기위해 java.sql.*를 임포트 하셔야 합니다.


여기 까지 이네요. 정말 훑어만 보는것이었네요 .복잡한것이 무지 많습니다.
좀더 관심이 있거나 공부하고 싶으시면
책을 보시거나,

- 자바카페 동호회 : www.javacafe.or.kr (ㅋㅋ 우리동호회 광고-스터디 들으세요.좋습니다.)
- 아파치 사이트    www.apache.org (아파치, 이안에 정말 보물같은 자료들 많습니다.)
- 썬 개발 포럼     http://forum.java.sun.com/index.jspa (좋은 q/a 많아요.)

혹시 웹개발을 하실거라면 Apache의 Commons Lib를 사용해 보시기바랍니다.
주소(http://jakarta.apache.org/commons/index.html)

이제까지 여러 프레임웍을 사용해 봤지만 제일 낳더군요. 저는 이것과 다른걸 여러개 이용해서
자체 프레임웍을 만들어 사용했었습니다. 예전이지만요. ^^ (지금은 서버 개발하느라 정신이 ㅎㅎ)

by ncanis(조성준)









신고
Posted by -TED-

오늘도 새로운 하루가 밝았습니다.
오늘은 어제의 글에 이어 Tomcat 과 Mysql을 설치하여 보겠습니다.
어제도 춥지만, 오늘도 무지 춥네요.

먼놈의 날씨가 1월달 날씨인지 ㅡ.ㅡ;
집의 전기장판은 고장나고. 아오.~



3. Tomcat 5.5를 설치하세요.
    Tomcat 은 Apache(http://www.apache.org/) 의 메인프로젝트로 Jsp/Server을 구동할수 있는 웹 서버 입니다.
    그냥 Tomcat만 깔아도 충분합니다. ^^
    현재 6.0까지 나왔군요. 그렇지만 Eclipse WTP 1.5 에서는 아직 6.0을 지원하지 않습니다. 그러니 5.5를 설치하세요.
  다운로드 장소 : http://tomcat.apache.org/download-55.cgi
  에 들어가보시면 현재 5.5.20까지 있군요.
======================================================================================

inary Distributions

======================================================================================

자아 위에서 Binary Distributions/Core/zip 을 클릭하셔서 다운로드 받으세요.
그리고 그냥 압축을 원하는 디렉토리에 푸시면 됩니다. 따로 설치는 필요없습니다. (^^)
좋아하는 방식이지요. 레지스트리에 기록하는 방식 워~ 싫습니다.

자아 이제 Tomcat을 설치했으면 Eclipse에서 Tomcat을 설치했다고 알려줍시다.
Eclipse를 띄우시고 메뉴>Window>Preferences>Server>Installed Runtimes 를 선택하시면 Tomcat을
등록시키는 장소가 나옵니다. ADD 를 누르시고 Tomcat 깔린 곳의 장소를 기입해주세요.

사용자 삽입 이미지


위의 팝업을 참고하세요. 위에서 JRE는 jre 1.6.0 을 선택하셔도 됩니다.
이제 되었습니다. 이제 할일은 웹프로젝트를 만들어서 간단하게 Test 페이지를 구동시켜보겠습니다.

File>New>Project를 선택하신다음 Web>Dynamic Web Project를 선택하시고 Next를 누르세요.

사용자 삽입 이미지

그다음 프로젝트 이름을 기입하시고 Target Runtime에서 아까 등록한 Tomcat으로 지정합니다.

사용자 삽입 이미지

자아 이제 Finish를 누르세요.
아래와 같은 구조로 프로젝트가 생성되었을 겁니다.
여기에 대해 설명하지요.

사용자 삽입 이미지

먼저 Java Resources : src 디렉토리는 클래스가 들어가는 곳입니다.
Java 는 보통 ( JSP(보여주는부분) + Class(내부 모듈) + DB(데이터 저장) ) 로 되어있습니다.
MVC 보다는 좀더 간단하게 말입니다요. :)

그 클래스가 빌드되면 위치하는곳이 build>classes 이고요.

WebContent는 어디냐, 바로 웹의 최종 Root 입니다.
즉 WebContet 디렉토리 밑에 a.html 을 만들어 저장하고 웹사이트에 올리면
http://localhost:8080/a.html 같이 되는 겁니다. 이해 되시죠?

즉 모든 jsp 파일들은 Webcontent 밑에 있어야 합니다.

WEB-INF는 무엇이냐. 먼저 lib는 이 웹사이트가 실행하기 위해서 필요한 라이브러리가 들어가는 곳입니다.
(필요한 라이브러리는 이곳에 넣어주시면 됩니다. :) )
web.xml 파일은 이 웹프로젝트를 구동하는데 있어 필요한 환경설정이 들어가는 곳입니다.
대충 이해 되셨나요?

여기서, 중요한것이 있습니다. 웹서버는 라이브러리(* .jar ) 와 클래스파일( *.class)를 동시에 로딩합니다.
즉 만약 여러분이 Java Resources : src 에 클래스를 작성해서 빌드 되면
그 클래스는 이 웹프로젝트를 구동할때 자동으로 WEB-INF/classes에 들어가게 됩니다. 그러면 이렇게 구조가 되겠죠.

WEB-INF/ lib
            / classes
            web.xml

이제 jsp 페이지를 한번 만들어 보겠습니다. WebContent 디렉토리를 선택하시고
마우스오른쪽>New>JSP 를 선택 index.jsp를 File name으로 입력하시고  Finish를 누르세요.
그래서 나오는 파일 에디터에서 다음과 같이 입력합니다.

===============================================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head> <body>

<%
 out.println("Hello TestWeb");
%>

</body>
</html>
=================================================================================
빨간색부분을 입력하세요. 나머지부분은 알아서 생성되어져 있을것입니다.
이제 만들었으니 실행을 해보겠습니다.

TestWeb 프로젝트 선택> 마우스 오른쪽>Run As> Run on Server 를 선택하시고 아래와 같이 설정하신다음 Finish 를 누르세요. 그럼 실행되면서 웹브라우저가 아래와 같이 보여줄 것입니다.

사용자 삽입 이미지

아래는 실행결과입니다.


사용자 삽입 이미지
이제 끝났군요. ㅎㅎ

여기서 !! 참고.

클래스 파일을 만들면, Eclipse에서 이 프로젝트를 Run 시키면 특정디렉토리에 같은 내용을 복사하면서 classes를 만듭니다.(이프로젝트에는 말고요)

자아 Eclipse가 이 웹프로젝트를 빌드해서 보여주는 디렉토리입니다.
(잘 모르시는 분들도 계시더라고요.- 분명이 빌드했는데 안나온것은 이 디렉토리에 그파일이 없어서 입니다.)

Eclipse 작업디렉토리 > .metadata >.plugins > org.eclipse.wst.server.core

이곳입니다. 이곳에 보시면 예를 들어 다음과 같이 있습니다.

사용자 삽입 이미지


index.jsp는 아까 만든 파일입니다. 즉 Eclipse TestWeb 프로젝트에서 생성한다음 Run을 하면
이디렉토리에 바인딩해서 이클립스 가 실행시켜주는 거지요. ^^

쓰다보면 왜이렇게 시간이 빨리가는지.
항상 글솜씨가 부족합니다. 언제나 늘런지. 쩝.

이제 얼른 일해야 겠습니다. 내일은 간단하게 mysql 연결을 해봐야겠군요. ^^

by ncanis(조성준)

신고
Posted by -TED-

안녕하세요.
사람은 항상 복잡한가 봅니다.
오늘 아침 신문을 보면서 출근(회식이라) 하는데, 기사가 눈에 띄지가 않더군요.
그저 그런 뉴스였습니다.

오늘은 그래서 자바 웹개발 초보분들(시작한지 하루)을 위해
개발 환경을 어떻게 하면 좋을까 물어보는 분들이 많아서 함 만들어 볼려고 합니다.
정말정말 쉽고, 그냥 보기만해도 이렇게 하는거군 이라고 느끼는 내용은 없을까.
자바개발 경력자인 저에게 듣지도 못한 어떤 기술에 대해 누군가 설명합니다.

"어쩌구 저쩌구"

못알아먹겠습니다. 누가 잘못일까요. 다시 물어봅니다. "어쩌구 저쩌구..," 역시나.
전 정말 멋진개발자라면, 자신이 아는기술을 상대방에게 가장효과적으로,
또한 듣기 쉽게 알려줄 수 있다고 생각합니다.

누군가 엄청난 아키텍쳐가 자신의 기술을 가지고 강연합니다.
별별 용어를 다 씁니다. 3개국어를 섞어가면서. 이해나 하겠습니까.~
(당연히! 저렇게 말할 능력도 안되지만, 제가아는 쥐꼬리만한 내용을 어떻게 하면 쉽게 설명할수 있을까하고  저도 노력중입니다. ㅠ.ㅠ)



솔직히 개발환경이란게 중요한것은 아니죠. 그러나.!!

"과연 처음 시작하는 분들이 원하는것은 무엇일까."



맨처음 닥치는 문제입니다. 개발하려면 어떤걸 어떻게 써야할까.
한번 맛만 보고 싶은데 어떻게 해야하나.

그래서 한번 써보게 되었습니다.

아래의 이 방법은 현업에서 제일 많이 사용하는 방식입니다.

먼저, ^^ 자바를 개발하기 위해서는 어떤게 필요할까요.

1. Java 개발 툴킷을 설치하세요.
    자바를 개발하려면 개발툴킷이 필요합니다. c++ 컴파일러, c컴파일러 같은게 있듯이 자바도 자바 컴파일러와 이를 실행시켜주는 Java vm 이 필요 하죠.

자아 여기서 다운로드 받으세요.
아. 먼저, Java를 만든곳은 아시죠?
http://www.java.sun.com 으로 들어가시면 됩니다. 이곳에서 JDK6 를 다운로드 받거나 Forum을 통해 도움도 받을수 있습니다.

사용자 삽입 이미지
위 사이트 주소 (http://developers.sun.com/downloads/top.jsp)로 가셔서 Java SE Development Kit (JDK) 6 를 선택하셔서 다운로드 페이지로 가세요.

가셔서 Windows Offline Installation, Multi-language를 클릭하셔서 다운로드를 받으시기 바랍니다.
(보니깐 53.16MB네요. 그밑에 Online으로 되어있는건 용량이 작은데 온라인 설치용입니다.)

사용자 삽입 이미지

* 직접 다운로드 페이지로  이동하려면 아래 링크를 선택하셔도 됩니다.
http://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=22&PartDetailId=jdk-6-oth-JPR&SiteId=JSC&TransactionId=noreg

모두 설치를 하셨습니까? 이제 기본은 된것입니다.
윈도우 시작> 실행>cmd 를 치시고 java를 쳐보세요. 컴파일러가 제대로 작동하나요? 안되는것은
JDK/bin 디렉토리가 윈도우 Path에 등록되지 않아서 입니다.

사용자 삽입 이미지


내컴퓨터>고급>환경변수에서 새로만들기 를 눌러서 path를 위에 같이 지정해주세요.
보시면 변수값에 jdk6 가 깔린곳의 bin 디렉토리의 위치를 적어주시면됩니다.
이제 command 도스창에서 한번 java를 쳐보세요. 나올껍니다.
사용자 삽입 이미지

나오죠? 이제 JDK설치가 끝났습니다. 솔직히 이것만 잇어도 코딩은 다 할수 있습니다. 물론 일반 메모장을 사용해서요. ^^ 그치만 Visual Studio가 있듯이 자바도 Eclipse란 개발 툴이있습니다.

2. Eclipse를 설치하세요.

Eclipse는 IBM에서 여러 협의체와 공동으로 개발한 JDK 기반 자바 개발툴입니다. 느리지도 않고 편하고 좋습니다. 아마 대부분의 현업에서 사용하는것으로 알죠. (초창기 1.0전의 버전이 생각나네요. ^^)
자아 여기도 메인홈페이지가 있습니다.

Eclipse 홈페이지 : http://www.eclipse.org

이곳에서 Eclipse를 다운로드 받을수 있습니다.
Eclipse에는 Plug-in이란게 존재하는데, 개발기반 Framework 위에 여러 Plug-in이 존재합니다.
(웹개발용, xml개발, struts용, BPM etc..)
엄청나게 많은 Plug-in이 있죠.
여기선 웹개발용을 받겠습니다.

웹개발용 플러그인중 WTP(Web Tools Platform)가 포함된 Eclipse All in one을 받겠습니다.
WTP 메인 페이지는 http://www.eclipse.org/webtools/main.php 로 가시면 됩니다.

보니깐 현재 1.5.3이 최신이네요. (현재) Milestone로 2.0M5까지 나왔군요.
1.5.3 정식 버전을 받겠습니다.

http://download.eclipse.org/webtools/downloads/drops/R1.5/R-1.5.3-200702082048/

여기에서 보시면
Status
Platform Download
Windows wtp-all-in-one-sdk-R-1.5.3-win32.zip(md5)
같이 WTP-all-in-one-sdk-R-1.5.3-wind32.zip이 있는걸 보실수 있습니다.
올인원 의미 아시죠? 즉 Eclipse + WTP Plugin 의 통합버전을 다운로드 하는것을 말합니다.

이제 다운로드 받아서 원하는곳에 까세요.
이클립스는 그냥 압축을 푸시면 됩니다. 그럼 eclipse란 디렉토리가 생기고 디렉토리안에서
eclipse.exe를 실행하시면 구동됩니다. (구동될려면 JDK가 미리 깔려있어야합니다.)

<구동중..>


사용자 삽입 이미지

자아 이제 이클립스가 구동되었습니다.

사용자 삽입 이미지


별로 오래 걸리지 않았는데, 스크롤의 압박이 ㅡ.ㅡ;
간단하게 프로젝트 만들어 보겠습니다.

Package Explorer에서 마우수 오른쪽 >New>Project를 눌러서 >Java Project를 선택하고 Next를 누르면
아래와 같은 화면이 나옵니다. Project name에 "YoMan"이라고 적고 Finish를 눌르면 프로젝트가 생성됩니다.
사용자 삽입 이미지
이제 프로젝트가 생성되었으니 "Hello World"를 출력하는 클래스를 만들어 보겠습니다.
프로젝트 선택>마우스 오른쪽>New>Class 를 선택하시고 Name에 "HelloWorld"를 기입하고
체크박스에서 (public static void main .. ..)를 체크하고
Finish 를 누르세요.

사용자 삽입 이미지

이제 Eclipse에 에디터가 열리면서 HelloWorld.java가 열릴껍니다. 여기에서 프린트를 해보죠.
public class HelloWorld {
 /**
  * @param args
  */
 public static void main(String[] args) {
  System.out.println("Hello World");
 }
}

기입이 됬으면 이제 실행해봅니다.
HelloWorld.java를 선택후 >마우스 오른쪽>Run As>Java Application 을 선택하시면 실행됩니다.
사용자 삽입 이미지
구동되었습니다. ㅎㅎ

오늘은 일단 여기까지 하겟습니다. 시간이 벌써.. 일해야 할 시간이네요.
그래도 제할일은 꼬박꼬박하면서 글을 씁니다. ㅋㅋ
쓰다보니 내용이 많아져서 내일 이어서 써야겠네요. 저도 스크롤의 압박은 싫어해서. ㅋㅋ

ps. 설마 설명 어려웠나요? ㅡ.ㅡ;; 숨쉴틈없이 써내려가서 헥헥. ㅋㅋ

by ncanis(조성준)

신고
Posted by -TED-
오늘 3월 2일 입니다.
어제 하루종일 돌아댕기느라 태극기를 꼽지 못한게 맘에 걸리네요. 킁.

아침부터 피가 추적추적 오네요.
그래도 기분은 좋네요. (오랜만이라 그런가. ㅎㅎ

오늘은 비가 와서 차를 타고 회사 주차장에 들어가는데 서리가 끼더군요.

"밖의 온도와 실내온도가 갑자기 차이가 나서 안쪽에 서리가 끼는거죠

"조심. 조심.~"
끼면 밖이 안보입니다. 에어컨을 틀면 금방 없어지긴 하지만.. 보통 차에는
요즘 서리 제거시켜주는 기능작동 버튼이 있더군요. ^-^

요즘 서리 끼는것 방지해주는 것도 나왔다고 하긴 하는데
일시적일것 같네요.


JDK 6에 Desktop API가 추가되었네요.

1. Desktop API
    이번 6부터는 OS의 자원을 최대한 활용하는 기능들이 많이 추가되었네요. 이 Desktop도 그런것 같습니다. 전 이기능중에 제일 좋은게 (브라우저 띄우는거랑 프린팅++ 하는 것입니다.)

원본 사이트: http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/

흠. 아래는 Desktop API를 찾아보았습니다.
===============================================

java.awt
Class Desktop

java.lang.Object
  extended by java.awt.Desktop

public class Desktop
extends Object

The Desktop class allows a Java application to launch associated applications registered on the native desktop to handle a URI or a file.

Supported operations include:

  • launching the user-default browser to show a specified URI;
  • launching the user-default mail client with an optional mailto URI;
  • launching a registered application to open, edit or print a specified file.

           (기본 브라우저,이메일클라이언트, 프린팅, 기타 프로그램을 OS설정에 맞게 실행한다는것 같음)

This class provides methods corresponding to these operations. The methods look for the associated application registered on the current platform, and launch it to handle a URI or file. If there is no associated application or the associated application fails to be launched, an exception is thrown.

An application is registered to a URI or file type; for example, the "sxi" file extension is typically registered to StarOffice. The mechanism of registereing, accessing, and launching the associated application is platform-dependent.

Each operation is an action type represented by the Desktop.Action class.

Note: when some action is invoked and the associated application is executed, it will be executed on the same system as the one on which the Java application was launched.

Since:
1.6
==================================================================


실행하면 기본 브라우저로 등록된것이 실행됩니다. 리눅스에서는 실행을 못해봤네요. 아마 파이어폭스가 실행되겠죠.
사용자 삽입 이미지
사용자 삽입 이미지

Java 프로그램 실행도중 링크를 걸면 좋겠죠. ^^

보면 1.6 부터 생긴 API란걸 볼수 있지요. 프린트같은것 좋네요. ㅎㅎ

다음은 프린트 기능입니다. 너무 좋네요. 원하던 것이 생긴 것 같습니다.
자아 자바 프로그램으로 a.doc파일을 읽어서 프린트 하는걸 짜보세요.
(무의미 합니다. 왜냐. ms office 가 깔려있으면 그걸 열어서 프린트 하면 되니까요.)
근데 Desktop은 이걸 지원합니다. 어떻게요?

사용자 삽입 이미지

샘플 코드에서 이렇게 파일을 적고 Launch 를 누르면? ^^
해당 오피스가 실행되고, 알아서 프린트 로직까지 실행되고 프린트가 되면
해당 프로그램이 종료됩니다. ( 꼭 메크로 같네요. ^^)

멋지지 않나요.
더 좋은건 리눅스를 생각해 봅시다. 프로그래머는 하나의 파일을 프린트 하고 싶을때
특정 프로그램을 체크하지 않아도 됩니다. 그냥 aaa.print()메소드를 호출하면
알아서 이 파일과 연결된 프로그램을 이용해서 프린트 해줍니다. ㅋㅋㅋㅋ

여러번 생각하지만 이번 JDK6 의 테마는

"OS에 기반한 기능 추가"

가 가장 큰 이슈인것 같네요.



이처럼,
vs c++, c# 처럼 윈도우 api를 사용하여 조작할수는 없지만, 최소한 띄우거나 연결은 보장하는 것 같네요.
(사실 조작은 ㅋㅋ)

하도 사람들의 원성이 들려와서 일까요. ㅋㅋ 사람들이 원하는 기능들이 많이 추가되었군요.


원본사이트에도 있는 파일이지만 혹시나 해서 여기에다가도 올립니다.
by ncanis(조성준)
신고
Posted by -TED-
오늘도 새로운 하루가 밝았습니다.
요새 피곤한지 입술이 텃네요.

언제나 생각하지만.

"개발자는 체력입니다."


결국 체력이 높은자가 이기게 마련이죠 ㅡ.ㅡ;
운동을 열씸히 해야겠습니다.

오늘은 JDK 6 특징중

1. Single-Threaded Rendering
   원본 사이트 : http://weblogs.java.net/blog/campbell/archive/2005/07/strcrazier_perf.html
   이제까지 Java2D는 멀티스레드를 맘껏사용해서 렌더링 해서 화면에 보여줬는데
   이제는 Single 스레드로 돌리다는군요.
   OpenGL에서 멀티스레드로 화면을 렌더링 하는게 얼마나 비효율적이고 안좋은지 아시죠??
  
   JDK6 에선 OpenGL 렌더링 파이프라인에서 구현되었다네요. 흠.
   결국 결과론적이긴 하지만, 그만큼 성능이 무지하게 올라갔다고 보심됩니다.
사용자 삽입 이미지

<위에는 멀티스레드 방식>

사용자 삽입 이미지
<이거는 싱글스레드 방식>

결과론적으로 성능이 어떻게 바뀌었냐 하면.!!

  • SwingMark, an internal Swing benchmark, is approximately 15 percent faster. (15퍼센트 빠르게)

  • The drawString() method is about 250 percent faster, according to J2DBench. (250퍼센트 빠르게)

  • The fillRect() and drawLine() methods are up to 2500 percent faster, according to J2DBench. (2500퍼센트 ㅡ.ㅡ; 빠르게)

  • FireStarter, an internal demo, renders about 2600 transformed, filtered, blended sprites per frame at 30 frames per second, as opposed to only 1600 sprites before STR. (이건 1600배군요)

    진작 이렇게 하지 ㅡ.ㅡ;~ 그래도 변해가는 Java가 좋습니다.
    아래는 Sung 스윙팀에서 만든 결과 차트 입니다. 보면.

    사용자 삽입 이미지
    정말 높군요. ++


    즉 OpenGL 에 기반한 JDK6 에서의 렌더러가 가장 높은 효율을 발휘하는것을 볼수 있습니다.
    기존의 X11 보다 몇천배 높죠. 잼있네요.


    2. Native Look and Feel
       원본글: http://weblogs.java.net/blog/bino_george/archive/2004/11/hifi_swing_or_i_1.html
       이걸 보면서 생각나네요. 룩앤필이란, 자바로 짠 Application의 UI가 어떤 형태로 사용자에게 보여지는지를 말합니다. 윈도우는 윈도우 룩앤필, 리눅스는 리눅스, 유닉스는 유닉스겠죠.
    다만 기존 Sun은 OS에 기반한 UI보단 자체독립적으로 보여지는 UI를 선호했죠.
    즉 UI를 만들면 모든 OS에서 동일하게 보여지길 바란거죠.

    근데 이번에는 OS에서 제공하는 UI에 많이 충실해진것같네요.
    비스타베타때, Java vm 개발도 같이 거기에 참여해서 개발된것으로 알고있습니다. 즉, OS 에서 제공하는 UI를 효과적으로 보여주기 위해서요.


    => 좋은 Java 룩앤필 사이트 입니다.
        http://www.javootoo.com/

    자기만의 룩앤필을 만들수 있다는거~. 쥑이지 않나요? ^^ (보니깐, 무료도 있고 상용도 있네요)

    - Windows 룩앤필을 사용하면 여러 기본 UI가 OS에서 제공하는 것으로 대체됩니다. (기존에는 안그랬지요. ㅡ.ㅡ;) 아래는 SwingSet32 데모에서 파일선택 버튼을 눌렀을때 나오는 것입니다. (윈도우꺼지요.)
    사용자 삽입 이미지
    이제 룩앤필을 Java Look And Feel로 바꾸어 보겠습니다.
    이렇게 나오지요.
    사용자 삽입 이미지

    다음은 리눅스 룩앤필선택시 입니다.
    사용자 삽입 이미지
    으하하하하. 쥑입니다. ++


    정말 잼있는 기능들이 많이 들어간 JDK6 입니다.
    JDK5 때도 그랬는데, 항상 다 사용해보지도 못하고 6로 넘어가네요. ㅎㅎ
    그래도 100프로 하위호환성을 지켜주는 Java 가 좋습니다. ^^

    by ncanis(조성준)


  • 신고
    Posted by -TED-

    JDK6 에서 새로 반영된 주요기능에 대해 살펴 보고 있당.
    솔직히 오늘은 별생각이 없네요.
    그래서 그냥 기술조사 글이나. ㅎㅎㅎㅎ

    1. Gray Rect Fix
       혹시 Java 의 Application 의 UI 인터페이스인 Swing에 대해 아시나요?
       보통 기존까지의 통념이라고 생각하면

    " Swing 무지 느려.!! awt를 쓰고 말지!!."
       
    요게
    " jdk6 에선 Swing 만 쓰자. 빠르다 이제."

    요렇게 바뀐다는 거죠. ㅎㅎㅎㅎㅎㅎ


    기존 자바개발자들이 무수하게 욕하고 문제점으로 지적한게 바로 느린 스윙, 아주 고질적인 문제점 이었죠. 그것중 하나가 그거였죠. 컬럼에서도 그렇게 글이 나오군요.
     
    즉, 스윙이 다른 위도에 가려졌다가 다시 나타날때 (보통 다시그립니다.) 무지 느려요 ㅡ.ㅡ;
    근데 이문제가 드뎌 해결 됬다더군요. ㅎㅎ
    아래는 넷빈즈에서 테스트했던걸로 비교한 성능 차이입니다.
    성능향상이 머 거의 ~ 워.



    <아래는 JDK 별 Swing의 변경시간 타임 표 입니다.>
    사용자 삽입 이미지

    성능차이가 쥑이죠. 이제부턴 제대로 Back버퍼를 지원한다는거죠.
    음. 더블버퍼링은 아시죠?
    화면을 그릴때, 임시버퍼에 미리 이미지를 그리고, 그 내용을 화면에 복사하면 화면 깜박임 없이 보여줄수 있다는거~

    스윙도 그개념을 완벽히 이제 반영해서, 가려진 영역만큼 기억해서 다시 보여주게 됩니다.
    내용을 쫌 보니,

    이번에는 한 Swing 윈도우마다 백버퍼가 따로 존재한다는군요. ^^
    Swing이 느리다는거~ 옛말이죠 이제.


    2. LCD Text

       기존 개발자들이 subpixel(rgb로 이루어진 부화소) text로 이루어진 LCD TEXT를 지원해달라고 많이 했었나 보네요. 솔직히 여기에 대해선 몰랐습니다. ㅎㅎ
    아래의 설명을 보세요.

    "LCD text is anti-aliased text that takes advantage of the properties of LCD displays to render better-looking, smoother text. Also known as "subpixel rendered text," LCD text is an algorithm for performing anti-aliased text rendering on LCD displays. LCD displays are, of course, the flat panels used in laptops and in the increasingly prevalent flat-panel monitors."


    즉, LCD 위에서 좀더 고급의 TEXT를 보여줄수 있다는 거죠. (앤트 앨리어싱 TEXT를 통해서요.)

    근데 이건 LCD 기반 위에서니
    이걸 제대로 느낄려면
     - LCD를 써야한다.
     - LCD 연결을 DVI로 해야한다.


    즉 폰트에 앤트앨리어싱을 설정할수 있다는거죠.~

    아래는 jdk demo의 Font2D Test입니다.
    이걸로 앤트앨리어싱 된 텍스트가 어떤지 확연히 보실수 있어요.

    사용자 삽입 이미지

    참고사이트
    http://today.java.net/pub/a/today/2005/07/26/lcdtext.html

    이기능은 잘 느낌이 안오네요 .실제 경험을 좀 해봐야겠습니다.
    조언해주실분은 댓글좀 부탁합니다. ^^

    by ncanis(조성준)
    신고
    Posted by -TED-
    개발자에게 새로운 기능이 추가된 개발도구가 나왔다는 사실은
    정말 최고로 흥분되는 사건이지요.

    자바개발자인 저도 그렇습니다.
    자신이 쓰는 언어가 점점 좋아지는 느낌 정말 좋네요.

    비록 새로 추가되는 기능들이 윈도우 개발자분들은 "이게 뭐야~" 라고도 하시겠지만
    Java 쪽에서는 큰 이슈가 아닐수 없습니다.

    각설하고,

    JDK 6 에 많은 기능이 추가되었습니다. ver 5 에서도 많은 기능이 추가되어 너무 좋았지만
    JDK 6 도 만만치 않네요.

    마침 http://www.java.sun.com에 jdk6의 새로운 기능에 대한 컬럼이 보여서 살펴보았습니다.
    원문 그대로 보는것은 좋지만, 나름대로 실행해보고 느낌을 적고 싶어 이렇게 글을 썼습니다.

    원문은
    ==> http://java.sun.com/developer/technicalArticles/javase/6_desktop_features/
    글이 아주 좋네요~

    "JDK 6 새로운 기능들"


    1. Splash Screens

        기존에는 본 프로그램을 보여주기전에 스플래시 스크린이란게 없었죠. awt나 swing으로 임의로 만들어 썼지요. 이제 지원하네요.

    " 이제 로딩 느려도 된다 ㅎㅎ"


    컬럼에 있는 예제를 실행해봤습니다. Eclipse로 구동했습니다.
    참 실행할때 vm 옵션에 (eclispe>run 메뉴에서 vm 옵션을 설정할수 있어요)
    java -splash:filename.gif SplashTest
    같이 해주어야 합니다.

    사용자 삽입 이미지

    아래와 같은 본래 프로그램이 뜨기전에 스플래시 화면(위쪽의 Vista 화면)이 뜨네요.
    아래는 스플래시 화면이 뜨고난후 나타나는 프로그램입니다.

    사용자 삽입 이미지


    아주 잘되네요.~ 보통 스플래시 화면은 본 프로그램의 로딩이 길때 임시로 보여줍니다. 이 시간을 조정하는 방법도 있네요.

    아래는 컬럼에 올라온 예제소스 입니다.

    ===========================================================================================

    import java.awt.*;
    import java.awt.event.*;
    
    public class SplashTest extends Frame implements ActionListener {
        static void renderSplashFrame(Graphics2D g, int frame) {
            final String[] comps = {"foo", "bar", "baz"};
            g.setComposite(AlphaComposite.Clear);
            g.fillRect(130,250,280,40);
            g.setPaintMode();
            g.setColor(Color.BLACK);
            g.drawString("Loading "+comps[(frame/5)%3]+"...", 130, 260);
            g.fillRect(130,270,(frame*10)%280,20);
        }
        public SplashTest() {
            super("SplashScreen demo");
            setSize(500, 300);
            setLayout(new BorderLayout());
            Menu m1 = new Menu("File");
            MenuItem mi1 = new MenuItem("Exit");
            m1.add(mi1);
            mi1.addActionListener(this);
    
            MenuBar mb = new MenuBar();
            setMenuBar(mb);
            mb.add(m1);
            final SplashScreen splash = SplashScreen.getSplashScreen();
            if (splash == null) {
                System.out.println("SplashScreen.getSplashScreen() returned null");
                return;
            }
            Graphics2D g = (Graphics2D)splash.createGraphics();
            if (g == null) {
                System.out.println("g is null");
                return;
            }
            for(int i=0; i<100; i++) {
                renderSplashFrame(g, i);
                splash.update();
                try {
                    Thread.sleep(200);
                }
                catch(InterruptedException e) {
                }
            }
            splash.close();
            setVisible(true);
            toFront();
        }
        public void actionPerformed(ActionEvent ae) {
            System.exit(0);
        }
        public static void main (String args[]) {
            SplashTest test = new SplashTest();
        }
    }


    2. System Tray

       보통 메신저나 데몬툴, 네트워크 아이콘이 윈도우 가장 오른쪽 시간 나오는 쪽에 등록되는 것 아시죠? 시스템 트레이 아이콘인데, 윈도우 개발자 분들은 코웃음 치겠지만, 자바는 그동안 수작업으로 만들었죠. 이제
    JDK에서도 이 기능을 지원하네요

    "잼있는 것은 Linux에서도 동일하게 지원된다는 겁니다. ++"


    이거명품 입니다. ^0^ ㅋㅋㅋㅋㅋ
    역시 예제를 실행해 보았습니다.

    실행하면 등록한 이미지 아이콘이 시스템 트레이에 등록됩니다.

    사용자 삽입 이미지
    에서
    사용자 삽입 이미지
    로 변합니다.
     
    Tray Demo 보이시나요? 죽입니다. ㅎㅎ
    마우스를 대면 소스내의 팝업에서 설정한 메뉴들이 주욱 보입니다. ^^
    아주 맘에 드는 기능이죠.

    아래는 원본 소스 입니다.

    ========================================================================================

    /*
     * Copyright 2005 Sun Microsystems, Inc. ALL RIGHTS RESERVED
     * Use of this software is authorized pursuant to the terms of the
     * license found at http://developers.sun.com/berkeley_license.html
     *
     */

    import java.awt.*;
    import java.awt.event.*;

    public class SystemTrayTest
    {
       
        public SystemTrayTest()
        {
           
            final TrayIcon trayIcon;

            if (SystemTray.isSupported()) {

                SystemTray tray = SystemTray.getSystemTray();
                Image image = Toolkit.getDefaultToolkit().getImage("log.jpg");

                MouseListener mouseListener = new MouseListener() {
                   
                    public void mouseClicked(MouseEvent e) {
                        System.out.println("Tray Icon - Mouse clicked!");                
                    }
                    public void mouseEntered(MouseEvent e) {
                        System.out.println("Tray Icon - Mouse entered!");                
                    }
                    public void mouseExited(MouseEvent e) {
                        System.out.println("Tray Icon - Mouse exited!");                
                    }
                    public void mousePressed(MouseEvent e) {
                        System.out.println("Tray Icon - Mouse pressed!");                
                    }
                    public void mouseReleased(MouseEvent e) {
                        System.out.println("Tray Icon - Mouse released!");                
                    }

                };

                ActionListener exitListener = new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        System.out.println("Exiting...");
                        System.exit(0);
                    }
                };
               
                PopupMenu popup = new PopupMenu();
                MenuItem defaultItem = new MenuItem("Exit");
                defaultItem.addActionListener(exitListener);
                popup.add(defaultItem);

                trayIcon = new TrayIcon(image, "Tray Demo", popup);

                ActionListener actionListener = new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        trayIcon.displayMessage("Action Event",
                            "An Action Event Has Been Peformed!",
                            TrayIcon.MessageType.INFO);
                    }
                };
               
                trayIcon.setImageAutoSize(true);
                trayIcon.addActionListener(actionListener);
                trayIcon.addMouseListener(mouseListener);

                //    Depending on which Mustang build you have, you may need to uncomment
                //    out the following code to check for an AWTException when you add
                //    an image to the system tray.

                    try {
                          tray.add(trayIcon);
                    } catch (AWTException e) {
                        System.err.println("TrayIcon could not be added.");
                    }

            } else {
                System.err.println("System tray is currently not supported.");
            }
        }
       
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args)
        {
            SystemTrayTest main = new SystemTrayTest();
        }
       
    }

    정말 잼있네요. 이 2가지 기능외에도 무지 많네요. 시간관계상 천천히 둘러보며 실행하여 볼까 합니다.
    예제소스는 압축해서 올릴께요.

    src.zip

    예제소스들


    ps. 설 후유증인지 몸이 쫌.. ㅎㅎ
        참고로 전 휴일에는 절대 글을 쓰지 않습니다. 놀아야죠 =,.= ㅋㅋ

    by ncanis(조성준)

    신고
    Posted by -TED-
    farecompare.com 에서 매번 실시한 성능테스트 결과가 java.sun.com 에
    게시가 되었네요.

    아래에 보면 정말 jdk1.2 에 비해 jdk6 의 성능이란 정말 하늘과 땅차이네요~
    성능 수준이 거의 8배네요.

    앞으로의 자바의 성능 개선이 기대됩니다.~

    Improvements in Java Platform, Standard Edition 6

    The founders of FareCompare, who have tried out virtually every new feature of the Java platform since Java 2 Platform, Standard Edition 1.2 (J2SE 1.2), report several improvements as a result of their early access to Java Platform, Standard Edition 6 (Java SE 6):

    • An overall increase in performance speed of from 25 to 30 percent
    • Decreased garbage collection time
    • Superior monitoring and customization in the Java Monitoring and Management Console (JConsole)
    • Improvements in the Java HotSpot VM

     
    Java SE 6 Platform Benefits Performance
    by ncanis(조성준)
    신고
    Posted by -TED-
    TAG java, jdk6