'분류 전체보기'에 해당되는 글 1012건
- 2010.03.16 2010 프로야구 일정
- 2010.03.11 Nomar Garciaparra 은퇴
- 2010.03.09 Trac On Windows 설치
- 2010.03.09 Rain alert
- 2010.03.05 로깅 레벨 이해하기
- 2010.03.04 윈도우 프로세스 - 커맨드 프로세스 구분하기
- 2010.03.04 택시에서 무선인터넷 사용하기
- 2010.03.02 노트북 배터리 수명 & KTX에서 노트북 충전하기
- 2010.03.01 [Grails] 포트 변경
- 2010.02.28 퍼즐 소녀 지원양
- 2010.02.28 KTX 좌석 배치도
- 2010.02.23 Ticket에 소스변경사항 링크걸기
- 2010.02.21 중복된 티켓 처리하기
- 2010.02.20 Change only this instance, all events in the series, all following.
- 2010.02.20 구글 캘린더
- 2010.02.20 [미완] 공통 JSP 파일 및 JSTL 설정하기
- 2010.02.20 shift
- 2010.02.20 pause
- 2010.02.20 톰캣 인스턴스 여러개 띄우기
- 2010.02.17 문서화를 통한 협업(?) 사례
- 2010.02.11 원산생태
- 2010.02.09 cafe24 기능이 좋아졌다.
- 2010.02.04 jar 홍수
- 2010.02.04 CSS 모음
- 2010.02.03 네이트온 프록시 레지스트리
- 2010.02.02 잘못 전달된 예제소스
- 2010.01.31 파워콤 모뎀 상태
- 2010.01.31 마트 서점에서 책읽기
- 2010.01.31 유닉스에 톰캣 컴파일해서 설치하기
- 2010.01.28 동영상 캡쳐 방법
- 2010 프로야구 일정
- 野生野死
- 2010. 3. 16. 13:17
- Nomar Garciaparra 은퇴
- 野生野死
- 2010. 3. 11. 13:10
- Trac On Windows 설치
- 日常茶飯事
- 2010. 3. 9. 17:19
- http://sourceforge.net/projects/traconwindows/
TOW-0.2.2-Standard-ko.ZIP (Trac 0.10.4)
- 설치는 C:/에 압축을 풀기만 하면 된다.
- 프로젝트, 사용자 생성
create-trac-repo.bat //이거 변경했음->////
//프로젝트 생성
> add-project PROJECT
//사용자 관리
//admin 제거 : %TOW%/SvnRepo/Projects/trac.htpasswd 에서 제거한다.
//anonymous의 권한을 없앤다. //원본 배포파일하고 비교===git에 올려두는게 좋은지..
> remove-perm PROJECT anonymous *
> add-user USER PASSWORD //비밀번호 변경도 가능
> list-perm PROJECT
admin TRAC_ADMIN
admin XML_RPC
anonymous BROWSER_VIEW
anonymous CHANGESET_VIEW
...
//해당 프로젝트에서 사용자에 대한 권한을 준다. 참고
> add-perm PROJECT USER PERMISSION //대소문자 구분 주의
- Rain alert
- 雜동사니
- 2010. 3. 9. 07:30
- Location
Seoul과 Seoul City의 차이는?
- Likelihood of Rail
12시간 이내에 비올 확률
- Alert Time
알림 시각
- 오늘(2010-03-09) 아침에 비올 확률이 70%로 나왔음.
맞을까? ㅎㅎ 비왔다.
- 출처 : .현대인의 필수품 기상예보 알리미 :: 아이폰 어플 Rain Alert.
- 로깅 레벨 이해하기
- 日常茶飯事
- 2010. 3. 5. 21:33
- log4j를 사용하였지만 대부분의 로깅 프레임워크에 통용된다.
- 설정된 레벨이하가 로깅된다.
- 설정된 레벨이하가 로깅된다.
ALL
0 [main] TRACE test.SimpleLogTest - trace
0 [main] DEBUG test.SimpleLogTest - debug
0 [main] INFO test.SimpleLogTest - info
0 [main] WARN test.SimpleLogTest - warn
0 [main] ERROR test.SimpleLogTest - error
0 [main] FATAL test.SimpleLogTest - fatal
TRACE
0 [main] TRACE test.SimpleLogTest - trace
0 [main] DEBUG test.SimpleLogTest - debug
0 [main] INFO test.SimpleLogTest - info
0 [main] WARN test.SimpleLogTest - warn
0 [main] ERROR test.SimpleLogTest - error
0 [main] FATAL test.SimpleLogTest - fatal
DEBUG
16 [main] DEBUG test.SimpleLogTest - debug
16 [main] INFO test.SimpleLogTest - info
16 [main] WARN test.SimpleLogTest - warn
16 [main] ERROR test.SimpleLogTest - error
16 [main] FATAL test.SimpleLogTest - fatal
INFO
16 [main] INFO test.SimpleLogTest - info
16 [main] WARN test.SimpleLogTest - warn
16 [main] ERROR test.SimpleLogTest - error
16 [main] FATAL test.SimpleLogTest - fatal
WARN
16 [main] WARN test.SimpleLogTest - warn
172 [main] ERROR test.SimpleLogTest - error
172 [main] FATAL test.SimpleLogTest - fatal
ERROR
172 [main] ERROR test.SimpleLogTest - error
172 [main] FATAL test.SimpleLogTest - fatal
FATAL
172 [main] FATAL test.SimpleLogTest - fatal
OFF
0 [main] TRACE test.SimpleLogTest - trace
0 [main] DEBUG test.SimpleLogTest - debug
0 [main] INFO test.SimpleLogTest - info
0 [main] WARN test.SimpleLogTest - warn
0 [main] ERROR test.SimpleLogTest - error
0 [main] FATAL test.SimpleLogTest - fatal
TRACE
0 [main] TRACE test.SimpleLogTest - trace
0 [main] DEBUG test.SimpleLogTest - debug
0 [main] INFO test.SimpleLogTest - info
0 [main] WARN test.SimpleLogTest - warn
0 [main] ERROR test.SimpleLogTest - error
0 [main] FATAL test.SimpleLogTest - fatal
DEBUG
16 [main] DEBUG test.SimpleLogTest - debug
16 [main] INFO test.SimpleLogTest - info
16 [main] WARN test.SimpleLogTest - warn
16 [main] ERROR test.SimpleLogTest - error
16 [main] FATAL test.SimpleLogTest - fatal
INFO
16 [main] INFO test.SimpleLogTest - info
16 [main] WARN test.SimpleLogTest - warn
16 [main] ERROR test.SimpleLogTest - error
16 [main] FATAL test.SimpleLogTest - fatal
WARN
16 [main] WARN test.SimpleLogTest - warn
172 [main] ERROR test.SimpleLogTest - error
172 [main] FATAL test.SimpleLogTest - fatal
ERROR
172 [main] ERROR test.SimpleLogTest - error
172 [main] FATAL test.SimpleLogTest - fatal
FATAL
172 [main] FATAL test.SimpleLogTest - fatal
OFF
- 윈도우 프로세스 - 커맨드 프로세스 구분하기
- 日常茶飯事
- 2010. 3. 4. 13:27
커맨드 창에서 실행시킨 프로그램을 작업관리자에서 확인해보면 구분이 되지 않는다.
모두 cmd 로만 보여서 구분이 되지 않는다.
실행배치파일에 title 구문을 사용해서 구분을 하도록 하면 될거 같다.
tasklist 에서 창제목을 보여주지 않기 때문에 findstr 을 사용하지 않고 필터옵션을 사용한다.
(필터옵션은 정확해야 하므로 1tasklist -v | findstr server 명령을 사용하는 것이 편하다)
프로세스에서는 cmd 로 보이지만 응용 프로그램 탭에서는 title 로 수정한 창제목이 보인다.
- 참고
http://devotionnoath.tistory.com/496
모두 cmd 로만 보여서 구분이 되지 않는다.
실행배치파일에 title 구문을 사용해서 구분을 하도록 하면 될거 같다.
tasklist 에서 창제목을 보여주지 않기 때문에 findstr 을 사용하지 않고 필터옵션을 사용한다.
(필터옵션은 정확해야 하므로 1tasklist -v | findstr server 명령을 사용하는 것이 편하다)
프로세스에서는 cmd 로 보이지만 응용 프로그램 탭에서는 title 로 수정한 창제목이 보인다.
- 참고
http://devotionnoath.tistory.com/496
- 2010-03-15 추가 [본문으로]
- 택시에서 무선인터넷 사용하기
- 雜동사니
- 2010. 3. 4. 06:01
야근을 하고 택시를 탔는데 택시에서 무선인터넷이 된다는 안내가 보인다.
그래?
아이팟을 꺼내서 접속을 해본다.
KWI 로 시작하는 AP가 보인다. 암호는 SHOW3382 라고 한다.
친절콜이라고 한다.
사이트에 나가서 야근할 때 택시를 잡지 못하는 경우가 많았는데 콜택시를 부를걸 그랬다.
1588-3382
http://www.kindcall.com/ 을 통해서도 예약이 되나보다.
평소에 이 택시를 골라 타는 것도 좋을거 같다.
그래?
아이팟을 꺼내서 접속을 해본다.
KWI 로 시작하는 AP가 보인다. 암호는 SHOW3382 라고 한다.
친절콜이라고 한다.
사이트에 나가서 야근할 때 택시를 잡지 못하는 경우가 많았는데 콜택시를 부를걸 그랬다.
1588-3382
http://www.kindcall.com/ 을 통해서도 예약이 되나보다.
평소에 이 택시를 골라 타는 것도 좋을거 같다.
- 노트북 배터리 수명 & KTX에서 노트북 충전하기
- 카테고리 없음
- 2010. 3. 2. 12:30
Compaq nx8220 노트북을 4년 정도 사용하고 있고 배터리는 주로 빼놓았다.
전원없이 배터리로만 오피스 문서를 작성하는데 한시간정도 밖에 못버티네.
그저께 Grails 돌렸는데 금방 배터리가 나갔다.
KTX에서 노트북을 충전하려고 했는데 콘센트가 없다.
예전에 본거 같은데...
승무원에게 물어보니 없다고 한다.
무선인터넷도 되는데 콘센트가 없다는게 좀 이상하다.
좀 더 알아보니 기차와 기차 사이 통로에 전원 콘센트가 있다.
마음대로 쓸수는 없지만 승무원에게 부탁하면 열어준다고 한다.
통로 좌석 맞은 편 패널을 열면 보인다.
어떤 분은 화장실에서 충전을 했다고 한다.
- 역사에 있는 라운지에서 전원과 무선인터넷을 이용할 수 있다.
그런데 좀 춥다.
전원없이 배터리로만 오피스 문서를 작성하는데 한시간정도 밖에 못버티네.
그저께 Grails 돌렸는데 금방 배터리가 나갔다.
KTX에서 노트북을 충전하려고 했는데 콘센트가 없다.
예전에 본거 같은데...
승무원에게 물어보니 없다고 한다.
무선인터넷도 되는데 콘센트가 없다는게 좀 이상하다.
좀 더 알아보니 기차와 기차 사이 통로에 전원 콘센트가 있다.
마음대로 쓸수는 없지만 승무원에게 부탁하면 열어준다고 한다.
통로 좌석 맞은 편 패널을 열면 보인다.
어떤 분은 화장실에서 충전을 했다고 한다.
- 역사에 있는 라운지에서 전원과 무선인터넷을 이용할 수 있다.
그런데 좀 춥다.
- [Grails] 포트 변경
- 日常茶飯事
- 2010. 3. 1. 00:03
> grails -Dserver.port=9090 run-app
또는
$GRAILS_HOME/scripts/Init.groovy
serverPort = System.getProperty('server.port') ? System.getProperty('server.port').toInteger() : 8080
또는
$GRAILS_HOME/scripts/_GrailsSettings.groovy
수정 (2011-11-04 추가, Getting Started with Grails)
지원이가 퍼즐을 잘한다.
간단한 퍼즐은 그림을 외우고 있는듯하다.
퍼즐 조각을 집어들자 마자 퍼즐을 끼우네.
그래서 여러 퍼즐을 섞어서 줬는데 성질을 내면서 집어 던진다. ㅋㅋ
지원이 사촌언니보다 한글이 늦을줄 알았는데 그런게 아니였다.
책도 잘 읽고 뜻을 잘 알고 있다.
신기하기도 하고 대견하다.
책을 계속, 더 많이 접할수 있도록 해야 겠다.
음악이나 미술 공부, 그리고 활동적으로 놀수 있게 배려를 해줘야 할거 같네.
너무 기대는 하지 말고.
처가에서는 영재검사 받아보라고 하는데. ㅎㅎ
간단한 퍼즐은 그림을 외우고 있는듯하다.
퍼즐 조각을 집어들자 마자 퍼즐을 끼우네.
그래서 여러 퍼즐을 섞어서 줬는데 성질을 내면서 집어 던진다. ㅋㅋ
지원이 사촌언니보다 한글이 늦을줄 알았는데 그런게 아니였다.
책도 잘 읽고 뜻을 잘 알고 있다.
신기하기도 하고 대견하다.
책을 계속, 더 많이 접할수 있도록 해야 겠다.
음악이나 미술 공부, 그리고 활동적으로 놀수 있게 배려를 해줘야 할거 같네.
너무 기대는 하지 말고.
처가에서는 영재검사 받아보라고 하는데. ㅎㅎ
- KTX 좌석 배치도
- 雜동사니
- 2010. 2. 28. 14:33
- Ticket에 소스변경사항 링크걸기
- 카테고리 없음
- 2010. 2. 23. 16:35
- 중복된 티켓 처리하기
- 日常茶飯事
- 2010. 2. 21. 14:50
- Change only this instance, all events in the series, all following.
- 雜동사니
- 2010. 2. 20. 21:57
야후 일정관리가 너무 느리다.
이번에 구글로 옮겼다.
야후에서 일정을 내보내고 구글에서 가져왔다.
역시 구글이 편하다.
예전부터 옮기려고 했는데.
다만 아쉬운게 야후에서는 이벤트 제목을 바로 바꿀수 있는데 구글에서는 상세보기로 들어가야 한다.
다른 캘린더를 가져올수도 있다.
공휴일 캘린더가 있어서 가져오면 다른 나라 캘린더도 볼수 있다.
날씨를 표시할수도 있다.
정해진 시간이 되면 SMS로 알려준다.
당연히 아이팟과 동기화도 되고.
거참. 안되는게 뭔지.
이번에 구글로 옮겼다.
야후에서 일정을 내보내고 구글에서 가져왔다.
역시 구글이 편하다.
예전부터 옮기려고 했는데.
다만 아쉬운게 야후에서는 이벤트 제목을 바로 바꿀수 있는데 구글에서는 상세보기로 들어가야 한다.
다른 캘린더를 가져올수도 있다.
공휴일 캘린더가 있어서 가져오면 다른 나라 캘린더도 볼수 있다.
날씨를 표시할수도 있다.
정해진 시간이 되면 SMS로 알려준다.
당연히 아이팟과 동기화도 되고.
거참. 안되는게 뭔지.
- [미완] 공통 JSP 파일 및 JSTL 설정하기
- 日常茶飯事
- 2010. 2. 20. 19:48
include.jsp
JSTL을 사용하기 위해서는 jstl.jar, standard.jar를 WEB-INF/lib/에 넣는다.
[todo] tld파일 관련한 uri를 web.xml 에 설정하는 것도 확인해서 정리해 둘것.
[todo] 이미지 경로, context path 상수도 추가할 것.
웹서버와 연동하는 경우도 고려해서 정리하자.
정적 파일의 위치를 상수로 처리하는게 제일 나은 듯.
JSTL을 사용하기 위해서는 jstl.jar, standard.jar를 WEB-INF/lib/에 넣는다.
[todo] tld파일 관련한 uri를 web.xml 에 설정하는 것도 확인해서 정리해 둘것.
[todo] 이미지 경로, context path 상수도 추가할 것.
웹서버와 연동하는 경우도 고려해서 정리하자.
정적 파일의 위치를 상수로 처리하는게 제일 나은 듯.
- 톰캣 인스턴스 여러개 띄우기
- 日常茶飯事
- 2010. 2. 20. 09:00
톰캣 바이너리 하나로 인스턴스를 여러개 띄울 수 있다.
인스턴스 디렉토리(instanceN/)을 만들고
conf/를 복사하고 temp/를 만든다.
(logs/, work/는 자동으로 생긴다. webapps/는 사용하지 않는다면 없어도 될듯)
server.xml을 수정한다.
인스턴스 구동 배치파일(instanceN/bin/startup.bat)을 작성한다.
각 인스턴스를 구동하고 접속해 본다.
- http://localhost:8180/test
- http://localhost:8280/test
소스는 한곳을 보고 있기 때문에 수정하면 모든 인스턴스에 적용된다.
- Manager Application 1
CATALINA_HOME/webapps/manager/ 를 복사해서 CATALINA_BASE/webapps/ 에 두면 사용할 수 있다.
인스턴스 디렉토리(instanceN/)을 만들고
conf/를 복사하고 temp/를 만든다.
(logs/, work/는 자동으로 생긴다. webapps/는 사용하지 않는다면 없어도 될듯)
server.xml을 수정한다.
- 인스턴스1 포트를 81NN대로 수정한다.
인스턴스2는 82NN대로 설정한다. - Context를 설정한다.
인스턴스 구동 배치파일(instanceN/bin/startup.bat)을 작성한다.
@echo off
set CATALINA_HOME=E:\resources\programs\java\apache-tomcat-6.0.18
set CATALINA_BASE=E:\instanceN
rem set CATALINA_BASE=C:\Documents and Settings\computer\바탕 화면\tomcat //공백이 있다고 "로 감싸지 않는다.
"%CATALINA_HOME%/bin/startup.bat"
set CATALINA_HOME=E:\resources\programs\java\apache-tomcat-6.0.18
set CATALINA_BASE=E:\instanceN
rem set CATALINA_BASE=C:\Documents and Settings\computer\바탕 화면\tomcat //공백이 있다고 "로 감싸지 않는다.
"%CATALINA_HOME%/bin/startup.bat"
각 인스턴스를 구동하고 접속해 본다.
- http://localhost:8180/test
- http://localhost:8280/test
소스는 한곳을 보고 있기 때문에 수정하면 모든 인스턴스에 적용된다.
- Manager Application 1
CATALINA_HOME/webapps/manager/ 를 복사해서 CATALINA_BASE/webapps/ 에 두면 사용할 수 있다.
- 2010-08-24 추가 [본문으로]
- 문서화를 통한 협업(?) 사례
- 日常茶飯事
- 2010. 2. 17. 11:11
- 데이터 수정에 대한 요청이 들어왔는데 해당 업무에서 손을 놓은지 오래 되어서 기억이 가물가물하다.
Trac에서 검색해보니 비슷한 경우가 나온다. - 업무에 대해 진행상황이 어떤지 확인하는 전화가 왔다. 진행상황에 대해 잘 알지 못하고 있는데 일단 Trac 위키에 기록되어 있는 진행상황을 보고 알려줬다.(진행상황에 대해 주기적으로 보고하라고 해야겠다.)
- cafe24 기능이 좋아졌다.
- 雜동사니
- 2010. 2. 9. 10:50
cafe24의 절약형 서비스를 그동안 사용했었는데 기능이 좋아졌다.
Tomcat 버전을 올리고
단독 톰캣 서버가 가능해졌다. 1
그런데 command에서 PHP를 사용가능하게 해주면 안될까?
Tomcat 버전을 올리고
단독 톰캣 서버가 가능해졌다. 1
그런데 command에서 PHP를 사용가능하게 해주면 안될까?
- 2010-03-04 6 버전과 단독 서버는 지금 내가 이용하고 있는 구버전의 서비스에서는 안된다고 한다. 새로운 서비스로 옮겨야 하고 설치비가 든다고 함. [본문으로]
프레임워크가 늘어나면서 사용되는 jar 파일들이 엄청나게 늘어났다.
거기에 따른 버전 충돌도 자주 일어나고.
어디에 쓰는 jar 인지도 모르면서 여러 개발자가 마구 집어넣다 보니 이런 문제가 자주 발생하고 심각하다.
어제 Spring + iBatis 를 사용하는 프레임워크를 개발기에 올리다가 이런 에러가 발생했다.
jar 파일을 지우고 하나씩 넣고 해보다가 결국에는 Tomcat을 새로 설치했다.
이런 의존성 관련 문제가 운영기에 설치할때도 발생할거 같다.
거기에 따른 버전 충돌도 자주 일어나고.
어디에 쓰는 jar 인지도 모르면서 여러 개발자가 마구 집어넣다 보니 이런 문제가 자주 발생하고 심각하다.
어제 Spring + iBatis 를 사용하는 프레임워크를 개발기에 올리다가 이런 에러가 발생했다.
Caused by: java.lang.ClassCastException:
com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl cannot be
cast to com.ibatis.common.logging.Log
그런데 commons-logging 관련 jar 파일이 4개 정도 보였다.jar 파일을 지우고 하나씩 넣고 해보다가 결국에는 Tomcat을 새로 설치했다.
이런 의존성 관련 문제가 운영기에 설치할때도 발생할거 같다.
- HTML Table
- font-size
- vertical-align
top, middle
<div style="overflow-y:scroll; height:100px; width: 100%">
style="width:40px"
<td style="background:#F2F2F2;" align="center">
align은 ?
color:orange; font-weight:bold
<div style="display:none;"
- font-size
- vertical-align
top, middle
<div style="overflow-y:scroll; height:100px; width: 100%">
style="width:40px"
<td style="background:#F2F2F2;" align="center">
align은 ?
color:orange; font-weight:bold
<div style="display:none;"
- 네이트온 프록시 레지스트리
- 雜동사니
- 2010. 2. 3. 16:51
HKEY_CURRENT_USER\Software\SK Communications\Messenger\Network
ProxyHost1 | 127.0.0.1 | |
ProxyPort1 | 10022 | |
UseProxy | 1 | 프록시 사용, 0은 사용안함. |
- 잘못 전달된 예제소스
- 雜동사니
- 2010. 2. 2. 14:24
레거시 시스템과 연계하기 위해 Openquery를 사용.
Openquery에 익숙지 않은 개발자를 위해서 예제를 만들어서 배포
그런데 이 코드가 그대로 운영계에 반영되었다.
Openquery에 익숙지 않은 개발자를 위해서 예제를 만들어서 배포
그런데 이 코드가 그대로 운영계에 반영되었다.
- 개발자는 아무런 의심없이 연결된 서버명을 테스트 서버로 했다. : 개발자의 자질 문제인가? 1
- 연결된 서버명이 테스트 환경과 운영 환경이 동일하면 문제가 생기지 않았을거다. : 갑자기 데이터베이스가 변경되면서 기존에 사용하면 서버명을 사용할수가 없어서 다른 이름으로 변경하였다.
- 예제를 배포할때 이런 사소한 것까지 고려를 해야 한다. : LEGACY_TEST가 아니라 LINKEDSERVER_NAME 이런식으로.
- 이 코드를 작성한 개발자와 사이가 안좋은 다른 개발자는 이 개발자의 자질을 의심했다. 연결된 서버명이 이상한 것을 보고 고민을 했어야 하지만 Openquery에 대한 기초 지식이 없는 경우 이런 실수가 일어날 수 있다. 개발자들이 실수할 수 있는 부분을 막고, 사전에 방지할수 있는 시스템이 필요하다. [본문으로]
- 마트 서점에서 책읽기
- 행복이야기
- 2010. 1. 31. 17:57
마트에 조그만 서점이 있는데 지원이가 좋아한다.
마트라 그런지 얘들 책이 절반이상을 차지하고 책을 편하게 읽을 수 있게 의자도 있다.
매주 한번씩 가야겠다.
가서는 소설같은 책을 읽어야겠다.
그런데 공기가 안좋아서인지 눈이 아프다
이런곳에서 책을 보면 좋지 않을까?.
- 유닉스에 톰캣 컴파일해서 설치하기
- 日常茶飯事
- 2010. 1. 31. 09:22
- 유닉스에서 개발 웹 서버 설치, 설정하기
- Install and configure a development Web server in UNIX
- 시스템 요구 사항
JAVA_HOME
CATALINA_HOME
- 셸 설정
홈디렉터리에 .profile 파일을 생성한다.
- 사용자와 그룹
여러 사용자가 서버를 사용하게 된다면 당연히 각기 다른 사용자가 다양한 도구와 파일 시스템에 접근할 수 있도록 허용할 사용자와 그룹 권한을 설정하고 싶을 것이다. root가 아닌 사용자로 톰캣을 설치하여 동작시키려 한다면 이 또한 필수다(대부분의 실 서비스 환경에서 추천되는 방식이다).
- 서버 설치 파일 다운로드, 추출하기
- 서버 설정, 컴파일
- 서버 시작 2
- 시작 데몬 구동하기 3
- 톰캣 설치 테스트하기
기본 톰캣은 http 포트 8080에 내부 HTTP 서버를 설치한다(Coyote HTTP/1.1).
- 톰캣 웹 애플리케이션 매니저에 특정 사용자 접근 허용하기
tomcat-users.xml에 role과 user 추가
* 엔터프라이즈 웹 아키텍처 대 독립형(stand-alone) 웹 아키텍처에 대한 비교
- Install and configure a development Web server in UNIX
- 시스템 요구 사항
- 하드디스크 용량 10GB, 메모리 최소 512MB
- 웹 브라우저
- JRE 5.0 이상: Tomcat 6에서는 해당 JRE가 필요
- C 컴파일러 : 솔라리스나 IBM AIX의 기본 설치본에는 이런 컴파일러가 없다. Using the GNU C/C++ compiler on AIX를 참고한다.
- 파일 추출 도구 : 서버에서 파일을 적절히 추출하려면 gunzip, tar, bzcat, 그리고 가능하다면 GNU make와 tar(gmake, gtar로서 GNU 사이트에서 다운로드 가능)가 필요하다.
서버에서 도구들이 제대로 동작하는지 체크해 보려면 다음 명령어를 실행해본다.
# cd /usr
# find . –name *.tar //(repeat for *make, *zip, etc.) - 톰캣 코드
- 유닉스 서버에서는 bzcat, gunzip, tar(혹은 gtar)가 필요
- PATH 설정
- 기본 운영체제 파일 시스템(/var, /tmp 등)에 적절한 권한이 필요
- ID, 그룹, 적절한 접근 권한에 대해 고려해야 함
- GUI가 아닌 CLI
- 윈도우는 자동화된 배치 파일 처리에 .bat을, 실행 파일에 .exe 파일을 쓴다.
- 유닉스에서는 기본적으로는 실행 스크립트 등에 .sh나 .ksh 확장자를 사용한다.
JAVA_HOME
# export JAVA_HOME=/usr/jdk/instances/jdk1.5.0 //JRE 또는 JDK
# JAVA_HOME=/usr/bin/java; export JAVA_HOME
# echo $JAVA_HOME
/usr/jdk/instances/jdk1.5.0
# JAVA_HOME=/usr/bin/java; export JAVA_HOME
# echo $JAVA_HOME
/usr/jdk/instances/jdk1.5.0
CATALINA_HOME
# export CATALINA_HOME=/opt/apache-tomcat-6.0.16
- 셸 설정
홈디렉터리에 .profile 파일을 생성한다.
bash-3.00# cd ~/ (home dir)
bash-3.00# vi .profile
# /bin/sh
stty istrip
PATH=$PATH:/usr/bin:/usr/local/bin:/usr/ucb:/etc
export PATH
umask 077
export SHELL=/usr/bin/ksh
export ENV=$HOME/.kshrc
export EDITOR=vi
export FCEDIT=vi
#Tomcat specific PATHs
export JAVA_HOME=/usr/jdk/instances/jdk1.5.0
export CATALINA_HOME=/opt/apache-tomcat-6.0.16
bash-3.00# PATH=/usr/ccs/bin:$PATH; export PATH (for make cmd)
bash-3.00# PATH=/usr/sfw/bin:$PATH; export PATH
bash-3.00# vi .profile
# /bin/sh
stty istrip
PATH=$PATH:/usr/bin:/usr/local/bin:/usr/ucb:/etc
export PATH
umask 077
export SHELL=/usr/bin/ksh
export ENV=$HOME/.kshrc
export EDITOR=vi
export FCEDIT=vi
#Tomcat specific PATHs
export JAVA_HOME=/usr/jdk/instances/jdk1.5.0
export CATALINA_HOME=/opt/apache-tomcat-6.0.16
bash-3.00# PATH=/usr/ccs/bin:$PATH; export PATH (for make cmd)
bash-3.00# PATH=/usr/sfw/bin:$PATH; export PATH
- 사용자와 그룹
여러 사용자가 서버를 사용하게 된다면 당연히 각기 다른 사용자가 다양한 도구와 파일 시스템에 접근할 수 있도록 허용할 사용자와 그룹 권한을 설정하고 싶을 것이다. root가 아닌 사용자로 톰캣을 설치하여 동작시키려 한다면 이 또한 필수다(대부분의 실 서비스 환경에서 추천되는 방식이다).
# /usr/sbin/groupadd -g {구체적인 gid 명시. 명시하지 않으면 OS가 gid를 알아서 할당해줄 것이다.} {그룹 이름}
# /usr/sbin/groupadd -g 10004 tomcatgroup
# /usr/sbin/useradd -d {사용자 홈 디렉터리} -g {사용자가 속한 주 그룹} -u {구체적인 UID 명시. 이 란은 비워둘 수 있다. 명시하지 않으면 운영체제가 UID를 알아서 할당해줄 것이다.) -s {해당 사용자에 대한 기본 셸} -c "{사용자에 대한 상세 정보 명기}" {사용자 이름}
# /usr/sbin/useradd -d /export/home/tomcat -g tomcatgroup -u 10010 -s /bin/ksh -c "Main Tomcat Administrative User" tomcat
# /usr/sbin/groupadd -g 10004 tomcatgroup
# /usr/sbin/useradd -d {사용자 홈 디렉터리} -g {사용자가 속한 주 그룹} -u {구체적인 UID 명시. 이 란은 비워둘 수 있다. 명시하지 않으면 운영체제가 UID를 알아서 할당해줄 것이다.) -s {해당 사용자에 대한 기본 셸} -c "{사용자에 대한 상세 정보 명기}" {사용자 이름}
# /usr/sbin/useradd -d /export/home/tomcat -g tomcatgroup -u 10010 -s /bin/ksh -c "Main Tomcat Administrative User" tomcat
- 서버 설치 파일 다운로드, 추출하기
//파일을 /opt 디렉터리 아래로 옮긴다(/opt 디렉토리는 대부분의 신규 소프트웨어가 설치되는 디렉터리다).
# mv *tar.gz /opt
# ls -ltr /opt
//권한 설정하기
# cd /opt
# chmod +x *gz //same as chmod 775
# umask 007 //사용자가 770 권한을 갖고 신규 파일을 생성할 수 있도록 한다. chmod를 역으로 생각해 보라.
//설치 파일 추출하기
# gunzip *.gz
# tar -xvf *.tar
# ls -latr
# rm *.exe
# rm *.bat
# mv *tar.gz /opt
# ls -ltr /opt
//권한 설정하기
# cd /opt
# chmod +x *gz //same as chmod 775
# umask 007 //사용자가 770 권한을 갖고 신규 파일을 생성할 수 있도록 한다. chmod를 역으로 생각해 보라.
//설치 파일 추출하기
# gunzip *.gz
# tar -xvf *.tar
# ls -latr
# rm *.exe
# rm *.bat
- 서버 설정, 컴파일
# cd $CATALINA_HOME/bin
# ./configure --with-java=/usr/java
//- or -
# export JAVA_HOME
# ./configure
//코드 컴파일하기
# gunzip jsvc.tar.gz
# pwd
/opt/apache-tomcat-6.0.16/bin
# tar -xvf jsvc.tar
# gmake //gmake가 위치한 경로가 PATH에 있는지 확인하기 바란다(예를 들어 ./sfw/bin/).
//톰캣 사이트에서는 FreeBSD 시스템의 자체 BSD make 명령어 대신 GNU make(gmake)를 사용해야 한다고 언급하고 있다.
# chmod 775 jsvc 1
# cp jsvc ..
# cd ..
# ./configure --with-java=/usr/java
//- or -
# export JAVA_HOME
# ./configure
//코드 컴파일하기
# gunzip jsvc.tar.gz
# pwd
/opt/apache-tomcat-6.0.16/bin
# tar -xvf jsvc.tar
# gmake //gmake가 위치한 경로가 PATH에 있는지 확인하기 바란다(예를 들어 ./sfw/bin/).
//톰캣 사이트에서는 FreeBSD 시스템의 자체 BSD make 명령어 대신 GNU make(gmake)를 사용해야 한다고 언급하고 있다.
# chmod 775 jsvc 1
# cp jsvc ..
# cd ..
- 서버 시작 2
# cd $CATALINA_HOME/bin
# ./startup.sh
# cd ../logs
# tail -50 catalina.out
# ./startup.sh
# cd ../logs
# tail -50 catalina.out
- 시작 데몬 구동하기 3
#./jsvc \
–home /usr/jdk/instances/jdk1.5.0 \
–Dcatalina.home=/opt/apache-tomcat-6.0.16 \
-cp ./bin/bootstrap.jar \
-outfile ./logs/catalina.out \
-errfile ./logs/catalina.err \
org.apache.catalina.startup.Bootstrap
//root가 아닌 사용자로 구동하려면 -user 옵션을 사용
//특정 .pid 파일 위치를 명시하려면 -pid 옵션을 사용
# ./jsvc -help
–home /usr/jdk/instances/jdk1.5.0 \
–Dcatalina.home=/opt/apache-tomcat-6.0.16 \
-cp ./bin/bootstrap.jar \
-outfile ./logs/catalina.out \
-errfile ./logs/catalina.err \
org.apache.catalina.startup.Bootstrap
//root가 아닌 사용자로 구동하려면 -user 옵션을 사용
//특정 .pid 파일 위치를 명시하려면 -pid 옵션을 사용
# ./jsvc -help
- 톰캣 설치 테스트하기
기본 톰캣은 http 포트 8080에 내부 HTTP 서버를 설치한다(Coyote HTTP/1.1).
- 톰캣 웹 애플리케이션 매니저에 특정 사용자 접근 허용하기
tomcat-users.xml에 role과 user 추가
//보안을 위해 tomcat-user.xml 파일을 파일 소유자만 접근할 수 있도록 제한한다.
# chmod 600 tomcat-users.xml
# chmod 600 tomcat-users.xml
* 엔터프라이즈 웹 아키텍처 대 독립형(stand-alone) 웹 아키텍처에 대한 비교
- jsvc 는 런처(launcher) 프로세스, 통제(controller) 프로세스, 통제되는(controlled) 프로세스 이렇게 세 개의 프로세스를 사용한다. 통제되는 프로세스는 주 자바 쓰레드다. 이 주 자바 가상 머신(JVM)이 비정상적으로 종료되면 통제 프로세스, 즉 컨트롤러 다음에 재시작한다. jsvc는 데몬 프로세스이므로 root로 시작해야 한다. 인자값으로 -user를 주면 root 권한이 없는 사용자로도 동작시킬 수 있다. [본문으로]
- LifecycleListeners를 구현하여 시작 프로세스를 입맛에 맞게 고칠 수도 있다. [본문으로]
- 데몬은 비 대화형(non-interactive) 서버 애플리케이션으로서 명시한 시그널(signal)들을 운영체제가 통제하게 된다. 윈도에서 서비스를 떠올려보자. 윈도의 서비스는 서버 애플리케이션의 정상적인 셧다운을 위해 제공된다. 운영체제는 셧다운이 절박한 상황인 경우 서버 애플리케이션에게 이를 고지하게 되고 애플리케이션은 수행중인 과정을 끝내기 전에 어떤 작업을 수행할 수 있도록 할 여지가 생기게 된다. [본문으로]
Recent comment