Computing/Programming2010/08/24 11:46
IRB (Interactive Ruby Shell)는 루비 프로그램을 대화식으로 입력하고 실행 결과를 바로 볼 수 있는 루비 쉘이다.

배쉬쉘 등 유닉스/리눅스 쉘과 마찬가지로 IRB에서 탭 자동완성 기능을 사용하면 편리한데, 그 방법은 다음과 같다.

1. 실행 시 옵션으로 주기.

$ irb -r irb/completion

2. IRB에서 자동완성 라이브러리 로드

irb(main):001:0> require 'irb/completion'

3. 설정 파일(.irbrc) 사용

홈 디렉터리에 .irbrc 파일을 만들고 안에 다음을 추가

require 'irb/completion'

이 중 1, 2번은 IRB 실행 시마다 해 주어야 하므로 좀 귀찮다. 3번 방법은 탭 자동완성이 IRB 실행 시마다 늘 포함되게 해준다.

출처: 프로그래밍 루비, 인사이트
Posted by pcandme

TRACKBACK http://pcandme.net/trackback/93 관련글 쓰기

댓글을 달아 주세요

Computing/Programming2009/06/11 13:31
오늘 만난 에러이다.

스트러츠 1.3.10을 사용한 웹 애플리케이션을 개발하던 도중 만났다.;

전체 메시지는 다음과 같다.

HTTP Status 404 - Servlet action is not available

type Status report
message Servlet action is not available
description The requested resource (Servlet action is not available) is not available.

Apache Tomcat/5.5.27

고맙게도 에러 메시지는 저게 다다.;;;;

자... 뭐가 문젤까? 이런 경우 가장 크게 의심이 가는 건, 역시 설정 파일이다. web.xml 파일과 struts-config.xml 파일을 이잡듯 뒤졌지만, 뚜렷한 원인을 찾지 못했다.

구글링을 해보니, 역시나 그런 쪽 문제이다. 톰캣이 스트러츠의 액션 서블릿을 초기화하다 무슨 문제가 생긴 것이다. 그런데 로그도 찾을 수 없고, 에러 메시지는 저게 달랑 다라서 좀 헤맸다.;

결론적으로는 struts-config.xml 파일의 문제였다. <controller> 앨리먼트와 <message-resources> 앨리먼트의 속성으로 아직 만들지 않은 자바 클래스를 지정해 뒀던 것이다. 이것이 문제가 되어 스트러츠 액션 서블릿이 제대로 로드가 되지 않았던 것 같다.

결국, servlet-config.xml 파일의 어떤 부분에서라도 잘못이 있으면 스트러츠를 사용할 수 없다. 부분적(?)으로도 기동하지 않는다는 것이다.

이번 일로, 역시 에러 메시지의 중요성에 대해 깨달았다.; 그냥 저렇게만 떡하니 나오니 이거 서울에서 김서방 찾기지..;;;

그리고 나서 웹 애플리케이션을 다시 구동해 보니 이제 저 에러는 사라졌다. 단지 그 다음 에러가 났을 뿐이다.;;

그래도 이번엔 예외 스택에 쌓인 에러 메시지가 주~~욱 나와 주신다. 이런 고마울 데가!! ^^;;;

** 추가 **

개발 서버에서 배포 서버로 웹 애플리케이션을 WAR 형태로 배포한 뒤에 배포 서버에서 또 위와 같은 에러가 나왔다.;;

문제의 소지가 역시 struts-config.xml에 있을 것이라고 판단하였지만, 개발 서버에서는 동일한 내용을 가지고 잘 실행이 되는 것이, 배포 서버에서만 안된다는 것이 이상했다.

...........약 12시간 동안 별의 별 삽질을 다 하였지만 결국 해결을 못했다. 톰캣 설정과 로그도 다 뒤져가면서..; 대체 어디가 문제란 말인가....

좌절의 늪에서 기어 나와 다시 삽을 들고 struts-config.xml을 파기 시작했다. 이번에 취한 approach는 struts-config.xml 내의 앨리먼트를 하나씩 주석 처리해 가며 결과를 보는 것이었다.

이럴 수가, <form-beans> 앨리먼트가 문제였다. 대체 나의 폼빈들이 무엇이 문제가 있단 말인지... 그 순하디 순한 아이들이...

<form-beans> 앨리먼트를 주석 처리하고 웹 애플리케이션을 돌려보니 일단 된다. 하다보니 예외가 발생하였는데 그 예외인 즉,

java.lang.UnsupportedClassVersionError: Bad version number in .class file

였다...

아뿔싸!!

그제서야 주마등처럼 머리를 스치고 지나가는 생각. 개발 서버에서의 자바 버전은 6이고, 배포 서버에서의 자바 버전은 5였던 것이다!!! >_<;;

사소한 차이라고 여겨졌던 그 차이는, 결국 개발 서버에서 자바 6로 컴파일된 나의 폼빈 클래스들이 배포 서버의 자바 5 런타임에서 구동되지 못하도록 했고, 폼빈이 제대로 구동되지 않자 스트러츠의 ActionServlet 요놈이 체대로 초기화 되지 못했던 것이다...

모든 수수께끼는 풀렸어!

라고 말하는 김전일이 생각난다.;;;

그의 명대사 하나가 더 생각이 나는군..

어쨌거나 범인은 이 안에 있다..

어쨌거나 범인(원인)은 이 안(struts-config.xml 안)에 있다............-_-;;;

감히 확신하건대, 스트러츠 사용 시 'Servlet action is not available'이라는 에러가 나는 것은 거의 이 struts-config.xml 이 놈 때문이고, 이 놈을 잘 살펴보다보면 사건(?)의 실마리를 잡을 수 있다.

안의 설정들을 주석 처리해가며, 수사망(?)을 좁혀가는 것이다. 수사망을 좁히다보면 용의선 상에 오르는 놈이 있다. 이 놈을 족쳐야 한다...;

아무튼 12시간의 사투 끝에, 놈을 검거했고 이제는 저 골치아픈 메시지를 보지 않게 됐다.

그러나 모른다. 언제 어디서 놈이 우릴 노릴지...

그래서 우리는 항상 그를 경계하여야 할 것이다....

- THE END -

ps. 흠? 글이 어쩌다가 이렇게 됐지? -_-;;;;


Posted by pcandme

TRACKBACK http://pcandme.net/trackback/68 관련글 쓰기

댓글을 달아 주세요

Computing/Programming2009/05/16 22:19
이 포스트는 널리 사용되고 있는 버전 관리 시스템(Version Control System, VCS) 중 하나인 서브버전(Subversion, SVN)을 설치하고, 이클립스와 연동하는 방법에 관해 기술한다.

