2009년 9월 28일 월요일

[JAVA]자바 웹 스타트

(1) 자바 웹 스타트

기존에 어플리케이션 개발자들은 프로그램을 배포하고 유지 보수하는 일에 있으서 매우 골치아파하였다. 즉, 새로운 버젼의 소프트웨어가 출시되었을때 모든 사용자 컴퓨터에 설치된 소프트웨어를 업데이트하는 것은 쉽지 않은 작업이다. 이르 위해 선 마이크로시스템스에서는 자바 웹 스타트 기술을 개발하였으며  이 기술은 최종 사용자의 컴퓨터에 자바 어플리케이션을 배포하고, 유지보수하고, 업그레이드하는 작업을 획기적으로 간단하게 해 준다.

(2) 웹으로 어플리케이션 시작하기

자바 웹 스타트는 어플리케이션을 실행하기 위한 기본적인 툴로서 웹 브라우저를 사용하여 로컬에 선의 자바 런타임 환경에 포함되어 있는 자바 웹 스타트 클라이언트 프로그램을 이용하여 어플리케이션을 사용자의 컴퓨터에 설치한다. 사용자가 JNLP(Java Network Launching Protocol)파일을 엑세스할 때마다 자바 웹 스타트 클라이언트는 해당 어플리케이션을 자동으로 사용자의 컴퓨터에 다운로드하고 실행한다.

(3) 자바 웹 스타트 배포를 위한 보안 및 사이닝

SWT에서는 대부분의 실질적인 윈도우 그래픽 작업을 네이티브 운영체제에서 제공하는 기능을 그대로 사용하고 있어 로컬 컴퓨터의 파일 시스템, 시스템 라이브러리, 그리고 그래픽 자원과 같은 여러 시스템 자원을 엑세스할 수 있어야 하므로 이를 위해 어플리케이션을 구성하는 모든 JAR파일들을 반드시 디지털 사인을 해 주어야 한다. 따라서 상용제품은 공신력있는 베리사인 또는 서트 등과 같은 인증서 발급 회사로부터 인증서를 받기를 권장한다.

JDK에서 기본적으로 제공하는 툴을 이용하여 자체 인증서를 만들어 발급할 수 있다.

intsystem라는 사용자가 인증하는 인증서를 만들어  'certkey'파일에 저장한다.

keytool -genkey -keystore certkey -alias intsystem
keystore 암호를 입력하십시오: intsystem
이름과 성을 입력하십시오
[Unknown] : expert xml
조직 단위 이름을 입력하십시오.
[Unknown] : intsystem
조직 이름을 입력하십시오.
[Unknown] : RnD
구/군/시 이름을 입력하십시오.
[Unknown] : Seoul
시/도 이름을 입력하십시오.
[Unknown] : Seoul
이 조직의 두 자리 국가 코드를 입력하십시오.
[UnKnown] : 82

<intsystem>에 대한 키 암호를 입력하십시오.
(keystore 암호와 같은 경우 RETURN을 누르십시오.): intsystem0423

※ certkey 인증서 파일 내의 목록을 리스트하여 보기

keytool -list -keystore intsystem
keystore 암호를 입력하십시오: intsystem0423

(4) JNLP 파일 만들기

SWT 어플리케이션을 개발, 배포, 배치를 위한 자바 네트워크 론칭 프로토콜(JNLP) 스펙은 JCP(Java Community Process)에 의해 관리된다.

JNLP 파일은 자바 웹 스타트에서 자동 배포될 모듈에 대한 정보 및 어떻게 배포될 것인가에 대한 정보를 기술해 주는 파일이다. 즉 자바 웹 스타트 클라이언트는JNLP파일을 열어보고, JNLP파일에 기술된 대로 자바 어플리케이션을 구성하는 JAR파일 및 자원들을 다운로드하고, 로컬 컴퓨터에 있는 자바 가상 머신에서 JNLP에 설정된 메인 클래스를 실행한다.

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/fileviewer" href="index.jnlp">
    <information>
        <title>File Viewer</title>
        <vendor>IBM developerWorks</vendor>
        <homepage href="index.html"/>
        <description>File Viewer</description>
        <description kind="short">File Viewer</description>
    </information>
    <security>
        <all-permissions />
    </security>
    <resources>
         <j2se version="1.4" />
         <jar href="lib/fileviewer.jar" />
         <nativelib href="lib/nativelib/nativelib.jar" />
    </resources>
    <resources>
         <jar href="lib/swt-win32.jar" />
    </resources>
    <resources>
         <jar href="lib/swt-linux.jar" />
         <jar href="lib/swt-pi.jar" />
    </resources>
    <!-- application-desc 엘리먼트 -->
    <!-- 'main-class' 속성을 이용하여 배포하는 자바  어플리케이션의 메인 클래스를 지정 -->
    <!-- 자바 웹 스타트 클라이언트는 이 메인 클래스를 실행하므로 반드시 지정해야 한다. -->
    <application-desc main-class="org.eclipse.swt.examples.fileviewer.FileViewer" />
</jnlp>

셈플1. JNLP 구현파일 [출처: 이클립스 SWT, 성인당]

※ 웹서버에 있는 JNLP 파일을 제대로 클라이언트가 다운로드 하려면 JNLP 확장자의 파일에 대한 마임 타입을 설정해 주어야 한다.

application/x-java-jnlp-file JNLP


