Java/Tip & Tech2013. 11. 21. 11:45

여러 사이트를 돌아다니다 보면 운영서버를 관리하다보면 수정사항을 변경했으나 서버를 재시작하지 못해 애태우는 경우가 다반사인듯 하다. 주로 SI를 하는 나로서는 그리 중대한 문제가 아닌듯 느껴지나 SM 하는 분들의 입장에서 생각해보면 꽤나 스트레스 받는 문제가 아닌듯 싶다. 이 이슈로 인해 개발 초기단계 이런 말까지 나온다..


"유지보수의 용이함을 위해 모두 JSP로 해주세요..."


유지보수의 용이함을 위해 아키텍쳐를 잘 잡아주세요가 아...니...다.... ㅡㅡ+

저렇게 말씀하시는 분의 개념을 운운하기 이전에 운영서버 재시작이 유지보수 하는 분들에게 얼마나 큰 부담인지 먼저 생각해보게 된다. 서비스의 영속성은 아주 중요한 부분이니까~~~ (그 느낌 아니깐~~~)

하여...

시간될때 JMX(Java Management Extensions)에 대해 공부를 좀 해보기로 했다..


아래는 JMX를 이용한 JVM 모니터링 관련 글들이다.


[JMX를 이용한 daemon 모니터링]

http://blog.kangwoo.kr/76


[Instrumenting applications with JMX]

- http://www.ibm.com/developerworks/java/library/j-jtp09196/


[Java Management Extensions (JMX) - Best Practices]

- http://www.oracle.com/technetwork/java/javase/tech/best-practices-jsp-136021.html


계속...





Posted by 꼰스
Java/WebDAV2013. 3. 11. 09:45

WebDAV 서버 구현체를 만들려면 테스트 할 클라이언트가 필요하겠죠?

구글링으로 찾아본 쓸만한 freeware 를 소개합니다.


[Cyberduck]  - http://cyberduck.ch

거의 대부분의 것을 지원하네요.. 소감은 한번 써본뒤에 적기로 하겠습니다.

일단 사이트에 접속해서 아래 그림의 빨간색 부분을 클릭하여 Cyberduck-Installer-4.2.1.exe 파일을 다운로드 받아 설치하시면 됩니다.





[DAV Explorer]http://www.davexplorer.org

이 녀석은 Java라서 내맘대로 쪼물딱할 수 있다는 장점이 있으나 고질적인 한글문제를 가지고 있습니다. 한글 폴더 생성시 Request를 살펴보니 도저히 Decoding 될 수 없는 URL을 만들어서 날리네요.

한글문제를 해결하려면 소스를 좀 뜯어고쳐야겠습니다. (나온지가 오래되서 그런가봅니다)


이상으로 WebDAV Client 소개를 마치렵니다.


'Java > WebDAV' 카테고리의 다른 글

WebDAV 구현을 위한 환경 설정  (0) 2013.02.15
Posted by 꼰스
Java/WebDAV2013. 2. 15. 14:21

WebDAV를 맨바닥에서 구현하기는 꽤나 힘든 작업일 듯 하여 Tomcat 에 탑재된 WebdavServlet 을 프로토파입으로 하여 분석을 병행하면서 개발해보기로 하자.

먼저 테스트를 위해 Tomcat6 의 WebdavServlet 을 활성화 시키고 DavClient로 테스트를 진행할 예정이다.

Tomcat 의 WebdavServlet 활성화는 http://blog.naver.com/shin7688/120132130811 를 참조하시면 된다.


1. 다운로드


1) Tomcat6 및 Tomcat6 Source 다운로드

http://tomcat.apache.org/download-60.cgi 에서 아래의 파일을 다운받는다.

Tomcat6 Binary Distribution : apache-tomcat-6.0.36.zip

Tomcat6 Source Distribution : apache-tomcat-6.0.36-src.zip


2) DAV Explorer 다운로드

http://www.davexplorer.org/download.html 에서 DAVExplorer-latest.zip 파일 다운로드



2. Tomcat 설정


1) apache-tomcat-6.0.36.zip 압축을 풀고 c:/server/apache-tomcat-6.0.36 에 위치시킨다

