2010년 8월 19일 목요일

Redirect 설정

IP 로 웹서버에 접근하는것을 Tomcat Web 프로젝트로 리다이렉트

<VirtualHost *:80>
        ServerName 211.115.xx.xxx
        Redirect / http://www.test.kr/
</VirtualHost>

위의 www.test.kr 은 내가 산 도메인 이고 위와 같이 접근하면 Tomcat으로 Redirect 된다.


Could not reliably determine the server's fully qualified domain name, using <IP>

아파치 설정을 하다가 가상 호스트를 쓸일이 생겨서

<VirtualHost *:80>
.......
</VirtualHost>

하고 재 실행을 했더니

Could not reliably determine the server's fully qualified domain name, using <IP>

라는 에러가 발생했다.


Apache + Tomcat 을 연동해서 사용하고 있는데 사용중 문제는 없었지만 그래도 찝찝하여

httpd.conf 에 ServerName localhost 추가.

일단 위의 WARNING 은 막았는데 좀더 알아봐야 할 문제이다.

2010년 8월 5일 목요일

JConsole or VisualVm jmx connecting firewall server

Tomcat 을 실행 후 모니터링 하는 도구로서 java 에서 제공해주는 jconsole, visualvm이 있다.

둘 모두 구동하는 방식은 똑 같으며 visualvm 이 더 많은 프로파일 기능을 제공한다.

위의 둘을 사용하기 위해서는 서버를 실행 시킬시에 다음의 옵션을 추가한다.

-- Remote 로 접속해서 사용할 경우

-Dcom.sun.management.jmxremote     // jmxremote 를 사용하겠다는 옵셥
-Dcom.sun.management.jmxremote.port=8999    // jmxremote 접속시에 사용할 포트
-Dcom.sun.management.jmxremote.ssl=false    // ssl 사용여부
-Dcom.sun.management.jmxremote.authenticate=false  // 인증사용여부

위의 옵셕을 주고 서버를 실행시키면 jconsole. visualvm 에서 모니터링을 할 수 있다.

jconsole, visualvm 사용 방법은 지금 포스팅과 상관이 없으니 생량.

위와 같은 옵션만 주게 되면 한가지 문제점에 봉착하게 된다.

서버가 우리쪽에 없고 방확벽(firewall) 을 따로 관리해야 하는 곳에 있다면 문제가 발생한다.

문제점이라 하면...... 저 8999 포트로 접속이 안되는것. 그럼 8999포트를 열면되지 라고 생각 할 수 있겠지만 문제가 그리 간단하면 내가 그리 고생하지는 않았을 것이다.

찾아본 문서에 의하면 jmx 자체가 방확벽이 걸릴경우에는 저 8999로 선언한 포트를 사용하지 않고 다른 포트를 만들어 버린다는 것. 내부적으로 어떻게 돌아가는지는 나도 아직 파악하지는 못한상태..

그럼 어떻게 해야 할까.. 포트를 고정시켜서 사용해야 하는데....

Tomcat 문서를 열심히 뒤저본 결과(처음에는 Tomcat 문서를 찾지 않았다. 괜히 엄한곳만 검색해서 시간만 잡아먹었다 ㅜ) 방법은 있었다.

그 방법이라 함은 포트를 고정시키는 방법

차례대로 해보자.

1. Tomcat 의 server.xml 에 다음의 리스너를 추가하자.

-  <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"     rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" useLocalPorts="false"/>

2. $CATALINA_HOME/lib 에 catalina-jmx-remote.jar 복사

- 위의 jar파일은 톰캣에 기본적으로 들어 있는 파일이 아니다.


3. 서버 띄울시에 옵션 추가

- 사실 옵션을 추가하는 방식은 시스템 마다 다를것이며 사용자마다 다를것이다.

- 설정방법

CATALINA_OPTS
Dcom.sun.management.jmxremote
Dcom.sun.management.jmxremote.ssl=false
Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password
Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access
export CATALINA_OPTS

4. jmxremote.password, jmxremote.access 파일을 생성

- 위에서 인증파일로 두 파일을 사용하겠다고 하니 생성을 하고 세팅을 해줘야 겠다.
- jmxremote.password  --> test   test
- jmxremote.access  --> test   readonly (혹은 readwrite)

5. 톰캣 실행

6. jconsole , visualvm 에서 다음과 같이 URL로 접속한다.

service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi

username , password 입력

7. 모니터링 하세요








2010년 4월 13일 화요일

release 관리