[JAVA]JAVA 프로그램을 Windows에서 실행가능한 EXE로 만들기

(1) JSmooth를 이용한 EXE 파일 만들기

JSmooth는 JAR 형태의 자바 프로그램을 실행하기 위한 EXE형태의 윈도우 실행 파일을 만들어 주는 프로그램이다. 즉, EXE 래퍼 프로그램을 더블 클릭하여 실행하기만 하면 윈도우는 자신의 컴퓨터에 설치된 적당한 자바 런타임을 찾아 자바 프로그램을 실행해 준다. 만약 실행 가능한 자바 런타임이 없을 경우 사용자에게 다이얼로그 창을 띄워 자바 런타임을 다운로드 할 수 있도록 해 준다.






(2) JSmooth 사용방법

그림1. JSmooth 실행하면

  • Skeleton 설정 : 생성할 EXE 래퍼 프로그램을 콘솔 전용 또는 윈도우 전용으로 생성할지 여부를 설정하고, 자바 런타임이 없을 경우 필요한 파라미터 값을 설정한다.
  • Executable 설정 : 생성할 EXE 래퍼 프로그램의 실행 파일 이름, 아이콘, 실행 디렉토리 등의 정보를 설정한다.
  • Application 설정 : 메인 클래스, 명령 행 매개변수, 포함할 JAR 파일, 클래스 패스 등과 같은 자바 애플리케이션에 대한 정보를 설정한다.
  • JVM Selection 설정 : 자바 가상 머신의 최소/최대 버전, 번들로 포함할 경우 자바 가상 머신의 위치, 시스템에서 자바 가상 머신을 찾는 순서 등의 값을 설정한다.
  • JVM Configuration 설정 : 자바 가상 머신의 최대 메모리 크기, 시작 메모리 크기, 자바 가상 머신을 위한 프로퍼티 등을 설정할 수 있다.


[JAVA]내가 만든 JAVA 소스를 보호하자 - ProGuard

(1) 필요성

자바에서 *.class 파일 형태의 자바 바이트 코드는 역컴파일러 툴을 사용하여 쉽게 자바 클래스 파일을 소드 코드로 변환하는 것이 가능하다. 이를 방지하기 위해 일반적으로 자바 소프트웨어를 배포하기 전에 클래스 파일을 어퓨스케이트(obfuscate) 한다.

(2) 오픈소스 ProGuard

입력 JAR파일(WAR, EAR, ZIP, 또는 디렉토리)을 읽어 축소, 최적화, 어퓨스케이션 작업을 한 후 하나 이상의 출력 JAR파일을 생성한다.

프로가드는 명령 행에서 사용할 수 있는 툴로서 앤트를 이용한 빌드 자동화 프로세스체 추가하여 사용할 수 있다. 프로가는 미들릿, 애플릿, 자바 애플리케이션은 물론 SWT 애플리케이션까지 어퓨스케이트 할 수 있다.

일반적으로 앤트 자동화 프로세스에 어퓨스케이트하는 과정을 추가하여 빌드한다.

http://sourceforge.net/projects/proguard/ 홈페이지에서 다운로드 한다.

2009년 9월 24일 목요일

[우분투]Tomcat 설치

(1) 필요한 패키지 다운로드

$sudo apt-get install tomcat5.5 sun-java6-jdk tomcat5.5-webapps tomcat5.5-admin 

(2) 우분투 기본 자동 설정 수정

$sudo update-alternatives --config java
...
몇가지 목록중 /usr/lib/jvm/java-6-sun/jre/bin/java 를 설정

(3) Tomcat 설정파일에서 JAVA_HOME 변수의 위치를 설정

$sudo nano /etc/default/tomcat5.5
...
JAVA_HOME=/usr/lib/jvm/java-6-sun/

(4) Tomcat 기동, 정지, 재기동

$sudo /etc/init.d/tomcat5.5 start => 기동
$sudo /etc/init.d/tomcat5.5 stop => 정지
$sudo /etc/init.d/tomcat5.5 restart => 재기동

(5) 기본 포트
     Tomcat의 기본포트가 8080이 아니라 8180이다. (주의!)

(6) 톰켓의 경로
     기본 설치 경로는 /var/lib/tomcat5.5 이다.

2009년 9월 23일 수요일

[개발환경]Hudson에 대한 접근

1. 들어가며

지속적인 통합시스템(Continuous Integration System) 중 오픈소스 진영의 대명사인 Hudson에 대한 심도있는 학습을 진행한다.
관련 홈페이지는 https://hudson.dev.java.net/ 이다.

1.1 Hudson이 뭐지?
     Hudson은 반복적인 작업 실행을 관리해주는 도구이다. 특히 다음 두가지 작업에 촛점이 맞추어져
     있다.
  • 지속적인 소프트웨어 빌드와 테스팅
  • 영구적인 작업에 대한 실행 모니터링
     이런 특징을 바탕으로 빌드관리, 릴리즈관리, 배포자동화, 테스트통합에 응용될 수 있는 대표적인
     툴이다.

1.2 우분투에 설치
    
    

펼쳐두기..


     /etc/apt/sources.list 에 다음을 추가한다.
     ...
     deb http://hudson-ci.org/debian binary/
    
     $sudo apt-get update
     $sudo apt-get install hudson daemon
    


[방법론]스크럼, XP, 애자일 .. 이모든 방법론은 현실화를 위해 part1