VCS 및 서브버전에 관한 자세한 내용은 다음의 링크를 참조하라.

- http://betterexplained.com/articles/a-visual-guide-to-version-control/
- http://subversion.tigris.org/

설치 환경은 다음과 같다.

  • 서버 OS: 데비안 GNU/Linux 5.0 Lenny
  • 클라이언트 OS: Ubuntu 8.04 Hardy Helon
  • SVN 버전: 1.5.1dfsg1-2
  • 이클립스 버전: 3.4.2 (Ganymede), build id: M20090211-1700
  • Apache HTTP 서버 버전: 2.2.9-10+lenny2

아래에서 명령어 실행 시 명령 프롬프트의 모양이 '$'이면 일반 사용자 권한으로, '#'이면 관리자 권한으로 실행하여야 한다.


1. SVN 설치

다음의 명령어를 관리자 권한으로 실행하여 SVN과 SVN tools 패키지를 설치해 준다.

# apt-get install subversion subversion-tools


다음과 같이 SVN 저장소(repository)의 루트가 될 디렉터리를 만들어 준다.

# mkdir -p /var/lib/svn


다음의 명령어로 프로젝트 디렉터리를 SVN 저장소 내에 생성하여 준다.

# svnadmin create /var/lib/svn/test


위에서는 프로젝트 디렉터리 명을 'test'로 하였다.

보통 SVN 저장소의 프로젝트 디렉터리 하부의 디렉터리 구조, 즉 디렉터리 레이아웃은 'trunk', 'tag', 'branches' 세 개로 구성된다. 이클립스에서 Subversive라는 플러그인을 이용하여 SVN과 연동하면 이 레이아웃을 지정해 줄 수 있기 때문에 필요 없는 과정이지만, 만약 이클립스와 연동을 할 것이 아니라면 다음과 같이 각 디렉터리들을 추가하여 레이아웃을 구성하면 된다.

# svn mkdir file:///var/lib/svn/test/trunk -m "Trunk"
# svn mkdir file:///var/lib/svn/test/tags -m "Tags"
# svn mkdir file:///var/lib/svn/test/branches -m "Branches"


2. WebDAV SVN 지원 모듈 설치 및 설정


SVN 저장소가 웹으로부터 접근 가능하도록 하기 위해서는 WebDAV SVN 지원 모듈 사용하면 된다. WebDAV SVN 지원 모듈은 libapache2-svn 패키지에 포함되어 있다. 다음과 같이 설치한다.

# apt-get install libapache2-svn


설치가 끝나면 설정을 해준다. /etc/apache2/mods-available/dav_svn.conf 파일을 수정한다.

# vi /etc/apache2/mods-available/dav_svn.conf


dav_svn.conf 파일이 아래와 같이 되도록 주석을 해제하거나, 추가 혹은 수정한다.

<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn

  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /var/lib/htpasswd/htpasswd

  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept>
</Location>


위에서 /var/lib/htpasswd/htpasswd 파일은 이전 포스트에서 나와 있다시피 Trac 설치 시 htpasswd 명령어로 만든 파일로써, 사용자 계정 정보가 암호화 되어 들어 있다. 사용자를 추가하고 싶으면 다음과 같이 하면 된다.

# htpasswd -cm /var/lib/htpasswd/htpasswd <추가할 계정명>


또한 위에서 <LimitExcept/> 앨리먼트를 바디의 내용(Require valid-user)는 제외하고 태그만 제거하면 해당 주소로 접근 시 계정명 및 암호 입력창을 띄워 인증된 사용자만이 해당 페이지를 볼 수 있게 한다.

위 dav_svn.conf 파일은 libapache2-svn 패키지 설치 시 /etc/apache2/mods-available 디렉터리에 생성되어, 자동으로 /etc/apache2/mods-enabled 디렉터리에 심볼릭 링크가 생성된다. 만약, mods-enabled 디렉터리에 dav_svn.conf 파일의 심볼릭 링크가 없다면 다음의 명령어로 추가해 준다.

# a2enmod /etc/apache2/mods-available/dav_svn


이 때, dav_svn.load 파일도 정상적으로 심볼릭 링크되어 있는지 확인한다. 그 파일이 있어야 WebDAV SVN 지원 모듈이 아파치에 정상적으로 로드된다.

아파치를 재시작하기에 앞서서 다음의 명령어로 /var/lib/svn 디렉터리 및 하위 모든 디렉터리의 소유자 및 소유그룹을 www-data로 변경한다.

# chown -R www-data.www-data /var/lib/svn/


아파치를 재시작한다.

# /etc/init.d/apache2 restart


여기까지 완료되면, 다음의 주소로 접속하여 제대로 설정되었는지 확인한다.

http://localhost/svn/test/

3. Subversive 플러그인 설치 및 설정

이클립스에서 SVN을 연동하기 위한 플러그인으로는 Subversive와 Subclipse 등을 들 수 있다. 여기서는 현재 이클립스 하위 프로젝트로 포함되어 현재 incubation 상태로 개발 중에 있는 Subversive를 사용하도록 한다.

Subversive를 사용하기 위해 이클립스의 'Help' 메뉴 -> 'Software Updates...' -> 'Available Software' 탭의 'Add Site...' 버튼을 눌러 다음과 같은 업데이트 사이트를 추가한다.

http://download.eclipse.org/technology/subversive/0.7/update-site/
http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/


첫 번째 업데이트 사이트는 Subversive 플러그인 설치를 위한 것이며, 두 번째 업데이트 사이트는 Subversive SVN 커넥터 플러그인 설치를 위한 것이다.

추가한 두 업데이트 사이트의 체크박스에 체크인하고 'Install...' 버튼을 눌러 포함된 모든 플러그인들을 설치하는데, 혹 오류로 설치가 잘 안될 경우 다음의 플러그인들만을 체크인하고 설치를 진행하도록 한다.

http://download.eclipse.org/technology/subversive/0.7/update-site/
└Subversive SVN Integration for the Mylyn Project (Optional) (Incubation)
└Subversive SVN JDT Ignore Extensions (Optional) (Incubation)
└Subversive SVN Team Provider (incubation)
└Subversive SVN Team Provider Localization (Optional) (Incubation)
└Subversive SVN Team Provider Sources (Incubation)
http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/
└Subversive SVN Connectors
└SVNKit 1.3.0 Implementation (Optional)