제품에 대한 릴리즈 정책은 중요하다.
우리는 SVN으로 형상관리를 하고 있으며 trunk/branches/tags 로 관리되어 지고 있다.
trunk는 현재의 Main Stream으로 진행중인 개발코드가 관리 되어지며 tags에는 릴리즈된 버전, branches에는 현재 릴리즈된 버전의 패치 버전을 관리 하게 된다.

개발자들은 trunk 로 작업을 하게 되고 릴리즈된 버전의 버그나 오류가 발견됐을 시의 패치를 할 경우 tags에 있는 릴리즈 버전을 branches로 옮겨서 해당 버그를 패치 하기 위해 branches 를 체크아웃 받아서 작업을 수행하게 된다.

패치가 완료가 되면 패치버전을 추가 시켜서 릴리즈를 한다.
지금 까지가 현재 우리가 적용하고 있는 정책이다.

현재 개발 버전 : 1.0.0-SNAPSHOT
제품 릴리즈 버전 : 1.0.0
즉 현재 개발 버전에 SNAPSHOT을 빼고 릴리즈.
패치가 필요할 경우  : 1.0.0.0 - > tags에 릴리즈 된 것을 branches 로 옮긴다

제품 릴리즈에 적용하고 있는 기술을 maven-release-plugin을 사용하고있다.
제품에 대한 버전 변경관 배포를 자동으로 해주는 maven 플러그인이다.

 maven-release-plugin을 적용하기 위해 pom.xml에 다음을 추가해준다.

펼쳐두기..



현재 Main Stream을 tags로 옮기기.

새로운 워크스패이스를 만들어서  trunk 에 현재 릴리즈 할것을 모두 체크아웃 받자.
> svn co --username nextree  http://localhost/svn/nextree /trunk

trunk > mvn release:prepare
- > release버전, tags 라벨, 다음 개발버전(SNAPSHOT)지정.

위의 작업이 완료되면.
pom.xml에 추가되어 있는 모듈들이 trunk하위에는 다음 개발버전으로 변경되어 있고 tags하위에는 추가한 라벨 하위에 release버전으로 추가되어있다.

prepare 에서 실패를 하였을 경우
> mvn release:rollback

prepare가 성공을 하였다면
mvn release:perform
perform을 실행하면 release된 버전들은 개발 아티팩토리에 deploy 한다.

이제 개발자들은 새로운 SNAPSHOT으로 개발을 해야 하므로 버전 업된 SNAPSHOT들을 아티팩토리에 배포하여준다.





2010년 4월 2일 금요일

NSIS로 배포된 RCP 실행파일 만들기

 필요사항

2, 모두 설치를 하였으면 에디터를 실행 해보자.

파일 - > 스크립트 작성 마법사


* 프로그램 배포자 : 플라워팀
* 프로그램 웹사이트 : http://www,flowerteam.kr/console

* 인스톨 경로를 고정 하려면 체크박스 해체.
* 사용할 약관 경로 설정
** 처음에 기본적으로 나오는 폴더가 있는데 그 폴더를 선택하고 X
**트리 아이콘을 클릭하면 EditDirectory 창이 나오고 설치할 디렉토리의 경로를 잡아준다
* 프로그램 시작 메뉴 : Flowerteam/blooma

* 위의 방식대로 했다면 nsi 파일이 생성된다.
* .nsi 파일은 NSIS 에서 제공하는 스크립트로 작성되어 있다.
* 기본 설치 파일을 컴파일 하면 exe 파일이 생성된다.

* 스크립트 수정
- 삭제 부분을 모두 지우고
  RMDir /r "$INSTDIR"
  RMDir /r "$SMPROGRAMS\Flowerteam"
  DELETE $DESKTOP\blooma.lnk
로 수정.

- 완료가 되었으면 NSIS - > 스크립트 컴파일
- BloomaSetup.exe 파일이 생성된다.

실행.



svn dump and load

SVN 저장소 백업 및 복구는 매우 중요하다.

예를 들어 현재 192.168.10.xxx 서버를 사용하고 있는데 서버가 고장이 났거나 특수 사정으로 인하여 서버를 바꿔야 한다 - >  192.168.10.aaa 로 서버가 바뀌었다고 가정.

물론 개발자들이 가지고 있는 소스를 다시 aaa 서버로 이관 시키면 된다고 생각 할 수 있겠지만 그것보다는 xxx 서버의 저장소 정보를 주기적으로 백업하여 관리하다가 aaa서버로 이관 시키고 개발자들은 싱크를 맞추는 것이 좋다.

저장소 백업: svnadmin dump {저장소 경로} > {파일명}
- 리비전 정보까지 모두 백업 된다.

저장소 load : svnadmin load {저장소 경로} < {파일명}