1. 들어가며
최근 방법론에 대한 책을 많이 섭렵하고 있다. 여러번의 프로젝트 실패(?)와 프로젝트의 방법적 모순을 실감하면서도 쉽게 무언가를 변화시키기에는 항상 이론적 배경의 부재로 좌절하고 때로는 게으른 매너리즘에 빠져 허우적되면서 실천하지 못했던 일을 이론적 학습을 통해 다시 한번 열정을 가을하늘로 띄워보고자 한다.

[소개] 스크럼 : 팀의 생산성을 극대화시키는 애자일 방법론

——————————————————————————————————————————————
저자 : 켄 슈와버, 마이크 비들 역자 : 박일, 김기웅
출판사 : 인사이트 ISBN : 978-89-91268-47-0
가격 : ₩18,000
——————————————————————————————————————————————
[목차]

펼쳐두기..



[우분투]PHP 업로드 사이즈 증가

(1) php 업로드 사이즈 증가

$sudo vim /etc/php5/apache2/php.ini
...
upload_max_filesize=4M
...

(2) 아파치 재기동

$sudo /etc/init.d/apache2 restart



2009년 9월 22일 화요일

[우분투] trac DB를 SQLite에서 Mysql로 변경

(1) 데이터 베이스 생성

$sudo mysql -u root -p mysql
...
mysql>CREATE DATABASE trac DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

(2) 데이터 베이스 사용자 등록

mysql>CREATE USER tracuser IDENTIFIED BY 'intsystem'; mysql>GRANT ALL ON trac.* TO tracuser;

(3) python 연동 모듈 설치

$sudo apt-get install python-mysqldb


(4) Trac과 연동

$sudo trac-admin KLRI initenv
#프로젝트  입력
$Project Name [My Project]> KLRI
#DB 연결 설정
$Database connection string [sqlite:db/trac.db]>
mysql://tracuser:intsystem@192.168.1.101/trac
#소스 저장소 타입 설정
$Repository type [svn]> 엔터
#저장소 경로
$Path to repository [/path/to/repos]> /usr/svn-project/KLRI

(5) 변경이 안될 경우 trac.ini 수정

$sudo nano /usr/trac/KLRI/conf/trac.ini
...
[trac]
...
database=mysql://tracuser:intsystem@192.168.1.101:3306/trac
...
#저장후
$sudo /etc/init.d/apache2 restart


[우분투] trac 설치

(1) Trac 설치

$sudo apt-get install trac libapache2-mod-python python-setuptools

(2) 신규 저장소 생성

$sudo mkdir /usr/svn-project/KLRI
$sudo svnadmin create /usr/svn-project/KLRI

(3) Trac 설정

Trac 으로 관리할 프로젝트를 만든다. /usr/trac 디렉토리를 만들고 여기에 Trac 프로젝트를 만든다.
DB는 SQLite를 사용하며, 소스 저장소는 Subversion을 사용, 웹브라우저에서 접근 가능하도록 설정

$sudo mkdir –p /usr/trac
$cd /var/lib/trac
$sudo trac-admin KLRI initenv
#프로젝트  입력
$Project Name [My Project]> KLRI
#DB 연결 설정
$Database connection string [sqlite:db/trac.db]> 엔터
#소스 저장소 타입 설정
$Repository type [svn]> 엔터
#저장소 경로
$Path to repository [/path/to/repos]> /usr/svn-project/KLRI
$sudo chown -R www-data.www-data /usr/svn-project

설정 성공시 "Congratulations!" 문구가 나오면 성공적으로 설정완료

(4) Trac 관리자 계정 설정
관리자 계정 설정위한 사용자를 먼저 등록한다.

$sudo htpasswd -c /etc/apache2/dav_svn.passwd intsystem => 최초 등록시에만 -c 옵션
$sudo htpasswd /etc/apache2/dav_svn.passwd septemberman

$sudo trac-admin /usr/trac/KLRI permission add intsystem TRAC_ADMIN

(5) Trac 프로젝트 수정

 Trac 프로젝트 별 설정은 프로젝트에 conf 디렉터리의trac.ini 를 수정해서 조정

[header_logo] => 프로젝트 홈 URL 수정
alt=
height=-1
link=http://192.168.1.101/KLRI
src=common/trac_banner.png
width=-1

(6) dav_svn_conf 수정

$sudo nano /etc/apache2/mods-available/dav_svn.conf
<Location /svn>
   DAV svn
   SVNParentPath /usr/svn-project
   SVNListParentPath on
   AuthType Basic
   AuthName "Subversion Repository"
   AuthUserFile /etc/apache2/dav_svn.passwd
   Require valid-user
</Location>

(7) Trac 위한 설정

$sudo nano /etc/apache2/sites-available/default
...
<VirtualHost *:80>
   ServerName trac.taekgeun.com
   <Location />
      SetHandler mod_python
      PythonHandler trac.web.modpython_frontend
      PythonOption TracEnvParentDir /var/lib/trac
      PythonOption TracUriRoot /
   </Location>
   <LocationMatch "[^/]+/login">
      AuthType Basic
      AuthName "Trac Authentication"
      AuthUserFile /etc/apache2/dav_svn.passwd
      Require valid-user
   </LocationMatch>
</VirtualHost>

2009년 9월 21일 월요일

자전거 판매합니다