2) {TOMCAT_HOME}/webapps/MyWebdav 폴더를 생성한다

3) web.xml 에 아래의 내용을 추가한다

-----------------------------------------------------------------------

<!-- Webdav Servet -->

<servlet>

  <servlet-name>webdav</servlet-name>

  <servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>

  <init-param>

    <param-name>debug</param-name>

    <param-value>0</param-value>

  </init-param>

  <init-param>

    <param-name>listings</param-name>

    <param-value>true</param-value>

  </init-param> 

  <init-param>

    <param-name>readonly</param-name>

    <param-value>false</param-value>

  </init-param>

</servlet> 

<!-- Webdav Servet Mapping-->

<servlet-mapping>

  <servlet-name>webdav</servlet-name>

  <url-pattern>/*</url-pattern>

</servlet-mapping>


-----------------------------------------------------------------------


4) conf/tomcat-users.xml 에 Webdav 사용자 추가
-----------------------------------------------------------------------
<role rolename="webdav"/>
<user username="wduser" password="wduser" roles="webdav"/>
-----------------------------------------------------------------------


3. Eclipse MyWebdav 프로젝트 생성


1) Eclipse에 프로젝트 생성

2) 프로젝트 ClassPath 설정

C:\server\apache-tomcat-6.0.36\lib/catalina.jar

- C:\server\apache-tomcat-6.0.36\lib/tomcat-coyote.jar

3) test.MyWebdavServlet 를 프로젝트에 생성

apache-tomcat-6.0.36-src/java/org/apache/catalina/servlets/WebdavServlet.java 를 test.MyWebdavServlet 으로 저장

4) {TOMCAT_HOME}/webapps/MyWebdav/WEB-INF/classes  하위로 test.MyWebdavServlet.class 적절히 배포



4. DAV Explorer 를 통한 테스트


1) 다운받은 DAVExplorer-latest.zip 을 풀고 DAVExplorer-0.91 폴더를 C:/dev/DAVExplorer-0.91 에 복사

2) C:/dev/DAVExplorer-0.91 내에 DAVExplorer.bat 을 수행



주소창에 localhost:8080/MyWebdav/servlet/MyWebdavServlet 입력


3) 인증창에 사용자와 비밀번호 입력



conf/tomcat-users.xml 에 등록한 wduser/wduser 입력


4) DAV Explorer 에 파일을 등록, 수정, 삭제해가며 서버 로그를 확인



5. Windows7 탐색기를 통한 접속 테스트


컴퓨터 → 네트워크 위치 추가(L) 를 수행해서 네트워크 위치 추가 마법사 수행하여 URL 을 입력한다



http://localhost:8080/MyWebdav/servlet/MyWebdavServlet 를 입력한다.

※ 단, Windows7 64bit 는 오류가 있어서 되지 않는다.



6. WebDAV Spec


스팩을 참조해서 열심히 개발하면 되겠다. Good luck !

HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)



어떠한 스팩의 구현체를 만들던 쉬운일은 아닐게다. 열심히 만들어보자.

Good Luck !



'Java > WebDAV' 카테고리의 다른 글

WebDAV Client 소개  (0) 2013.03.11
Posted by 꼰스
Java/Struts22012. 3. 30. 18:19


Struts2 쓴지가 한참 되어 다 까묵어서 다시금 문서를 찾아본다.


[Struts2 튜토리얼] - 영문

일단은 공식 튜토리얼이 언제나 짱이졍~~~^^

http://struts.apache.org/2.x/docs/tutorials.html


[Struts2 개요] - 한글

한장의 문서로 개념을 파악할 수 있어서 좋다.. 좀 길긴 하지만 정독할만하다.

http://blog.naver.com/PostView.nhn?blogId=finekiller&logNo=70134585198


[Struts2 강좌] - 한글

샘플 위주로 되어 있어 읽기 편한 문서들이다.

http://dawnisthm.tistory.com/category/JAVA/Framework?page=2


참... 읽을건 많고.. 시간은 없고...



'Java > Struts2' 카테고리의 다른 글

Struts2 OGNL 개요  (0) 2012.01.02
Struts2 링크목록  (0) 2012.01.02
Posted by 꼰스
Java/Tip & Tech2012. 1. 25. 15:33

UTF-8 로 작성된 Java 소스를 import 하면 당연히 깨집니다.. 저는 Java 소스를 MS9494 인코딩으로 쓰니깐요..
해서 한칼에 모든 소스를 변경하고 싶은데 마땅한 툴이 없네요..
이럴때 개똥도 약에쓰려면 없다는 말이 생각납니다.
땡칠이 작업으로 변경을 하려 하다가 훗날을 생각하며 후딱 짜서 돌려봅니다.. 잘 되네요..

SrcEncodingConverter.jar

 SrcEncodingConverter.java

 
사용법은 아래와 같습니다.

1. SrcEncodingConverter.jar 를 다운로드하여 임의의 폴더에 저장

Ex) C:\temp 에  SrcEncodingConverter.jar을 다운로드

2. 변경되어진 소스가 저장될 폴더 생성

Ex) C:\temp\src 를 생성

3. 명령프롬프트에서 jar 파일이 있는 폴더로 이동

Ex) CD C:\temp

4. 명령구문 실행

Ex) C:\workspace\MyPrj\src 내 *.java 파일의 인코딩 변경후 C:\temp\src 에 넣을때 예제

java -classpath SrcEncodingConverter.jar kr.innofactory.util.SrcEncodingConverter C:\orkspace\MyPrj\src c:\temp\src .*\.java UTF-8 MS949

arguments 는 아래와 같습니다.

- args[0] : 소스 input 폴더
- args[1] : 변경소스 output 폴더
- args[2] : 파일패턴 정규식
- args[3] : 현재 Encoding (null 이면 시스템 charset)
- args[4] : 바꿀 Encoding (null 이면 시스템 charset)

도움 되셨길...

SrcEncodingConverter.jar

Posted by 꼰스
Java/Tip & Tech2012. 1. 6. 23:49
[ 2010년 01월 27일 에 작성한 글입니다 ]

Java 응용프로그램을 만들면 모하나.. Windows 가 시작되면서 자동으로 이 프로그램을 구동시키려면 Windows 서비스에 등록해야만 하는데..

예전 회사에서 KT회선을 쓰고 있을때 퇴근하고 난뒤 2~3시간만 지나면 회사서버에 접속이 되지 않았었지.. 그래서 난 java 로 1시간에 한번씩 특정사이트를 호출하게 만드는 어플리케이션을 만들고 이것을 회사 서버에 윈도우 서비스에 등록해서 우리 회사서버를 외부에서 언제나 접속하게 했던 기억이나.. 이렇게 만들어놓음으로써 회사에는 언제나 사람이 브라우저를 사용하는 것처럼 될테고.. KT는 서버로의 접근을 차단할 근거가 없어지게 되니깐~~ ^^

[방법 1] Java Service Wrapper 를 이용하는 방법

http://wrapper.tanukisoftware.org 를 잘 참조하면 되겠어..
Profession 은 상용이지만 Community 버전은 프리하게 사용가능한가바. 문서도 좀 읽어야 가능하겠는걸?

[방법 2] JavaService 를 사용하는 방법

이건 좀 자세히 설명할꺼야.. 오늘 내가 직접 해볼꺼거등 ^^

[STEP 1] 프로그램 다운로드

http://javaservice.objectweb.org (http://forge.ow2.org/projects/javaservice/)
2010년 01월 27일 현재 "JavaService-2.0.10.zip" 이 나와있네...
압축파일을 풀면 많은 JavaService.exe 라는 파일이 있어.. 그게 젤 중요하니 한번 살펴보자...
(다른 bat 파일들은 이름만 살펴봐도 그 용도를 알 수 있을꺼야..)
JavaService.exe 을 C:\temp 에 한번 복사해놓고 테스트해보자구..



[STEP2] JavaService 의 install 옵션 둘러보기


자.. 도스커멘드에서 JavaService 어떻게 사용하나 알아보려고 "-help" 옵션으로 실행시킨 결과야..
-----------------------------------------------------------------------------------------------------
JavaService (Windows NT Service Daemon) commands:-
        -version
        -licence
        -install service_name jvm service_options...
        -queryconfig service_name
        -status service_name
        -uninstall service_name
        -help
        -help topic
-----------------------------------------------------------------------------------------------------

빨간 install 옵션이 제일 중요하니 어떻게 쓰는지 살펴보기 위해 다시한번 "-help install" 을 해보자고..
-----------------------------------------------------------------------------------------------------


To configure and install a background service:
JavaService -install service_name jvm_library [jvm_options]
        -start start_class [-method start_method] [-params (start_parameters)]
        [-stop start_class [-method stop_method] [-params (stop_parameters)]]
        [-out out_log_file] [-err err_log_file]
        [-current current_dir]
        [-path extra_path]
        [-depends other_service]
        [-auto | -manual]
        [-shutdown seconds]
        [-user user_name -password password]
        [-append | -overwrite]
        [-startup seconds]
        [-description service_desc]
Where:
  service_name: The name of the service. ← 서비스명
  jvm_library:  The location of the JVM DLL used to run the service.  ← jvm.dll 위치
  jvm_option:   An option to use when starting the JVM, such as: "-Djava.class.path=c:\classes" or "-Xmx128m".
  start_class:  The class to load when starting the service.  ← 클래스명
  start_method: The method to call in the start_class. default: main
  start_parameters:Parameter(s) to pass in to the start_method.
  stop_class:   The class to load when stopping the service.
  stop_method:  The method to call in the stop_class. default: main
  stop_parameters:      Parameter(s) to pass in to the stop_method.
  out_log_file: A file to redirect System.out into. (gets overwritten)
  err_log_file: A file to redirect System.err into. (gets overwritten)
  current_dir:  The current working directory for the service. Relative paths will be relative to this directory.
  extra_path:   Path additions, for native DLLs etc. (no spaces)
  other_service:        Single service name dependency, must start first.
  auto / manual:        Startup automatic (default) or manual mode.
  seconds:      Java method processing time (startup:sleep, shutdown:timeout).
  user_name:    User specified to execute the service (user@domain).
  password:     Password applicable if user specified to run the service.
  append / overwrite:   Log file output mode, append (default) or overwrite.
  service_desc: Text describing installed service (quoted string, max 1024).
-----------------------------------------------------------------------------------------------------
저 위에서 service_name, jvm_library, start_class 옵션 정도만 사용해서 한번 install 해볼 예정이야..
jvm_option 은 필요할때 사용하고, start_method 는 대부분 main() 일테니 생략하자구..

[STEP3] 테스트 java 클래스 만들기

지금 테스트 하려고 하는데.. 아.. 간단한 클래스 없을까 하다가..
간단하게 10초에 한번씩 standard out으로 "hello word"를 찍는 클래스를 만들어보려구 해..
Timer 나 TimerTask 에 대한 것은 API를 참조해바바.. (자꾸 말로 물어서 해결하려하지 말구...)
-----------------------------------------------------------------------------------------------------
package test;

import java.util.Timer;
import java.util.TimerTask;

public class HelloWorldPrinter extends TimerTask {
    private static int count = 0;
    public void run() {
        count ++;
        System.out.println(count + " : Hello World !");
    }

    public static void main(String[] args) {
        HelloWorldPrinter printer = new HelloWorldPrinter();
        Timer timer = new Timer();
        timer.schedule(printer, 0, 10 * 1000);
    }
}
-----------------------------------------------------------------------------------------------------


이 클래스를 빌드해서 C:\temp\classes\test\HelloWorldPrinter.class 에 놓어보자구효~

[STEP4] Windows Service에 클래스 등록하기

아래와 같은 정보로 서비스를 등록해볼 참이야..
service_name : HelloWorldPrintingService
jvm_library : %JAVA_HOME%\jre\bin\server\jvm.dll
jvm_option : Djava.class.path=.\classes
start_class : test.HelloWorldPrinter
out_log_file : C:\temp\javaservice_test.log (테스트 결과확인을 위해 등록)
도스커멘드에서 아래의 커멘드를 실행시켜서 서비스로 등록을 해보자구..
-----------------------------------------------------------------------------------------------------
JavaService -install "HelloWorldPrinting Service" %JAVA_HOME%\jre\bin\server\jvm.dll -Djava.class.path=c:\temp\classes -start test.HelloWorldPrinter -out C:\temp\javaservice_test.log
-----------------------------------------------------------------------------------------------------


자.. 멋지게 등록되었고 SC를 이용해 서비스 등록상태까지 확인해봤어..

[STEP5] 서비스 실행하기

-----------------------------------------------------------------------------------------------------
net start "HelloWorldPrinting Service"
-----------------------------------------------------------------------------------------------------
이렇게 실행하고 서비스 등록시에 지정했던 로그파일을 보자구.. C:\temp\javaservice_test.log 에는 아래와 같이 찍혀있을꺼야..
1 : Hello World !
2 : Hello World !
3 : Hello World !
4 : Hello World !
5 : Hello World !
6 : Hello World !
7 : Hello World !
8 : Hello World !
9 : Hello World !
10 : Hello World !
성공이닷 !!

[STEP6] 서비스 종료하기
-----------------------------------------------------------------------------------------------------
net stop "HelloWorldPrinting Service"
-----------------------------------------------------------------------------------------------------

[STEP7] 서비스 삭제하기

-----------------------------------------------------------------------------------------------------
JavaService -uninstall "HelloWorldPrinting Service"
-----------------------------------------------------------------------------------------------------

파일 첨부해놨으니 쉽게 테스트 할수 있을꺼야.. 수고했샤~~
Posted by 꼰스
Java/Tip & Tech2012. 1. 6. 23:32
[ 2010년 05월 14일에 작성된 글입니다 ]

업계표준이 참으로 무섭기는 한가봅니다. 그토록 M$ 를 싫어하지만 내가 쓰는 OS도, 내가 쓰는 Office 도 모두 M$ 이니깐요.. (Open Office 바꿔타기를 해봐야하눈뎅.. ㅡㅡ;)
이같은 심정은 IT 시스템 개발을 발주하는 고객사 또한 마찬가지가 아닐까 합니다. 때문에 싫던 좋던 프로젝트 수행중에 Java 플랫폼에서 M$ Office 포멧을 다뤄야 하는 경우가 다반사입니다. M$ 오피스군의 파일포멧을 다룰 수 있는 Java 기반의 라이브러리는 뭐니뭐니해도 Apache POI 가 아닐까 합니다.

너무 많이 알려진 라이브러리이므로 장황하게 설명할 필요하는 없을듯하고 2009년12월에 발표된 POI-3.6 최신버전으로 여러가지 Excel 을 다루는 샘플을 만들어봤습니다. Deprecated 된 메쏘드들은 모두 새로운 사용법으로 교체되었으니 참고하세요.

예제를 실행시키기 위한 환경 및 참조된 문서는 아래와 같습니다.

[JRE]
jdk-1.6.x 이상 필요
※ jdk-1.5.x 환경은 예정실행시 "NoClassDefFoundError: javax/xml/stream/XMLStreamException" 가 발생됨

[POI 다운로드]
http://poi.apache.org/download.html

[의존성]
xmlbeans - http://xmlbeans.apache.org/sourceAndBinaries/index.html
dom4j : http://sourceforge.net/projects/dom4j/files/

[문서링크]
POI의 Excel 관련 문서홈 - http://poi.apache.org/spreadsheet/index.html
바쁜개발자를 위한 HSSF와 XSSF 가이드 - http://poi.apache.org/spreadsheet/quick-guide.html ★★★★
HOW-TO 문서 - http://poi.apache.org/spreadsheet/how-to.html

예제파일은 여기 있습니다.


동일한 Class명이 여러 패키지에 존재하니 예제 상단의 import 구문을 세심히 체크해야 할 것이다.
Posted by 꼰스
Java/Tip & Tech2012. 1. 6. 23:22

RIA 개발시 Ajax 를 많이 사용하다보니 서버 응답 포멧이 XML 이나 JSON 이 대부분일 것입니다.

Java에서 String 연산으로 JSON 을 생성할 경우 예상치 못한 특수문자 오류를 만나게 되며 디버깅 또한 쉽지 않습니다. 따라서 기존에 잘 만들어진 JSON 변환 라이브러리를 사용하는 것이 현명한 선택일 것입니다.

현재 배포되고 있는 JSON 스팩 구현체들은 상당히 다양합니다. 이 여러가지 가운데 무엇을 써야할지 선택하는 것조차 쉽지 않습니다. 여러 방면으로 검토한 후 가장 쓸만한 라이브러리를 링크를 걸어봅니다.


날이 갈수록 봐야할 자료가 너무 많아 탈이날 지경이네요. ^^

첨부된 파일은
1) json.jar - 라이브러리 파일 

2) json_doc.zip - java doc
3) json_src.zip - 라이브러리 소스파일

json.jar

json_doc.zip

json_src.zip


JSON 에 대해 보다 상세한 내용은 http://www.json.org 을 참조하시기 바랍니다.


Posted by 꼰스
Java/Lucene2012. 1. 6. 01:30
[ 2009년 2월 19일에 작성한 글입니다 ]

아파치에서 오픈소스로 진행되는 Java 기반 FullText 검색엔진 Lucene 에 대한 정보들 입니다.
Google 에서 'apache lucene 한글 형태소' 로 검색을 해서 얻은 결과를 정리한 것입니다.

[아마추어가 만드는 검색엔진 DABOT(다봇) for 루씬(Lucene)]
http://dabot.tistory.com

[용식님 블로그의 Lucene 카테고리]
http://devyongsik.tistory.com/category/OpenSource/lucene

[루씬 링크모음]
http://lucene.egloos.com/1368209

[루씬 한글분석기 오픈소스 프로젝트]
http://cafe.naver.com/korlucene.cafe

[???]
http://www.wiseant.net/tc/wiseant/category/프로그래밍/Lucene(루씬)

[???]
http://theeye.pe.kr/entry/Java-Lucene-루씬을-이용한-JSP용-클래스?category=11

[???]
http://irgroup.org/zbxe/lucene

[루씬용 한글형태소 분석기 solr에 적용 사례]
http://esconsult.egloos.com/961906

[???]
http://blog.naver.com/songws72/50041586496

언제나 무료이면서 정확한 한글 자연어 검색엔진이 나올까요? (너무 도둑심보인가? ㅋ)

'Java > Lucene' 카테고리의 다른 글

XML, PDF, HTML, MS Word 텍스트 추출 라이브러리  (0) 2012.01.06
Posted by 꼰스
Java/Lucene2012. 1. 6. 01:23
[ 2009년 2월 19일에 작성한 글입니다 ]

여러 포멧의 문서를 인덱싱 하려면 텍스트 추출기가 필요합니다.
문서관리 시스템을 만들때 필수적인 라이브러리로 문서 등록시 텍스트를 추출하여 검색 인덱스를 생성하고 파일을 저장함으로써 파일 내용 검색을 가능케 합니다.

[XML]
- Dom, Sax, JDom,
- Piccolo (http://piccolo.sourceforge.net)
- Apache Disester (http://jakarta.apache.org/commons/digester/)

[PDF]
- PDFBox (http://www.pdfbox.org)
- Xpdf (http://www.foolabs.com/xpdf)
- JPedal (http://www.jpedal.org)
- Etymon PJ( http://www.etymon.com)

[Html]
Jtidy (http://jtidy.sourceforge.net )
NekoHTML (http://people.apache.org/~andyc/neko/doc/index.html)
HTMLParser( http://htmlparser.sourceforge.net)

[MS Word]
POI (http://jakarta.apache.org/poi)
Text Extractors(http://textmining.org)
Antiword (http://www.winfield.demon.nl)
OpenOffice SDK (http://www.openoffice.org)

실제로 돌려보면 그래픽 위주의 파워포인트 같은 문서는 깔끔한 텍스트 추출이 불가능하네요...

'Java > Lucene' 카테고리의 다른 글

Apache Lecene 관련 링크  (0) 2012.01.06
Posted by 꼰스