이 글을 작성하는 시점에서 각 플러그인의 버전은 Subversive SVN Connectors 및 SVNKit 1.3.0 Implementation만 2.2.0.I20090505-1500이고 나머지는 모두 0.7.8.I20090506-1500이다.

설치가 완료되면 이클립스의 'Window' 메뉴 -> 'Open Perspective' -> 'Other...'에서 'SVN Repository Exploring'를 선택하여 퍼스펙티브를 전환한다. SVN Repository Exploring 퍼스펙티브로 전환하면 왼편에 SVN Repositories 뷰가 위치하게 된다.

SVN Repositories 뷰에서 마우스 우클릭 -> 'New' -> 'Repository Location...'을 클릭하면 'New Repository Location' 창이 열리는데 여기서 연결할 SVN 저장소에 관한 정보를 입력해 주고 'Finish' 버튼을 눌러 설정을 완료한다.

제대로 연결이 되면 SVN Repositories 뷰에서 좀 전에 생성한 SVN 저장소의 내용을 볼 수 있을 것이다. 설정에 따라 사용자 인증이 필요할 수도 있다.

이클립스 프로젝트를 SVN 저장소에 최초로 등록하기 위해서는 'Project Explorer' 뷰에서 해당 프로젝트를 마우스 우클릭하여 'Team' -> 'Share Project...' 메뉴를 실행한 후, 저장소 플러그인 선택창에서 SVN 플러그인을 선택한다. 그 다음에 저장소 위치를 선택하는 창이 뜨는데 여기서 좀 전에 등록했던 저장소 위치를 선택하고, 'Next' 버튼을 누른다.

해당 저장소에 하나의 프로젝트만 관리할 수 있게 하기 위하여, 'Name on Repository' 영역을 'Use empty name'으로 설정하고, 'Project Repository Layout' 영역을 'Use single project layout'으로 설정한다. 'Finish' 버튼을 누르면 commit message를 입력하는 창이 뜨고, 적절한 message를 입력한 후, 'OK' 버튼을 누르면 등록이 완료된다. 이후에는 프로젝트 및 프로젝트 리소스 노드에서 마우스 우클릭하여 나오는 팝업 메뉴의 Team 메뉴에 다양한 VCS 관련 메뉴들이 추가된다.

* 참고
- http://ariejan.net/2006/12/01/how-to-setup-a-ubuntu-development-server-part-1
- http://blog.daum.net/kuh74/7583052
- http://www.eclipse.org/subversive/documentation/gettingStarted/aboutSubversive/install.php
- http://www.eclipse.org/subversive/downloads.php
- http://www.polarion.com/products/svn/subversive.php?src=eclipseproject
- 자바 프로젝트 필수 유틸리티, 박재성, 한빛미디어(주), 2009

Posted by pcandme