아내의 자전거 ...
선물받은 자전거를 임신과 출산으로 열번도 못타고 내어 놓는다..

제품은 스포시엘 Fleecy, 폴딩자전거로 유명한 자전거다. (절대 싸구려 자전거는 아니다.)

[비슷한 사양인 스포시엘 캐쥬얼은 구글링을 통해 쉽게 찾을 수 있다...]



 ==> 앞에서 본 모습...


==> 옆에서 본 모습 (미니벨로의 아담한 사이즈)


==> 거의 타지 안았음을 증명하는 타이어 상태(마모 제로...)


==> 기어의 대명사인 시마노 기어


==> 앞축과 패달 상태 (역시 거의 타지 안았음을 입증함 ... 기어에 때하나 없음)


==> 폴딩이 가능한 구조 (간혹 지하철을 탈때로 용이함)


==> 탈부착이 가능한 장바구니 (마트에도 가야지... )


==> 뒤에서 본 모습(뒷 받침대도 깔끔함)


==> 높낮이 조절이 가능한 안장



=> 장바구니 분해

==> 장바구니 분해



==> 나사 풀기(풀어진 상태로 배송)


==> 접힌상태와 배송 물품 (장바구니 + 잠금장치)


[JAVA]Apache Ant 사용하기

Ant에 대한 자세한 정보는 아파치 자카르타 앤트 프로젝트 사이트를 참고

<build.xml> 셈플파일

펼쳐두기..



# build.xml 파일의 기본구조

<?xml version="1.0" encoding="euc-kr"?>
<project name="projectName" default="defaultTargetName" basedir=".">
 <property name="" location=""/>
 <target name="">...</target>
 <target name="" depends="">...</target>
 <target name="" depends="">...</target>  
 <target name="" depends="" if="">...</target>
 <target name="" depends="" unless="">...</target>  
</project>

# project 태그
 1) name : 프로젝트의 이름
 2) default : Ant를 실행할때 target을 지정하지 않은 경우 기본적으로 사용할 target (필수)
 3) basedir : 경로 계산할때의 기준 디렉토리. 지정하지 않은 경우 현재 디렉토리가 basedir로 사용된다. basedir 프로퍼티의 값으로도 사용된다.

# target 태그
 1) name : 타켓의 이름 (필수)
 2) depends : 이 타겟이 의존하고 있는 타겟의 목록. 각 타켓의 이름은 ,(콤마) 로 구분한다.
 3) if : 지정한 프로퍼티가 설정되어 있는 경우 이 타겟을 수행한다.
 4) unless : 지정한 프로퍼티가 설정되어 있지 않은 경우 이 타겟을 수행한다.
 5) description : 타겟이 수행하는 기능에 대한 설명
 
# ant 경로 규칙 
 1) * : 0개 또는 그이상의 글자가 매칭
 2) ? : 한글자와 매칭
 3) ** : 다계층을 나타냄  예) dir/**/A => dir/dir1/A, dir/dir2/A, dir/dir1/dirA/A 다 포함.
 4) / 또는 \ 으로 끝날 경우  : /** 또는 \** 과 동일
 
# includes 속성 : 포함시킬 파일의 목록 (include 태그, includesfile 속성으로 사용 가능)

# excludes 속성 : 제외시킬 파일의 목록 (exclude 태그, excludesfile 속성으로 사용 가능)

# excludes 속성 명시 여부에 상관없이 제외 되는 것들 : 제외 시키고 싶지 않을 경우 defaulteexcludes = "no" 설정
 - **/*~, **/#*#, **/.#*, **/%*%, **/._*
 - **/CVS, **/CVS/**, **/.cvsignore
 - **/SCCS, **/SCCS/**
 - **/vssver.scc
 - **/.svn, **/.svn/**
 - **/.DS_Store

# fileset 태그 : 파일 집합
 1) dir : 파일 집합을 표시할 때의 루트 디렉토리 (dir 또는 file 중 한개 반드시 명시)
 2) file : 한 개의 파일을 명시할 때 사용하는 속성  (dir 또는 file 중 한개 반드시 명시)
 3) casesensitive : 대소분자 구분 여부 (true/false) 기본값 true
 4) followsymlinks : 심볼릭 링크를 따라갈지의 여부 (true/false) 기본값 true)
  사용 예)
 <fileset dir="${basedir}/src" defaultexcludes="no">
  <include name="**/*.java"/>
  <include name="**/*.properties"/>
  <exclude name="**/*.bak"/>
 </fileset>

# dir 태그 : 디렉토리 집합
 1) dir : 디렉토리 집합을 표시할 때의 루트 디렉토리 (필수)
 2) casesensitive : 대소분자 구분 여부 (true/false) 기본값 true
 3) followsymlinks : 심볼릭 링크를 따라갈지의 여부 (true/false) 기본값 true)
  사용 예)
 <dirset dir="" includes="" excludes=""/>
 
# patternset 태그 : 재사용 가능한 파일 집합
 사용 예)
 <patternset id="commonJar">
  <include name="servlet.jar"/>
  <include name="mail.jar"/>
  <include name="activation.jar"/>    
 </patternset>
 
 <fileset dir="j2eelib">
  <patternset refid="commonJar"/>
 </fileset>
 
