2009년 9월 21일 월요일

[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