이클립스에서 톰캣 실행시 서버 오류 개발

이클립스에서 톰캣 실행 시 갑자기 class를 찾지 못하는 오류가 발생하면서,
서버가 정상적으로 실행되지 않는 문제가 한번씩 생기는데...

2012. 4. 3 오전 11:18:51 org.apache.catalina.core.StandardContext listenerStart
심각: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4701)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5260)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

이 경우 maven dependency를 등록해주면 된다.

프로젝트 >> properties >> Deployment Assembly를 선택한 후,
"Add" >> Java Build Path Entries >> Maven Dependencies 선택한 후, "Apply"를 해준다.

톰캣 재시작하면 서버가 정상적으로 실행된다.

메이븐 메뉴에서 "Update Project Configuration"를 실행하는 경우,
해당 정보가 삭제되므로 다시 등록해주면 된다.



이클립스 실행 속도 향상 개발

eclipse.ini 파일을 아래와 같이 수정한다.

-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xverify:none
-Xms512m
-Xmx512m
-XX:+UseParallelGC
-XX:+AggressiveOpts
-XX:-UseConcMarkSweepGC

나의 경우 jdk 버전을 1.5에서 1.6으로 바꿨을 때 체감 효과가 가장 큰 것으로 보인다.


xargs is awesome 유닉스

find를 사용하여 찾은 결과를 cp, mv하는 건 -exec를 사용하면 되지만,
텍스트 파일에 들어있는 파일의 리스트를 읽어서 cp, mv하려면 xargs를 사용한다.

ㅇ 파일에 있는 리스트를 읽어서 특정 디렉토리 복사
#cat file_list.txt | xargs cp -t ./target
#xargs -a file_list.txt cp -t ./target

ㅇ 파일 이동(mv)도 위와 동일
#cat file_list.txt | xargs mv -t ./target
#xargs -a file_list.txt mv -t ./target



Notepad++에서 SQL 포맷 맞추기 개발

내가 SQL문을 볼 때 원하는 건 이게 아니라,
select FIELD1, FIELD2, FIELD3 from TABLE1;

이런 포맷이다.
select
    FIELD1,
    FIELD2,
    FIELD3
from TABLE1;

Notepad++에서 쓸 수 있는 방법이 없나 해서 뒤져보니...

1. 정규식을 활용하는 방법
http://peoplesoft.wikidot.com/formatting-sql-in-notepad

2. 플러그인을 이용하는 방법(공식 플러그인 아님)
PoorMansTSqlFormatter
공식 플러그인은 아니나, 나름 괜찮은 듯...
===> 1.0.2를 쓸때는 비공식이었는데, 어느 틈엔가 공식 플러그인으로...^^




프로세서 종류를 확인하는 방법 개발

다음은 property 파일 정보 중 일부이다.

amd64_UTF-8.jdbc.url = jdbc:Altibase://xxx.xxx.xxx.xxx:20300/lgu?encoding=UTF-8
x86_MS949.jdbc.url = jdbc:log4jdbc:Altibase://xxx.xxx.xxx.xxx:20300/lgu?encoding=UTF-8&setbigstringtryclob=true

대략 위와 같이 되어 있는데,
프로세서 종류는, 빨간색 폰트로 표기된 부분이다.

내 노트북은 Intel I5 64bit이다.
따라서, 프로세서 종류를 확인하면, "x86"이 나와야 하는데,
어찌된 일인지 "amd64"로 설정된 정보를 따라서 DB 연결이 이루어지고 있었다.
흠....코딩이 잘못된 것 같지는 않은데, 뭐가 문제일까 했었는데....

결론부터 얘기하면,
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"에 있는 레지스트리 하위 키에서,
PROCESSOR_ARCHITECTURE 레지스트리 항목의 값은 컴퓨터가 사용하는 프로세서 종류에 관계없이 AMD64로 설정된다고 한다.

아래 URL에 관련 정보와 프로세서 종류를 확인하는 로직이 있으니 참고하시라.

http://support.microsoft.com/kb/888731
http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx
http://kletgdgo.blog.me/90098022754


netstat 사용 유닉스


zip 유닉스

zip으로 압축하려면 "-r" 옵션을 주면 된다.

#zip -r test01.zip test
  adding: test/ (stored 0%)
  adding: test/03_list.sh (deflated 47%)
  adding: test/04_rollback.sh (deflated 21%)
  adding: test/01_backup.sh (deflated 56%)
  adding: test/02_apply.sh (deflated 55%)
  adding: test/target/ (stored 0%)
  adding: test/target/statuses_web.xml (deflated 81%)
  adding: test/target/meeting_web.xml (deflated 80%)
  adding: test/target/note_web.xml (deflated 80%)

압축해제는 unzip을 사용한다.

#unzip test01.zip


파일 포맷 확인 유닉스

윈도우에서 만든 쉘 스크립트 파일이 리눅스에서 실행되지 않는 경우 다음과 같이 확인한다.

#vi test01.sh

각 라인 마지막에 "^M"의 값이 있는지 확인한다.
있다면 vi 편집기 명령행 상태에서
:1,%s/^M//g       <--- ^M는 Ctrl+V+M를 누르면 입력된다.

입력하면 파일 내에 있는 모든 "^M"를 제거할 수 있다.
이렇게 했는데도 쉘 스크립트를 실행했을 때,
경로를 찾지 못한다거나 하는 경우는 파일 포맷의 문제이다.

# file test01.sh
test01.sh: ASCII text, with CRLF line terminators

위와 같이 나오는 경우 파일 포맷을 변환시켜 준다.
#cat test01.sh | col -b > ntest01.sh

# file ntest01.sh
test01.sh: ASCII text

이렇게 하면 쉘 스크립트가 정상적으로 실행된다.
위 경우 이외에 쉘 스크립트에 특별히 문제는 없는데, 
스크립트가 실행 오류를 발생시키는 경우 "col"로 파일 포맷을 변환해주면 정상 실행된다.

 

리눅스에 ttf 폰트 설치 유닉스

리눅스에 ttf 폰트를 설치하는 경우 다음과 같이 한다.

1. 나눔글꼴을 다운로드 받는다.(ttf가 들어있는 zip 파일)

2. 압축 푼다.

3. 폰트를 설치한다.
#cd /usr/share/fonts
#sudo mkdir ttf
#sudo cp ~/다운로드/-.ttf .
#sudo mkfontscale
#sudo mkfontdir
#sudo fc-cache -fv

4. 글꼴 선택
메뉴>시스템>기본설정>모양새>글꼴 탭 선택해서 변경한다.

yum 사용 옵션 유닉스

openoffice 설치하려고 보니,
groupinstall에는 지원하는 항목이 없고,
소프트웨어 추가/삭제에서 일일이 체크하려니 귀찮아서 yum list로 확인해 보니...

# yum list openoffice*

다 설치해도 되는데, 필요없는 language pack이 너무 많네.
설치 리스트에서 빼는 방법이 없을까 해서 man page를 뒤져보니
"-x" 옵션이 있다!

# yum list openoffice* -x openoffice.org-langpack*

이렇게 해주니 language pack만 빼고 리스트가 출력된다.

# sudo yum install openoffice* -x openoffice.org-langpack*

이렇게 실행하여 openoffice 관련 파일만 설치하고
필요한 language pack은 따로 선택하여 설치할 수 있다.


1 2 3 4 5 6 7