# path 태그 : 재사용 가능한 경로 목록의 집합
 사용 예)
 <path id="project.class.path">
  <pathelement location="fileupload/WEB-INF/classes"/>
  <pathelement path="lib/servlet.jar;lib/commons-fileupload-1.0.jar"/>
 </path>
 
 <classpath refid="project.class.path"/>
 
 - location : 하나의 파일 또는 디렉토리 지정
 - path : 여러 경로를 지정 (; 또는 : 으로 구분)


# 아래의 build.xml 파일에서 ant makeZip 을 할경우 complie 은 두번이 아닌 한번만 실행되게 된다.
 <project name="build" default="makeZip" basedir=".">
  <target name="compile"/>
   <target name="srcCopy" depends="compile"/>
   <target name="classCopy" depends="compile"/>
   <target name="makeZip" depends="srcCopy, classCopy"/>
 </project>

# property 태그 : property 지정
 1) name : 프로퍼티의 이름
 2) value : 프로퍼티의 값을 지정 (name 속성 지정시 value 또는 location 둘중 하나 반드시 사용)
 3) location : 지정한 경로명의 절대 경로명을 값으로 지정 (name 속성 지정시 value 또는 location 둘중 하나 반드시 사용)
 4) resource : 프로퍼티 파일을 읽어 올 때 사용할 자원명을 지정 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
 5) file : 지정한 파일로부터 프로퍼티 목록을 읽어 온다 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
 6) environment : 환경 변수를 읽어 올때 사용할 접두어를 지정 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
 7) classpath : 자원으로부터 프로퍼티 파일을 읽어 올 때 사용할 클래스 패스
 8) classpathref : 클래스패스로 사용할 경로를 path 태그 로 부터 가져온다.
 9) prefix : resource 또는 file 속성을 사용하여 읽어 온 프로퍼티를 참조할 때 사용할 접두어를 지정한다. 만약 접두어 맨뒤에 "." 가 포함되어 있지 않을 경우, 자동으로 "."이 접두어 뒤에 붙는다.
 사용 예)
 <property file="${basedir}/buildprop/global.properties"/>
 
 <property environment="env"/>
 <echo message="JAVA_HOME ${env.JAVA_HOME}"/>

# 기본 프로퍼티 : property 태그 사용하지 않아도 사용 가능한 프로퍼티
 - 모든 자바의 시스템 프로퍼티
 - basedir : 프로젝트의 기본 디렉토리의 절대 경로. project 태그의 basedir 속성에 명시된 값
 - ant.file : 빌드 파일의 절대 경로
 - ant.version : Ant 버전
 - ant.project.name : 현재 실행주인 프로젝트의 이름. project 태그의 name 속성에 명시된 값
 - ant.java.version : Ant 가 발견한 자바 버전.
 
# javac
 1) srcdir : 소스가 위치한 디렉토리 (src 태그로 지정가능. 둘 중 하나 필수)
 2) descdir : 생성된 클래스가 위치할 디렉토리를 지정. javac -d 옵션과 동일
 3) classpath : 컴파일할 때 사용할 클래스패스 (class 태그로 지정 가능)
 4) classapathref : path 태그로 지정한 경로를 클래스패스로 참조
 5) encoding : 소스파일의 인코딩을 지정. javac -encoding 옵션과 동일
 6) nowarn : 컴파일시 -nowarn 옵션 추가 (on) 기본값은 off
 7) deprection : 컴파일시 -deprecation 옵션 추가 (on) 기본값은 off
 사용 예)
 <javac srcdir="" descdir="">
  <classpath>
   <fileset>
    <patternset refid=""/>
   </fileset>
  </classpath>
 </javac>
 
# jar
 1) destfile : 생성할 jar 파일 지정
 2) basedir : jar 파일로 압축할 기본 디렉토리 지정

 사용 예)
  <jar destfile="${disc}/lib/app.jar" basedir="${build}/classes"/>
 
  <jar destfile="${disc}/lib/app.jar">
   <fileset dir="${build}/classes" exclude="**/test*.class"/>
   <fileset dir="${src}/resources"/>
  </jar>

# zip
 - 기본적으로 jar 사용법와 같이 사용 가능.
 - zipfileset 태그를 사용하여 압축되는 파일의 경로명을 변경할 수 있음.
 - zipfileset 의 속성
  1) prefix : ZIP 파일에 압축될 때 변경되어 들어갈 경로명
  2) fullpath : 특정 파일의 변경될 경로를 지정
  3) filemode : 유닉스 기반의 시스템에서 압축되는 파일의 모드를 지정. 기본값은 644
  4) dirmode : 유닉스 기반의 시스템에서 압축되는 디렉토리의 모드를 지정. 기본값은 775
 사용 예)
 <zip destfile="${dist}/example.zip">
  <zipfileset dir="build/api" prefix="docs/api"/>
  <zipfileset dir="${basedir}" includes="chang.log.20031227" fullpath="docs/chagelog.txt"/>
  <zipfileset dir="build/classes" prefix="classes"/>
  <zipfileset dir="build/src" prefix="src"/>
 </zip>

# war
  사용 예)
  <war destfile="main.war" webxml="src/metadata/web.xml">
   <fileset dir="src/mainapp/html"/>
   <fileset dir="src/mainapp/jsp"/>
   <lib dir="lib">
    <exclude name="logging2.jar"/>
   </lib>
   <classes dir="build/main/classes"/>
   <zipfileset dir="src/imagefile/images" prefix="images"/>
  </war>