TRACKBACK http://pcandme.net/trackback/66 관련글 쓰기

  1. [소프트웨어형상관리] SCM도구 서브버젼 설치법, 서브버젼의 설정과 사용법.(SubVersion installation guide)  삭제

    2010/07/28 00:30TRACKBACK FROM 월풍도원(月風道院) - Delight on the Simple Life.

    이미지출처 : blog.codesion.com SCM(software configuration management)도구의 하나인 SVN의 설치 및 설정방법을 여러 웹페이지를 참조하여 간단하게 사용법을 정리해 보았다. ————————————————- 서브버젼 설정 ————————————————- 1. 서브버젼을 설치한다. (http://subclipse.tigris.org/) 2. 저장소를 생성한다. svn설치폴더\bin\svnadmin create..

댓글을 달아 주세요

Computing/Programming2009/05/16 14:43
Trac은 향상된 위키 및 이슈 추적 시스템으로, 내 서버에 이를 설치하고 지난 포스트에 그 설치 기록을 포스팅하였다. 이 포스트에서는 설치된 Trac과 이클립스를 연동하기 위해 Mylyn 플러그인을 설치하고 설정하는 방법에 관해 기술한다. 여기서 기술할 설치 방법은 내가 설치 및 설정을 하면서 따랐던 순서에 기반하며, 시스템에 따라서 그 방법 및 순서가 상이할 수도 있음을 미리 말해둔다.

설치 환경은 다음과 같다.

  • OS: 데비안 GNU/Linux 5.0 Lenny
  • Trac 버전: 0.11.1-2.1
  • 이클립스 버전: 3.4.2 (Ganymede), build id: M20090211-1700


1. Trac XmlRpc 플러그인 설치


http://trac-hacks.org/wiki/XmlRpcPlugin에서 xmlrpcplugin-r5751.zip 파일을 다운로드 한 후, 압축을 해제하고 압축을 해제한 디렉터리에서 trunk 디렉터리로 이동한다.

$ cd trunk


trunk 디렉터리에서 관리자 권한으로 다음을 실행한다.

# python setup.py bdist_egg

running bdist_egg
running egg_info
creating TracXMLRPC.egg-info
writing TracXMLRPC.egg-info/PKG-INFO
writing top-level names to TracXMLRPC.egg-info/top_level.txt
writing dependency_links to TracXMLRPC.egg-info/dependency_links.txt
writing entry points to TracXMLRPC.egg-info/entry_points.txt
writing manifest file 'TracXMLRPC.egg-info/SOURCES.txt'
...
(중략)
...
creating dist
creating 'dist/TracXMLRPC-1.0.0-py2.5.egg' and adding 'build/bdist.linux-i686/egg' to it
removing 'build/bdist.linux-i686/egg' (and everything under it)


위 명령이 정상적으로 실행되고 나면 trunk 디렉터리 내에 dist 디렉터리가 생겼을 것이다. dist 디렉터리로 이동하여 다음의 명령어로 플러그인을 설치한다.

# cd dist
# easy_install TracXMLRPC-1.0.0-py2.5.egg

Processing TracXMLRPC-1.0.0-py2.5.egg
Copying TracXMLRPC-1.0.0-py2.5.egg to /usr/lib/python2.5/site-packages
Adding TracXMLRPC 1.0.0 to easy-install.pth file

Installed /usr/lib/python2.5/site-packages/TracXMLRPC-1.0.0-py2.5.egg
Processing dependencies for TracXMLRPC==1.0.0
Finished processing dependencies for TracXMLRPC==1.0.0


위와 같이 실행되면 XmlRpcPlugin이 제대로 설치된 것이다. 다음과 같이 아파치 서버를 재시작한다.

# /etc/init.d/apache2 restart

이제 Trac 프로젝트 사이트에 관리자로 로그인 하여, 'Admin' 메뉴 페이지 내 'General' 카테고리의 하위 메뉴인 'Plugin' 메뉴에서 'TracXMLRPC 1.0.0' 플러그인의 모든 컴포넌트를 활성화 한다.

그런 다음, 'Permissions' 메뉴를 클릭하여 'Manage Permissions' 페이지로 들어간다. 당 페이지의 오른쪽에 보면 'Grant Permission' 폼 그룹이 있는데, 여기서 XmlRpc API를 사용할 계정을 'Subject' 입력 폼에 입력하고, 아래의 'Action' 드롭 다운 리스트에서 'XML_RPC'를 선택한 후, 'Add' 버튼을 눌러 XmlRpc 사용 계정을 등록한다. Subject에는 특정 사용자 계정명 또는 그룹명이 들어갈 수 있다.

여기까지 하면 Trac에서의 설정은 완료된다.

2. 이클립스 Mylyn 플러그인 설치 및 설정

2-1. Mylyn 플러그인 설치

이클립스의 Mylyn 플러그인은, Java EE 개발자 용 이클립스 패키지의 경우 기본적으로 설치가 되어 있다. 만약, 설치가 되어 있지 않다면 이클립스의 'Help' 메뉴 -> 'Software Updates...' -> 'Available Software' 탭에서 'Ganymede Update Site' -> 'Collaboration Tools'를 클릭하여 펼쳐지는 하위 노드 중 Mylyn 관련 플러그인을 모두 설치한다. 설치가 완료되면 이클립스를 재시작 한다.

2-2. Mylyn Trac 연결 플러그인 설치

Help 메뉴 -> Software Updates... -> Available Software 탭에서 'Manage Sites...' 버튼을 눌러 다음의 업데이트 사이트를 활성화 한다.

http://download.eclipse.org/tools/mylyn/update/extras

Available Software 탭에서 'mylyn'으로 검색하면 나오는 플러그인 중에, 'Mylyn Extras' -> 'Mylyn Integration' -> 'Mylyn Connetor: Trac'을 선택하여 설치한다. 설치 완료 후, 뜨는 재시작 여부를 묻는 대화창에서 'Yes'를 선택해 이클립스를 재시작한다.

2-3. 이클립스 Trac 연동 확인

이클립스의 'Winodw' 메뉴 -> 'Show View' -> 'Other...' -> 'Tasks' 또는 'Mylyn' -> 'Task Repositories'를 눌러 Task Repositories 뷰를 현재의 퍼스펙티브에 표시한다.

Task Repositories 뷰에서 마우스 우클릭하여 컨텍스트 메뉴를 띄운 다음, 'Add Task Repository'를 선택하면 Trac 커넥터를 볼 수 있는데, 이를 선택하고, 'Next' 버튼을 누른다.

이제 서버의 URL을 입력 및 레이블을 입력하고, 바로 아래에서 오른쪽에 있는 'Anonymous' 체크 박스 버튼에 체크를 해제하여 'User ID' 항목과 'Password' 항목을 활성화 한다음 Trac 프로젝트 사이트에서 XmlRpc API 사용 계정으로 등록했던 계정 정보를 입력한다.

아래의 'Additional Settings'를 확장하면 'Access Type' 드롭 다운 리스트가 보이는데, 여기서 'XML-RPC Plugin (Rev. 1950)'을 선택한다.

이제 설정을 확인하기 위해 아래 'Validate Setting' 버튼을 누른다. 접속에 성공하면 상단에 다음과 같은 메시지가 나타난다.

Authentication credentilas are valid.

위와 같은 메시지가 나타나면 'Finish' 버튼을 눌러 설정을 완료한다.

* 참고
- http://trac-hacks.org/wiki/XmlRpcPlugin
- 자바 프로젝트 필수 유틸리티, 박재성, 한빛미디어(주), 2009
Posted by pcandme

TRACKBACK http://pcandme.net/trackback/65 관련글 쓰기

댓글을 달아 주세요

Computing/Programming2009/05/14 22:36
이 포스트는 오늘 내가 나의 데비안 서버에 "Trac"이라는 이슈 관리 시스템을 설치한 경험을 기반으로 정리해 본 설치 방법에 관한 포스트이다. Trac 홈페이지에서는 Trac을 다음과 같이 소개하고 있다.

Trac is an enhanced wiki and issue tracking system for software development projects. Trac uses a minimalistic approach to web-based software project management. Our mission is to help developers write great software while staying out of the way. Trac should impose as little as possible on a team's established development process and policies.

이 포스트는 나의 설치 경험에 기반하므로, 환경이 다른 시스템에서는 제대로 되지 않을 수 있으며, 단지 Trac 설치 시 참고는 가능하리라 생각한다.

설치 환경은 다음과 같다.

  • OS: 데비안 GNU/Linux 5.0 Lenny
  • HTTP 서버: Apache 2.2.9-10+lenny2
  • HTTP 서버 연동: mod_python 모듈
  • Trac 버전: 0.11.1-2.1

1. 필요 패키지 설치


다음과 같이 필요 패키지를 설치해 준다.

# apt-get update; apt-get install libapache2-mod-python libapache2-mod-python-doc trac

내 시스템의 경우, 아파치는 이미 설치되어 있었기 때문에 제외하였으며, 그외에 Trac 설치에 필요한 패키지들은 의존성에 의해 전부 설치 된다.

2. 필요 디렉터리 생성

다음과 같이 필요 디렉터리를 생성하고 소유권을 아파치의 실행 UID인 www-data로 지정해 준다.

# mkdir /var/lib/svn
# chown -R www-data:www-data /var/lib/svn/
# mkdir /var/lib/trac
# chown -R www-data:www-data /var/lib/trac/
# mkdir /var/lib/htpasswd
# chown -R www-data:www-data /var/lib/trac/

서브버전과의 연동을 염두에 두고 있다면, 위와 같이 서브버전 저장소의 루트로 사용할 디렉터리를 '/var/lib/svn'으로 미리 생성해 준다. 이는 Trac의 설치 과정 중 설정값으로 넣을 서브버전 저장소의 프로젝트 디렉터리의 상위 디렉터리가 될 것이다. Trac의 환경 디렉터리 또한 위와 같이 '/var/lib/trac'으로 생성해 준다. '/var/lib/htpasswd' 디렉터리는 Trac 접속 계정 정보 파일이 저장될 디렉터리이다. 이 디렉터리들은 임의의 위치에 생성될 수 있다.

3. Trac 프로젝트 생성

Trac의 프로젝트를 다음과 같이 생성해 준다. 여기서는 프로젝트의 디렉터리 명을 'test'로 하였다. 생성 과정 중 입력해야 할 것은 볼드체로 표기하였다.

# trac-admin /var/lib/trac/test initenv

Creating a new Trac environment at /var/lib/trac/test

Trac will first ask a few questions about your environment
in order to initialize and prepare the project database.

 Please enter the name of your project.
 This name will be used in page titles and descriptions.

Project Name [My Project]> Test
 
 Please specify the connection string for the database to use.
 By default, a local SQLite database is created in the environment
 directory. It is also possible to use an already existing
 PostgreSQL database (check the Trac documentation for the exact
 connection string syntax).

Database connection string [sqlite:db/trac.db]> [Enter]
 
 Please specify the type of version control system,
 By default, it will be svn.

 If you don't want to use Trac with version control integration,
 choose the default here and don't specify a repository directory.
 in the next question.

Repository type [svn]> [Enter]

 Please specify the absolute path to the version control
 repository, or leave it blank to use Trac without a repository.
 You can also set the repository location later.

Path to repository [/path/to/repos]> /var/lib/svn/test

Creating and Initializing Project
 Installing default wiki pages
 CamelCase imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/CamelCase
 InterMapTxt imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/InterMapTxt
 InterTrac imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/InterTrac
 InterWiki imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/InterWiki
 PageTemplates imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/PageTemplates
 RecentChanges imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/RecentChanges
 SandBox imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/SandBox
 TitleIndex imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TitleIndex
 TracAccessibility imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracAccessibility
 TracAdmin imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracAdmin
 TracBackup imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracBackup
 TracBrowser imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracBrowser
 TracCgi imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracCgi
 TracChangeset imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracChangeset
 TracEnvironment imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracEnvironment
 TracFastCgi imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracFastCgi
 TracFineGrainedPermissions imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracFineGrainedPermissions
 TracGuide imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracGuide
 TracImport imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracImport
 TracIni imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracIni
 TracInstall imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracInstall
 TracInterfaceCustomization imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracInterfaceCustomization
 TracLinks imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracLinks
 TracLogging imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracLogging
 TracModPython imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracModPython
 TracNavigation imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracNavigation
 TracNotification imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracNotification
 TracPermissions imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracPermissions
 TracPlugins imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracPlugins
 TracQuery imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracQuery
 TracReports imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracReports
 TracRevisionLog imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracRevisionLog
 TracRoadmap imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracRoadmap
 TracRss imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracRss
 TracSearch imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracSearch
 TracStandalone imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracStandalone
 TracSupport imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracSupport
 TracSyntaxColoring imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracSyntaxColoring
 TracTickets imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracTickets
 TracTicketsCustomFields imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracTicketsCustomFields
 TracTimeline imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracTimeline
 TracUnicode imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracUnicode
 TracUpgrade imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracUpgrade
 TracWiki imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracWiki
 TracWorkflow imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/TracWorkflow
 WikiDeletePage imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiDeletePage
 WikiFormatting imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiFormatting
 WikiHtml imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiHtml
 WikiMacros imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiMacros
 WikiNewPage imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiNewPage
 WikiPageNames imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiPageNames
 WikiProcessors imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiProcessors
 WikiRestructuredText imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiRestructuredText
 WikiRestructuredTextLinks imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiRestructuredTextLinks
 WikiStart imported from /usr/lib/python2.5/site-packages/trac/wiki/default-pages/WikiStart

---------------------------------------------------------------------
Warning: couldn't index the repository.

This can happen for a variety of reasons: wrong repository type,
no appropriate third party library for this repository type,
no actual repository at the specified repository path...

You can nevertheless start using your Trac environment, but
you'll need to check again your trac.ini file and the [trac]
repository_type and repository_path settings in order to enable
the Trac repository browser.


---------------------------------------------------------------------
Project environment for 'GIST Simulation Portal' created.

You may now configure the environment by editing the file:

  /var/lib/trac/test/conf/trac.ini

If you'd like to take this new project environment for a test drive,
try running the Trac standalone web server `tracd`:

  tracd --port 8000 /var/lib/trac/test

Then point your browser to http://localhost:8000/test.
There you can also browse the documentation for your installed
version of Trac, including information on further setup (such as
deploying Trac to a real web server).

The latest documentation can also always be found on the project
website:

  http://trac.edgewall.org/

Congratulations!


이 과정을 마치고 나면 Trac의 환경 디렉터리(여기선 /var/lib/trac) 아래에 프로젝트 디렉터리 및 내부의 파일들이 새로 생성되므로 이 모든 디렉터리 및 파일들에 아파치가 접근할 수 있도록 다음과 같이 소유권을 변경한다.

# chown -R www-data:www-data /var/lib/trac

4. 웹 서버(아파치) 연동

아파치 연동을 위해 /etc/apache2/site-available 디렉터리에 'trac'이라는 파일을 만들고, 아래와 같이 가상 호스트 설정을 해준다. 아래는 8080 포트에서 Trac 프로젝트 사이트가 서비스 될 수 있도록 한 것이다.

# vi /etc/apache2/site-available/trac

NameVirtualHost *:8080
<VirtualHost *:8080>
    <Location /trac>
        SetHandler mod_python
        PythonHandler trac.web.modpython_frontend
        PythonOption TracEnvParentDir /var/lib/trac
        PythonOption TracUriRoot /trac
    </Location>

    <LocationMatch "/trac/[^/]+/login">
        AuthType Basic
        AuthName "Trac, Issue Tracking and Documenting"
        AuthUserFile /var/lib/htpasswd/htpasswd
        Require valid-user
    </LocationMatch>
</VirtualHost>

추가한 가상 호스트 설정을 다음의 명령어로 /etc/apache2/sites-enabled 디렉터리에 추가한다.

# a2ensite trac

아파치를 재시작하고, Trac에 접속하여 잘 설치되었는지 확인한다.

# /etc/init.d/apache2 restart

http://localhost:8080/trac

위 페이지에서 프로젝트 목록이 링크로 제대로 출력되는 것을 볼 수 있어야 한다.

5. 관리자 계정 추가

다음과 같이 관리자 계정을 생성하고, Trac 프로젝트에 등록한다.

# htpasswd -cm /var/lib/htpasswd/htpasswd admin
# chown -R www-data:www-data /var/lib/htpasswd
# trac-admin /var/lib/trac/test permission add admin TRAC_ADMIN

6. 필수 플러그인 설치

Trac 사용에 필수적인 다음의 플러그인들을 설치한다.

  • IniAdminPlugin - Trac 프로젝트의 환경 설정 시 <프로젝트 디렉터리>/conf/trac.ini 파일을 직접 수정하는 대신에 웹 환경에서 할 수 있게 해주는 플러그인이다.
  • AccountManagePlugin - 계정의 생성 및 수정, 삭제를 관리하는 플러그인이다.
  • TimingAndEstimationPlugin - 태스크 관리 시 일정을 예측하고 작업한 시간을 관리하는 플러그인이다.

6-1. IniAdminPlugin 설치

http://trac-hacks.org/wiki/IniAdminPlugin에서 iniadminplugin_0.11-r5728.zip 파일을 다운로드 한 후, 압축을 해제한다. 압축이 해제된 디렉터리에서 다음을 실행하여 IniAdmin 플러그인을 설치한 후, 아파치를 재시작한다.

# python setup.py install
# /etc/init.d/apache2 restart

그런 다음 Trac 프로젝트 사이트(여기서는 http://pcandme.net:8080/trac/test)의 'Admin' 메뉴 페이지 내 'General' 카테고리의 하위 메뉴인 'Plugin' 메뉴에서 'IniAdmin 0.2' 플러그인을 활성화한다. IniAdmin 플러그인이 활성화 되면 Admin 메뉴 페이지에서 좌측 메뉴에 'trac.ini' 카테고리가 추가 된다.

6-2. AccountManagerPlugin 설치

http://trac-hacks.org/wiki/AccountManagerPlugin에서 accountmanagerplugin_0.11-r5728.zip 파일을 다운로드 한 뒤, 압축을 해제한다. 압축이 해제된 디렉터리에서 다음을 실행하여 AccountManager 플러그인을 설치한 후, 아파치를 재시작한다.

# python setup.py install
# /etc/init.d/apache2 restart

그런 다음 Trac 프로젝트 사이트의 'Admin' 메뉴 페이지 내 'General' 카테고리의 하위 메뉴인 'Plugin' 메뉴에서 'TracAccountManager 0.2.1dev' 플러그인의 컴포넌트 중 다음만을 활성화한다.

AccountManagerAdminPage, AccountManager, HtPasswdStore, AccountModule

또한 추가된 'Accounts' 카테고리의 'Configuration' 메뉴에서 다음과 같이 Trac 접속 계정 정보 파일을 설정해 준다.

/var/lib/htpasswd/htpasswd

Accounts 카테고리의 'Users' 메뉴를 누르면 원래 계정 리스트를 볼 수 있고 추가, 수정, 삭제 가능하여야 하는데, 나의 경우, 다음과 같은 에러가 만났다.

This password store does not support listing users

이 에러는 trac.ini 파일에서 다음과 같이 [account-manager] 섹션을 직접 수정하여 해결 하였다.

# vi /var/lib/trac/test/conf/trac.ini

(전략)
...
[account-manager]
force_passwd_change = true
password_file = /var/lib/htpasswd/htpasswd
password_store = HtPasswdStore
...
(후략)

위에서 볼드체로 쓰여져 있는 것이 추가된 것이다.

6-3. TimingAndEstimationPlugin 설치

http://trac-hacks.org/wiki/TimingAndEstimationPlugin에서 timingandestimationplugin_branches_trac0.11-r5729.zip 파일을 다운로드 한 뒤, 압축을 해제한다. 압축이 해제된 디렉터리에서 다음을 실행하여 TimingAndEstimation 플러그인을 설치한 후, 아파치를 재시작한다.

# python setup.py install
# /etc/init.d/apache2 restart

그런 다음 Trac 프로젝트 사이트의 'Admin' 메뉴 페이지 내 'General' 카테고리의 하위 메뉴인 'Plugin' 메뉴에서 'timingandestimationplugin 0.7.8' 플러그인의 모든 컴포넌트를 활성화한다. 이 때, 적용 버튼을 누르면 다음의 에러가 발생 할 수도 있는데,

Trac Error

TracError: The Trac Environment needs to be upgraded.

Run "trac-admin /var/lib/trac/sim_portal upgrade"

이 때에 다음을 실행하여 데이터베이스 스키마를 업그레이드시켜 주면 해결된다.

# trac-admin /var/lib/trac/sim_portal upgrade

Timing and Estimation needs an upgrade
Upgrading Database
Creating bill_date table
Creating report_version table
Upgrading report_version table to v4
Dropping report_version table
Upgrading reports
Upgrading fields
Upgrading usermanual
Done Upgrading
Upgrade done.

아파치를 재시작하고, 에러 메시지가 출력된 페이지를 새로 고침 한다.

# /etc/init.d/apache2 restart

Trac 프로젝트 사이트에 'Management' 탭이 추가 되어 있으면 설치가 된 것이다.

* 참고
- http://blog.daum.net/kuh74/7583052
- http://trac.edgewall.org/wiki/TracInstall
- http://trac.edgewall.org/wiki/TracOnDebian
- http://goodbbai.tistory.com/29
- http://programmers-blog.com/2009/04/09/trac-password-store-problem
- http://trac-hacks.org/wiki/AccountManagerPlugin
- http://trac-hacks.org/wiki/AccountManagerPlugin
- http://trac-hacks.org/wiki/TimingAndEstimationPlugin
- 자바 프로젝트 필수 유틸리티, 박재성, 한빛미디어(주), 2009

** 추가 **
설치를 완료한 후, Trac 프로젝트 목록 페이지(여기서는 http://localhost:8080/trac)를 보면 추가한 프로젝트 외에 다음과 같은 이상한 것이 보일 수도 있다.

.egg-cache: Error
([Errno 2] No such file or directory: '/var/lib/trac/.egg-cache/VERSION')


'.egg-cache' 디렉터리는 실제로 Trac 프로젝트 디렉터리 상에 존재하는 것으로, 캐쉬에 관한 데이터를 가지고 있을 것으로 추정된다. 이는 Trac 버전 0.11.1에서의 버그로, 0.11.2에서는 이 버그가 고쳐진다고 한다.

** 추가 2 **
'4. 웹 서버(아파치) 연동'에서 8080 포트로 Trac 프로젝트 사이트가 서비스 되도록 가상 호스트 설정을 해주었는데, 이럴 필요 없이 그냥 80 포트로 서비스 되도록 Trac 프로젝트 사이트의 위치만 설정해 주어도 된다.;

/etc/apache2/conf.d에 'trac.conf'라는 파일을 만들고 아래의 내용을 넣어 준다.

<Location /trac>
    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnvParentDir /var/lib/trac
    PythonOption TracUriRoot /trac
</Location>

<LocationMatch "/trac/[^/]+/login">
    AuthType Basic
    AuthName "Trac, Issue Tracking and Documenting"
    AuthUserFile /var/lib/htpasswd/htpasswd
    Require valid-user
</LocationMatch>


아파치를 재시작하기 전에 /etc/apache2/sites-enabled 디렉터리에 추가되었던 가상 호스트 설정을 'a2dissite' 명령으로 해제 한다. 물론 이는 'unlink' 명령어 등으로 심볼릭 링크를 바로 제거해도 된다.

이제 다음처럼 아파치를 재시작하면 자동으로 conf.d 디렉터리 내의 설정 파일들이 로드되면서 Trac 프로젝트 사이트의 위치를 추가해준다.

# /etc/init.d/apache2 restart


이제, 포트 번호를 넣지 않고(80포트가 디폴트이므로), 다음과 같은 주소로 Trac 프로젝트 사이트 목록 페이지에 접근 가능해 진다.

http://localhost/trac

Posted by pcandme

TRACKBACK http://pcandme.net/trackback/64 관련글 쓰기

댓글을 달아 주세요

Computing/Programming2009/04/16 11:01
< 클릭해서 원래 사이즈로 보세요~!>
사용자 삽입 이미지

- 출처
http://xp123.com/xplor/xp0002f/
Posted by pcandme

TRACKBACK http://pcandme.net/trackback/60 관련글 쓰기

댓글을 달아 주세요

Computing/Programming2009/04/11 16:16
이클립스 웹 프로젝트에서 만난 오늘의 에러~

CHKJ3000E: WAR Validation Failed: java.lang.NullPointerException

반갑게 인사(...)하고 에러 코드인 'CHKJ3000E'로 구글링한 결과... web.xml 파일의 문제일 가능성이 있단다! 때마침 web.xml 파일 수정 후 튀어나온 에러~

웹 애플리케이션 레벨의 오류 처리 페이지 설정을 위하여, <error-page> 엘리먼트를 XML 디자인 에디터로 추가하였는데, 이것이 문제일 것으로 짐작하고 코드 에디터로 전환하여 보니 <error-page> 엘리먼트의 속성 엘리먼트인 <exception-type> 엘리먼트와 <location> 사이에 빈 줄이 하나 삽입되어 있는 것을 발견, 설마하고 빈 줄을 삭제해 보니 에러가 사라진다..

뭐야... 얘... 디자인 에디터... 그저 편해서 썼더니 이런 짓(?)을...!

이라지만 앞으로도 애용할 생각! :)

아무튼 오늘도 오류 한 건(?) 해결~

다음의 페이지들을 참고하였다!!

- http://www.eclipsezone.com/eclipse/forums/t64709.html
- http://erik.weibust.net/2006/06/22/eclipse-what-the-heck-is-chkj3000e
Posted by pcandme

TRACKBACK http://pcandme.net/trackback/59 관련글 쓰기

댓글을 달아 주세요

Computing/Programming2009/04/11 13:23
JSP를 공부하던 중, 웹 애플리케이션의 web.xml 파일 내 필터 매핑 엘리먼트의 속성 중 하나인 <url-pattern> 엘리먼트 설정을 책의 내용대로 'some_path/*.jsp'처럼 해서 특정 디렉터리('some_path')에 있는 JSP 파일에만 필터를 적용되도록 했더니 톰캣이 뜨면서 오류가 발생한다. 이클립스 콘솔에 출력된 에러 메시지를 보니 'invalid <url-pattern>'이란다.

구글을 찾아보니, Servlet specification 2.4에서 JSP 속성 그룹(jsp-propertity-group)에 허용되는 URL 패턴은 다음과 같단다.

- A string beginning with a / character and ending with a /* suffix is used for path mapping.
- A string beginning with a *. prefix is used as an extension mapping.
- A string containing only the / character indicates the "default" servlet of the application. In this case the servlet path is the request URI minus the context path and the path info is null.
- All other strings are used for exact matches only.

즉, 위와 같이 하려면 '/some_path/*'라고 해야한다.

구글에서 찾은 페이지에 따르면, 톰캣의 이전 버전에서는 'some_path/*.jsp' 같은 것이 가능했다고 한다. 그러나 이것은 Servlet specification을 따르는 것이 아니므로, 수정되었다고 한다.

* 참고 문헌
- http://objectmix.com/java/159394-tomcat-5-0-web-xml-filter-mapping-url-pattern-content-jsp.html
- http://www.mail-archive.com/tomcat-dev@jakarta.apache.org/msg43676.html
- http://www.coderanch.com/t/84442/Tomcat/write-correct-url-pattern-security
Posted by pcandme

TRACKBACK http://pcandme.net/trackback/58 관련글 쓰기

댓글을 달아 주세요

Computing/Programming2009/04/01 16:42
이클립스에서 JNDI(Java Naming and Directory Interface) 연결 설정 시 나오는 다음과 같은 워닝에 대한 대처법이다.

CHKJ4019W: Invalid res-sharing-scope; valid values are "Shareable" or "Unshareable".

이는 이클립스 웹 프로젝트의 WEB-INF 폴더의 'web.xml' 파일에 다음과 같이 JNDI 연결 설정을 추가하였을 때 발생한다.

<resource-ref>
    <res-ref-name>jdbc/oracle</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>       
</resource-ref>

<resource-ref> 엘리먼트 내부에 다음 엘리먼트를 추가해주면 워닝은 사라진다.

<res-sharing-scope>Shareable</res-sharing-scope>

워닝에서 유추할 수 있듯이 <res-sharing-scope> 엘리먼트의 바디에는 'Shareable' 혹은 'Unshareable' 둘 중의 하나만 들어갈 수 있다.

이 워닝이 발생하는 이유는 명확하지 않다. 워닝의 내용은 <res-sharing-scope> 엘리먼트 바디에 유효하지 않은 값이 있다고 하는 것인데, 이것이 어떻게해서 그 엘리먼트가 존재하지도 않는데도 발생하는지 의문이다. 혹, 그 엘리먼트가 필수적으로 삽입되게 하거나, 혹은 삽입을 권장하려 한 것은 아닌가 문득 생각이 들지만, 그러려면 그런 내용을 지닌 에러 혹은 워닝을 냈어야 하는게 아닌가 한다. 아무튼 저 워닝이 발생하게 되는 명확한 이유는 알지 못하더라도, <res-sharing-scope> 엘리먼트의 의미는 다음의 문단에서 파악할 수 있지 않을까 한다.

The bean provider can control the extent that connections are shared. By default, other enterprise beans in the application that use the same resource in the same transaction context can share the connection. The bean provider can set the res-sharing-scope deployment descriptor element to Unshareable to indicate that a connection not be shared. Keep in mind, though, that sharing connections to a resource manager allows the container to optimize connection and local transaction use. It is recommended that connections be marked Shareable.

위 문단은 "Designing Enterprise Applications with the J2EE Platform, Second Edition"라는 책에서 인용한 것이다.

* 참고
- http://younghoe.info/tag/CHKJ4019W
- http://fallacy.tistory.com/212
Posted by pcandme

TRACKBACK http://pcandme.net/trackback/55 관련글 쓰기

댓글을 달아 주세요

Computing/Programming2009/03/25 20:29
이클립스에서 오라클 데이터베이스의 연결을 설정하는 방법이다. 이클립스와 오라클 데이터베이스의 버전은 다음과 같다.

- 이클립스: Eclipse IDE for Java EE Developers, Version: 3.4.2 Ganymede
- 오라클 DB: Oracle Database 10g Express Edition (이하 오라클 10g XE)

이클립스가 Java EE 개발자 버전임에 유의하라. 여기서는 데이터베이스 연결을 설정하기 위해 Data Source Explorer 뷰를 사용하는데, 이는 Data Tools Platform (DTP)에 포함되어 있으며, DTP는 이클립스 Java EE 개발자 버전에서 자동으로 설치된다. 즉, 지금부터 기술할 방법으로 데이터베이스 연결을 설정하기 위해서는 최소한 DTP가 설치되어 있어야 한다. 또한, 인터페이스 언어는 영어를 기준으로 한다. 오라클 10g XE는 본 블로그의 이전 포스트(우분투 8.04 HH에 오라클 10g XE 설치)를 따라 설치하였다고 가정한다.

먼저, 이클립스 메인 메뉴에서 Windows -> Show View -> Data Source Explorer를 선택하여 Data Source Explorer 뷰를 연다. 기본적으로 화면 하단에 뷰가 열릴 것이다. 뷰에 있는 Database Connections 항목을 우클릭하여 나오는 팝업 메뉴에서 'New...'를 선택하면, 그림 1과 같이 New Connection Profile 대화창이 열린다. 여러가지 데이터베이스 중에서 'Oracle'을 선택하고, 'Name'에는 원하는 이름을 넣는데, 여기서는 'Oracle 10g XE'라고 하였다. 완료되면 'Next' 버튼을 눌러 다음으로 진행한다.

사용자 삽입 이미지

그림 1. New Connection Profile 대화창


다음에는 JDBC 드라이버와 연결 상세를 설정하여야 하는데, 'Drivers' 항목의 오른쪽에 있는 추가 버튼('+' 모양)을 눌러 New Driver Definition 대화창을 띄운다. 대화창이 뜨면, 먼저 'Name/Type' 탭에서 그림 2와 같이 System Version이 '10'인 'Oracle Thin Driver'를 선택한다.

사용자 삽입 이미지

그림 2. New Driver Definition 대화창 - 1


드라이버를 선택하면, 위 그림에서처럼 JAR/zip의 위치를 못찾겠다는 에러 메시지가 뜨게 되는데, 이는 다음 탭인 'Jar List' 탭에서 설정해 주면 된다. 'Jar List' 탭의 'Clear All' 버튼을 눌러 디폴트로 추가된 설정을 삭제한 뒤, 'Add JAR/Zip' 버튼을 눌러 설치된 오라클 10g XE의 위치에서 'ojdbc14.jar' 파일을 찾아서 추가한다. 'ojdbc14.jar' 파일은 기본적으로 다음과 같은 위치에 있다.

/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/jdbc/lib/

추가를 완료하면 다음의 그림 3과 같이 될 것이다.

사용자 삽입 이미지

그림 3. New Driver Definition 대화창 - 2


'Properties' 탭에서는 다른 디폴트 값은 그대로 두고, 'Connection URL' 항목에서 SID 부분, 즉 ':db'를 삭제하고, 'Database Name'은 'xe'로 한다. 'Password'와 'User ID'는 오라클 데이터베이스에서 미리 생성한 계정 정보를 입력한다. 설정이 완료되면 다음 그림과 같을 것이다.

사용자 삽입 이미지

그림 4. New Driver Definition 대화창 - 2


'OK' 버튼을 누르면 설정한 내용이 반영되어 New Connection Profile 대화창에 나타난다. 'SID'와 'Port number' 항목이 비어 있는 것을 볼 수 있는데, 각각 'xe'와 '1521'을 입력한다. 포트 번호는 시스템에 따라 다를 수 있으며, 1521은 오라클 데이터베이스의 디폴트 포트 번호이다. 설정을 완료하면 다음 그림 5와 같이 된다.

사용자 삽입 이미지

그림 5. New Connection Profile 대화창


아래 'Test Connection' 버튼을 눌러 연결 테스트를 수행하여 제대로 되는지 확인한 후, 이상이 없으면 'Next' 버튼을 눌러 최종적으로 설정 내역을 확인한 후, 'Finish' 버튼을 눌러 연결 설정을 완료한다.

연결 설정이 완료되면, Database Connections 항목 아래에 오라클 데이터베이스 연결 항목이 생성되는 것을 볼 수 있다. 트리를 확장하면, 하위에 'xe' 노드가 있고, 그 하위에 'Roles', 'Schemas', 'Users' 항목이 나타나는데, 'Schemas' 노드를 확장하면 모든 스키마들이 다 표시되는 것을 볼 수 있다. 필터를 이용하면, 불필요한 정보는 보지 않도록 설정할 수 있다. 'Schemas' 항목을 우클릭한 후, 'Properties'를 눌러 속성창을 띄운다. 속성창에서 아래에 'Disable filter'의 체크 박스를 체크 해제하면, 그 위의 두 라디오 박스가 활성화 되는데, 그 중 'Selection'을 선택한 후, 아래 리스트 중에 아까 입력한 오라클 데이터베이스의 계정명으로 된 항목만을 선택하고 'OK' 버튼을 누르면 그 스키마만 보이는 것을 확인할 수 있을 것이다.

* 참고 문헌
-Getting Started With the Oracle Database Plugin for Eclipse DTP
Posted by pcandme

TRACKBACK http://pcandme.net/trackback/54 관련글 쓰기

댓글을 달아 주세요

  1. grooveJYS

    좋은정보 감사합니다.

    2009/07/21 10:10 [ ADDR : EDIT/ DEL : REPLY ]
    • pcandme

      뭘요~ ^^ 댓글 감사드립니다~ ^^

      2009/07/21 22:23 [ ADDR : EDIT/ DEL ]