# tar
 - 기본 사용 법 : <tar destfile="" basedir=""/>
 - tarfileset 태그
 - targileset 의 속성
  1) mode : 3자리 8진수값. 775 등의 값을 갖는다.
  2) username : 파일에 대한 사용자 이름을 지정한다. UID와는 다르다.
  3) group : 파일에 대한 그룹 이름을 지정한다. GID와는 다르다.
  4) prifix : tar 파일에 압축될 때 변경되어 들어갈 경로명
  5) fullpath : 특정 파일의 변경될 경로를 지정
  6) preserveLeadingSlashes : 맨 앞의 '/'를 유지할지의 여부를 지정. 기본값 : false
 사용 예)
 <tar destfile="${dist}/example.tar">
  <tarfileset dir="build/api" prefix="docs/api"/>
  <tarfileset dir="${basedir}" includes="chage.log.20031227" fullpath="docs/chagelog.txt"/>
  <tarfileset dir="build/classes" prefix="classes"/>
  <tarfileset dir="build/src" prefix="src"/>
 </tar>
 <gzip zipfile="${dist}/example.tar.gz" src="${dist}/example.tar"/>
 
 <tar destfile="${dist}/example.tar.gz" basedir="${build}" compression="gzip"/>

# javadoc
 1) sourcepath : 소스 파일의 경로 지정. 하위 디렉토리까지 모두 처리 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
 2) sourcepathref : path 에서 지정한 경로를 소스 파일의 경로로 사용 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
 3) sourcefiles : 소스 파일의 목록을 지정. 각 파일은 콤마(,)로 구분 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
 4) destdir : 결과 파일이 생성될 디렉토리
 5) packagenames : 콤마로 구분된 패키지 파일의 목록. 패키지명이 *로 끝날 경우 그 하위 패키지까지 모두 처리한다.
 6) excludepackagenames : 문서를 생성하지 않을 패키지의 목록을 지정. 각 패키지는 콤마(,)로 구분. 패키지명이 *으로 끝날 경우 그 하위 패키지까지 모두 제외
 7) access : 접근 모드를 지정. public, protected, package, private 중 한 가지 값. 기본값 : protected
 8) public : 생성되는 API 문서에 public 클래스와 멤버만 보여준다.
 9) protected : 생성되는 API 문서에 protected/public 클래스와 멤버만 보여준다.
 10) package : 생성되는 API 문서에 package/protected/public 클래스와 멤버만 보여준다.
 11) private : 생성되는 API 문서에 private/package/protected/public 클래스와 멤버만 보여준다.
 12) encoding : 소스 파일의 인코딩을 명시.
 13) locale : ko_KR과 같이 사용할 로케일을 지정.
 14) charset : 생성된 문서를 보여줄 때 사용할 케릭터셋을 지정.
 15) version : @version 주석을 포함.
 16) author : @author 주석을 포함.
 17) nodeprecated : deprecated 정보를 포함하지 않는다.
 18) nodeprecatedlist : deprecated 목록을 생성하지 않는다.
 19) windowtitle : 문서를 위한 제목을 텍스트로 입력.
 20) overview : HTML 문서로부터 개략 문서를 읽어 온다.
 21) helpfile : 도움말로 사용할 HTML 파일을 지정.
 22) stylesheetfile : 스타일 시트로 사용할 파일을 지정.
 23) header : 생성될 HTML 파일의 헤더로 사용될 HTML 코드를 명시
 24) footer : 생성될 HTML 파일의 풋터로 사용될 HTML 코드를 명시
 
 사용 예)
 <javadoc destdir="{build}/api"
  sourcepath="src"
  packagenames="javacan.main.*"
  excludepackagenames="javacna.main.test.*"
  windowtitle="Main 웹 어플리케이션"
  encoding="euc-kr" />
 
 <javadoc destdir="{build}/api"
  windowtitle="Main 웹 어플리케이션"
  encoding="euc-kr">
  <packageset dir="src" defaultexcludes="yes">
   <include name="javacan/main/**"/>
   <exclude name="javacan/main/test/**"/>   
  </packageset>
 </javadoc>
 
# copy
 1) file : 복사할 파일을 지정 (fileset으로 복사할 파일 목록을 지정하지 않는 경우 필수)
 2) tofile : 복사될 파일을 지정
 3) todir : 원본을 복사할 디렉토리를 지정
 4) overwrite : 기존 파일 덮어쓰기 여부 (true/false) 기본값 : false
 5) preservelastmodified : 원본의 최종 수정 날짜 유지 여부(true/false) 기본값 : false
 6) includeEmptyDirs : 텅빈 디렉토리도 복사할지의 여부(true/false) 기본값 : true
 사용 예)
 <copy file="${workspace}/readme.txt.200312" tofile="${build}/readme.txt"/>
 <copy file="${workspace}/readme.txt.200312" todir="${build}"/>
 <copy todir="${build}/src">
  <fileset dir="${workspace}/src"/>
 </copy>
 
# mkdir
 사용 예)
 <mkdir dir="${build}/webapp/WEB-INF/classes"/>
 webapp/WEB-INF 또한 존재 하지 않는 경우 생성

# delete
 사용 예)
 <delete>
  <fileset dir="${build}"/>
 </delete>
 
 위의 경우 ${build} 와 그 하위 디렉토리의 모든 파일을 삭제. 그러나 디렉토리는 남아있음.(fileset 은 파일의 집합)
 아래와 같이 해주면 디렉토리도 전부 삭제
 
 <delete includeEmptyDirs="true">
  <fileset dir="${build}"/>
 </delete>
 
# ant : 또 다른 빌드 파일의 실행. 여러개의 서브 프로젝트로 구성되어 있을 경우 유용
 1) antfile : 사용할 빌드 파일을 지정. 명시하지 않을 경우 build.xml. dir 속성에 주어진 디렉토리에 대해 상대경로
 2) idr : 새로운 Ant 프로젝트의 basedir을 지정.
 3) target : 수행할 타켓을 지정
 4) output : 새로운 Ant 프로젝트의 수행 결과를 저장할 파일을 명시
 5) inheritAll : 새로운 Ant 프로젝트에 현재 Ant 프로젝트의 모든 프로퍼티 전달 여부(true/false). 기본값 : true
 6) inheritRefs : 새로운 Ant 프로젝트에 현재 Ant 프로젝트의 모든 참조 전달 여부(true/false). 기본값 : true
 사용예)
 <target name="makeSubProject">
  <ant dir="subproject/logging" target="prepare">
   <property name="module1.4" value="jdk1.4"/>
  </ant>
  <ant dir="subproject/common" target="prepare"/>
 </target>

# java
 1) classname : 실행할 클래스 이름 (classname, jar 둘중 하나 필수)
 2) jar : 실행할 jar 파일의 위치 (classname, jar 둘중 하나 필수)
 3) classpath : 사용할 클래스패스를 지정
 4) classpathref : 미리 지정한 path 태그를 참조
 5) fork : 세러은 가상머신에서 클래스 수행 여부 (true/false). 기본값 : false
 6) maxmemory : 포크된 가상 머신에 할당할 메모리의 최대 크기를 지정 (fork가 false인 경우 무시)
 7) dir : 가상 머신을 호출할 디렉토리 (fork가 false인 경우 무시)
 사용 예)
 <java classname="javacan.main.prepare.TableInitilizer">
  <classpath>
   <pathelement path="${java.class.path}"/>
  </classpath>
  <sysproperty key="module" value="test"/>
  <arg value="-init -d"/>
 </java>
 
# native2ascii : 유니코드로의 변환
 1) src : 변환할 파일들이 위치한 기준 디렉토리
 2) dest : 변환한 결과를 저장할 디렉토리
 3) encoding : 변환할 파일의 인코딩 (기본으로 JVM의 기본 인코딩 사용)
 4) reverse : 이스케이프된 유니코드를 지정한 인코딩을 사용하는 문자열로 변환.
 사용 예)
 <native2ascii src="${config}"
  dest="${build}/config"
  includes="**/*.properties"
  excludes="**/test/*.properties"
  encoding="EUC-KR"/>

2009년 9월 20일 일요일

[우분투] vim 사용법

※ vim 사용법

1. vim이란
   vim 은 유닉스 계열에서 전통적으로 널리 사용도던 vi 의 improve 즉 undo, syntax coloring, split
   windows 등의 기능을 포함시킨 vi 의 보강된 프로그램이다.

2. vim 모드

   ▶ 명령상태모드
   => 처음 vim을 실행했을때, 입력상태/명령상태에서 ESC 입력시
         : 간단한 찾기, 커서이동, ex 상태로 넘어가기

   ▶ ex 상태모드
   => 명령상태에서 ':' 입력시
         : 각종 치환, 저장, 파일읽기, vim설정들과 같은 대부분의 작업들

   ▶ 입력상태모드
   => 명령상태에서 'a', 'i', 'o' 입력시
         : 내용 입력

3. 명령상태모드
    명령모드에서 여러가지 명령을 입력함으로써, 복사, 붙이기, 삭제 문서입력, 문서저장, 문서불러오
    기, 커서이동 등의 작업을 할수 있다.

     커서이동

  • k : 커서를 위로 움직임
  • j : 커서를 아래로 움직임
  • h : 커서를 왼쪽으로 움직임
  • l : 커서를 오른쪽으로 움직임
  • - : 커서를 줄의 처음으로 옮김
  • e, E : 다음단어의 끝으로, 문자단위 이동
  • w, W : 다음단어의 처음으로, 문자단위 이동
  • $ : 줄의 마지막으로
  • 0 : 줄의 처음으로
  • ^ : 줄의 처음으로(공백이 아닌 처음시작되는 문자)
  • Shift+g : 문서의 마지막으로 이동한다.
  • gg, 1g : 문서의 처음으로 이동 1대신 다른 숫자를 입력시 해당 숫자의 라인으로 이동
  • ), ( : 다음, 이전 문장의 처음으로
  • }, { : 다음, 이전문단의 처음으로
  • ]], [[ : 다음, 이전 구절의 처음으로

        화면스크롤

  • ^F : 한 화면 을 앞으로 스크롤
  • ^B : 한 화면 을 뒤로 스크롤
  • ^D : 반 화면 을 앞으로 스크롤
  • ^U : 반 화면 을 뒤로 스크롤
  • ^E : 한줄 앞으로 스크롤
  • ^Y : 한줄 뒤로 스크롤
  • Shift+h : 화면의 맨 윗줄로
  • Shift+m : 화면의 중간줄로
  • Shift+l : 화면의 맨 아랫줄로



[우분투] 유용한 명령어

(1) 설치된 프로그램 리스트

$sudo dpkg --get-selections | grep -v deinstall > install_list.txt

    설치된 프로그램 리스트 기준으로 다시 재설치 할 때는

$sudo dpkg --set-selection < install_list.txt

(2) 우분투 버젼 확인

$sudo lsb_release -a

(3) 오늘 날짜와 현재 시간

$date

(4) 이번달 달력출력

$cal

(5) 디스크 사용량 출력

$df

(6) 특정 폴더의 디스크 사용량출력

$du [디렉토리명]

(7) 디스크 용량 확보

$sudo rm -f /var/cache/apt/archives/*.deb
or
$sudo apt-get clean
=> 캐쉬파일 삭제

$sudo killall gdm
로그인...
$sudo init 1 (런레벨 1)
$rm -rf /tmp/*
$reboot

(8) zip 압축/해제

     디렉토리 압축

$zip -r -F [저장파일명] [디렉토리]/
  => -r : 서브디렉토리까지 압축
  => -F : 한글파일을 포함하는 zip 압축

     압축해제

$unzip [파일이름]
or
$jar xvf [파일이름]

(9) CPU 정보보기

$nano /proc/cpuinfo

(10) 메모리 사용량 및 메모리 정보 보기

$free => 메모리 사용량
$nano /proc/meminfo => 메모리 정보

(11) 네트워크 정보보기

$ifconfig

(12) 접속 및 부팅 로그 정보

$last => 부팅 로그 정보
$lastlog => 마지막 접속로그 보기

(13) 커널 정보 보기

$uname -a

(14) alias 설정

$vim /[홈디렉토리]/.profile
...
alias ll="ls -al"
...


[우분투]터미널 편집기

1. nano 편집기
$sudo nano [파일명]
2. vim 편집기
$sudo vim [파일명]

[우분투] Subversion 설치

(1) Subversion 설치
      다음과 같이 입력하여 SVN을 설치한다.

$sudo apt-get install subversion libapache2-svn

(2) 저장소 만들기 및 권한 설정
    
$sudo svnadmin create /home/svn
$chown www-data:www-data /home/svn -R

저장소 신규 생성시 생성 폴더 아래의 conf 폴더에 존재하는 svnserve.conf를 아래와 같이 수정한다.

...
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
...


(3) Apache에서 SVN 설정(웹을 통합 svn 접근하는 경우만)

$sudo vi /etc/apache2/mods-enabled/dav_svn.conf

...
<Location /svn>
    DAV svn
    SVNPath /home/svn
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/apache2/dav_svn.passwd
</Location>
...
$sudo htpasswd -cm /etc/apache2/dav_svn.passwd [id] => 사용자 등록
$sudo /etc/init.d/apache2 restart

(4) 데몬 돌리기
 
$sudo svnserver -d -r /<svn-path>

(5) 데몬 내리기

$sudo killall svnserver

(4) svn 동작 여부 확인

$netstat -nat
...
*:445 -> LISTEN 확인

상기와 같이 설정 후 SVN 클라이언트를 이용하여 http://.../svn 으로 접근

2009년 9월 19일 토요일

[소개] 리치 클라이언트 개발을 위한 이클립스 SWT

——————————————————————————————————————————————

저자 : 박용우 출판사 : 성인당 ISBN : 978-89-315-4953-9
가격 : ₩30,000
——————————————————————————————————————————————
[목차]

펼쳐두기..


2009년 9월 17일 목요일

[우분투] LAMP 설정

(1) 아파치 설치
    
$sudo apt-get install apache2
$sudo apt-get install libapache2-mod-auth-mysql
$sudo apt-get install libapache2-mod-php5

(2) PHP5 설치

$sudo apt-get install php5
$sudo apt-get install php5-mysql
$sudo apt-get install php5-gd

(3) mysql 설치

$sudo apt-get install mysql-server

(4) 아파치 rewrite 설정

$sudo a2enmod rewrite
$sudo vi /etc/apache2/apache2.conf => 수정
==> 맨 아래줄에 아래내용 추가
<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "/etc/www/tc">
    Options FollowSymLinks
    AllowOverride FileInfo
</Directory>

   위 설정 저장 후 아파치 재기동

$sudo /etc/init.d/apache2 restart

   만약 아파치 가상 호스트를 셋팅 하고 싶으면 즉, 각 도메인마다 다른페이지를 할당하고 싶을 때 아래와 같이 설정한다.

$sudo vi /etc/apache2/sites-available/default => 기존값 변경없이 아래내용 추가
...
<VirtualHost *:80>
    DocumentRoot 원하는 디렉토리
    ServerName aaa.com
    ServerAlias *.a.com
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot 원하는 디렉토리
    ServerName bbb.com
    ServerAlias *.b.com
</VirtualHost>

    저장후 아파치 재기동

$sudo /etc/init.d/apache2 restart

(5) 파일 업로드 용량증가를 위한 PHP 설정

$sudo vi /etc/php5/apache2/php.ini => 아래 내용을 수정
...
memory_limit = 16M
post_max_size = 8M
upload_max_filesize = 2M

    저장후 아파치 재기동

$sudo /etc/init.d/apache2 restart

(6) 아파치 서비스 포트 추가

$sudo nano /etc/apache2/ports.conf
...
NameVirtualHost *:80
Listen 80

NameVirtualHost *:9090
Listen 9090