프로퍼티 파일을 사용해서 sqlMapConfig 에 DataSource 를 지정할 때, 공백 하나 때문에 수 시간을 낭비했다..ㅠㅠ

properties 파일애내에서
key=value 로 정의 할 때,

value 부분의 공백을 주의하자!
공백 없이 넣어야 한다!~ 이런!!!

그리고, Tomcat 에서 JNDI 리소스는 되도록 server.xml 에 Global 로 등록하고,
Context.xml 에는 ResourceLink 걸어준다.

마지막으로, web.xml 에서, resource-ref 는 없어도 된다.

META-INF/context.xml 을 넣는 것은, Gloabal 이 아니고, Context 에만 해당되도록 하는 것이나, WAR 배포하면, 패스워드도 함께 주는 것이라 보안 상 위험할 수 있다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

1. Commons Logging

 

Commons Loggin API는 자카르타 Commons에 포함되어 있는 프로젝트들이 로거로 사용하는 API이다. Commons Logging API는 자체적으로 로깅 기능을 구현하고 있지는 않으며, 로깅 요청을 Log4J나 자바1.4로깅 API와 같이 이미 존재하는 로깅 API에 전달하는 다리 역할을 한다. 즉, Commons Logging API를 사용하면 Log4J를 사용하든 자바 1.4의 로깅 API를 사용하든지에 상관없이 동일한 방식으로 로깅 코드를 작성할 수 있게 된다.

 

 

Loggin API를 사용하기 위해서는 다음의 두 클래스만 사용하면 된다.

- org.apache.commons.logging.Log

- org.apache.commons.logging.LogFactory

 

 

LogFactory는 사용자의 시스템에 알맞은 Log를 생성해주는 팩토리 클래스이다.

Log는 인터페이스라서 실제로 로그를 기록하는것은 Log 인터페이스의 구현체를 통해서 연결된 Log4J나 자바1.4의 로깅 API이다.

 

(사용예)

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

 

public class IbatisWithMysqlBoardDAO extends SqlMapClientDaoSupport implements BoardDAO {

...

 

     protected final Log logger = LogFactory.getLog(getClass());

 

     public List findBoardList(int currentPage, int countPerPage) throws SQLException {

     ...

          logger.debug("로그테스트");

     ...

     }

 

...

}

 

 

LogFactory는 다음과 같은 순서로 Log구현체를 선택하게 됩니다. (다음 생략...)

Log4J 라이브러리 파일을 CLASSPATH에 추가시켜주면 LogFactory는 탐색순서에 의해 Log구현체로 Log4J를 사용한다.(2순위)

 

 

Log구현체는 로그를 기록할 때 Commons Logging API의 로그 레벨을 실제로 사용하는 로깅 API의 로그 레벨로 알맞게 매핑시켜준다.

 Commons Logging 로그레벨 Log4J의 로그레벨  자바 1.4의 로그 레벨 
 TRACE DEBUG  FINEST 
 DEBUG DEBUG  FINE 
 INFO  INFO INFO
 WARN  WARN  WARNING
 ERROR  ERROR  SEVERE
 FATAL  FATAL  SEVERE

 

 

로그레벨의 판단을 위한 메소드

boolean isTraceEnabled()

boolean isDebugEnabled()

boolean isInfoEnabled()

boolean isWarnEnabled()

boolean isErrorEnabled()

boolean isFatalEnabled()

 

 

 

 

2. Log4J

 

Lo4J의 로그레벨(내림차순)

- Level.FATAL : 치명적인 에러

- Level.ERROR : 에러

- Level.WARN : 경고

- Level.INFO : 정보

- Level.DEBUG : 상세정보

 

 

Log4J의 구조

: Log4J는 크게 Logger, Appender, Layout의 3가지 요소로 구성되어 있다.

 

 

Appender

- org.apache.log4j.ConsoleAppender : 콘솔에 로그메시지 출력

- org.apache.log4j.FileAppender : 파일에 로그 메시지를 기록

- org.apache.log4j.RollingFileAppender : 파일에 로그 메시지를 기록하며, 파일이 일정 크기가 되면 다른 이름으로 저장하고, 새롭게 로그 메시지를 기록하기 시작한다.

- org.apache.log4j.DailyRollingFileAppender : 파일에 로그 메시지를 기록하며, 하루단위로 로그파일 변경

- org.apache.log4j.net.SMTPAppender : 로그메시지를 이메일로 전송한다.

- org.apache.log4j.nt.NTEventLogAppender : NT의 이벤트 로그 시스템에 로그 메시지를 전송한다. 윈도우즈 시스템만 사용 가능

 

 

Layout

: Layout은 org.apache.log4j.PatternLayout을 일반적으로 사용한다.

 

PatternLayout에서 지원하는 패턴

1) C : 로그메시지를 기록하려는 클래스의 이름 출력! 패키지 계층 제어 가능 ex) %C{2}

2) d : 메시지 기록 시간 출력! 포멧 지정 가능! 포멧은 java.text.SimpleDateFormat과 같은 포맷 ex) %d{yyyy-MM-dd HH:mm:ss}

3) p : 로그 메시지의 우선순위 출력

4) m : 로그 메시지 자체를 출력

5) M : 로그 메시지를 기록하려는 메소드의 이름 출력

6) n : 플렛폼의 라인 구분자를 출력

7) % : %%는 '%'자체를 출력

 

 

 

Log4J 설정파일 다루기

log4j.rootLogger = [level], appender_name, ...

 

log4.logger.logger_name = [level|INHERITED], appender_name,...

log4j.additivity.logger_name = true|false

 

log4j.appender.appender_name = [appender_calss_name]

log4j.appender.appender_name.option1 = value1

log4j.appender.appender_name.option2 = value2

 

log4j.appender.appender_name.layout = [layout_calss_name]

log4j.appender.appender_name.layout.option1 = value1

log4j.appender.appender_name.layout.option2 = value2

 

 

 

Log4J 설정파일 예

 

log4j.rootLogger=WARN, FILE
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=d:/dev/log/error.log
log4j.appender.FILE.Threshold=ERROR
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[%d] %-5p %l - %m%n

 

log4j.logger.com.kth.swaf.web.filter=INFO, FILTER
log4j.appender.FILTER=org.apache.log4j.ConsoleAppender
log4j.appender.FILTER.Threshold=INFO
log4j.appender.FILTER.layout=org.apache.log4j.PatternLayout
log4j.appender.FILTER.layout.ConversionPattern=%-5p - %m%n

 

log4j.logger.com.kth.swaf=WARN, SWAF
log4j.appender.SWAF=org.apache.log4j.ConsoleAppender
log4j.appender.SWAF.Threshold=WARN
log4j.appender.SWAF.layout=org.apache.log4j.PatternLayout
log4j.appender.SWAF.layout.ConversionPattern=[%d] %-5p - %m%n

 

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

web.xml 에 설정하는 방법도 있다. 이게 확실하고 깔끔한 방법이다.
하지만, WEB-INF 밑에 JSP 를 두는 방법으로도 가능하다.

단, 이때는, href 나 Form Submit 할 때, 직접 WEB-INF/abc.jsp 처럼 접근할 수 없으므로 주의해야 한다.
WEB-INF 밑의 JSP 파일 접근 하려면, Struts 의 Action 에 Mapping 하거나 하여 Framework 이 Page를 Return 하도록 하는 방법을 사용해야 한다.

이왕이면 .jsp 요청은 받아들이지 않게 하는게 좋을것이다.
반응형

'Software Development > JavaSE&EE' 카테고리의 다른 글

iBatis 에서 JNDI 설정 시 주의사항  (1202) 2009.10.25
Commons Logging 과 Log4J  (1200) 2009.10.16
변수명 표기법 종류  (463) 2009.10.12
OAuth - Open Source 보안인증 API  (455) 2009.09.23
RuntimeException 의 특성  (1188) 2009.08.12
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
htpasswd 기반의 사용자 생성은, AccountManager 플러그인을 사용해서 쉽게 할 수 있다 치고, 권한을 사용자에게 할당해야하는 부분이 남아있다.

Trac 의 권한 설정은 처음에는 좀 낮설었지만, 조금 하다 보니 어느정도 이해가 간다. (그렇지만 아직 사용자를 그룹핑하는 방법을 몰라서 조금 아쉬운데..)

우선, admin 권한의 사용자로, Admin>Permissions 메뉴로 들어가면 아래와 같은 화면이 나온다.


그러면 위에서와 같이, 우측에 Grant Permission: 과 Add Subject to Group 이라고 나온다.

우선, Grant Permission에서,
Subject 에는, 권한그룹명을 써준다. 여기서는, "리더" 라는 권한그룹명(그룹명)을 써준다.
그리고, Action 에서, 해당 권한을 골라서 하나씩 추가해줄 수 있다.

Add Subject to Group: 에서는, 사용자에게, 권한그룹을 할당할 수 있다.
혹은, 권한그룹에 다른 권한그룹을 할당할 수 있다. (즉, 여러 권한들을 모아서 하나의 권한집합 생성도 가능)
여기서는, korean44 라는 사용자에게, "리더" 라는 권한그룹을 할당 한 것이다.

복수개의 권한이 적용 가능하며(아직 안해봤지만 그리 되겠지), 권한그룹이 다른 권한그룹을 포함할 수 있다.
단, 권한그룹에 사용자를 추가하는 방법은 불가하다. 사용자가 권한그룹을 갖는것은 가능하지만 말이다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
apache 는 2.2 를 사용한다라는 가정 하에, php 5.2.11 을 설치해본다.

apache 는, /usr/sbin 에 bin 이 설치되었다라고 가정한다.

1. 다운로드 및 tar.gz 압축 풀기
 이 과정은 뭐 별도 설명 없어도 가능하다라는 가정 하에 진행한다.
 wget 으로 받아놓고, 압축 풀면 되겠다.

2. configure 설정

./configure --prefix=/usr --with-apxs2=/usr/sbin/apxs --with-config-file-path=/etc --with-mysql=/usr --with-exec-dir=/usr/sbin --with-zlib --with-gd --with-ttf --with-png --with-jpeg-dir --with-iconv


--with-apxs2 : apache 에 DSO 모듈로 등록하겠다는 이야기이고, apache 설치할 때 깔린 apxs 파일의 경로 써주면 됨.
--with-config-file-path : php.ini 파일의 경로
--with-mysql : mysql 설치된 home
--with-exec-dir : apache 의 bin 디렉토리
나머지는 알아서..

3. make

4. make install

하고 나면, 대충 install 은 된다.

[설정]

1. httpd.conf 에 설정하기

LoadModule php5_module modules/libphp5.so

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

위와 같은 내용을 httpd.conf 에 혹은 별도 외부 .conf 에 정의 후에 include 하여야 한다.

하다보니,
내 Ubuntu 의 Apache 2.2.11 의 경우,. conf/httpd.conf 와 conf/extra 디렉토리 내에, 각 파트별 .conf 파일이 나뉘어 있고,
회사에서 설정하던 Linux 서버에는 conf/httpd.conf 가 있고, conf.d/각종.conf 파일이 있더라는.. 이건 잘 알아서 판단하여 넣어준다.

위의 conf/extra 구조로 되어있는 경우에는, httpd.conf 파일에, 위 내용을 기술해 주는것이 나을테고, conf.d 구조로 되어있는 경우, 위의 내용을 php.conf 등으로 저장하여 추가해놓으면 설정이 되겠지요.

2. php 작동 확인

test.php 페이지를 하나 만들고, 내용은,
<?php
 phpinfo();
?>


처럼 하면 된다.

확인할 때, mysql 연동 잘 되었는지 보고, Zend 설정 되었는지 등도 확인해라. (Zend 설정은, 안된 경우, 별도의 Zend Optimizer 설치하도록 한다)
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
root 패스워드를 분실한 경우(응급조치)

mysql을 오랫동안 사용하지 않았을 경우에 간혹 root패스워드가 기억나질않아서 당황할 때가 있습니다.  시스템관리자라면 시스템의 root나 MySQL의 root의 암호를 잊어 버렸을 때를 대비해서 패스워드를 새로 설정하는 방법을 반드시 숙지하고 있어야 할 것입니다.

① 실행중인 msyql 종료

# ps -ef | grep mysqld
root      9567     1  0 Mar16 ?        00:00:00 sh ./mysqld_safe
root      9576  9567  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld
root      9578  9576  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld
root      9579  9578  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld

# killall mysqld

② grant-table 미사용모드로 mysql시작(권한 테이블을 사용하지 않는 옵션으로 데몬 실행)

# ./safe_mysqld  --skip-grant-tables &
[1] 12084
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ./mysql -u  root  mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.24
Type 'help' for help.
mysql>

※ mysqld_safe 명령어는 mysql 데몬을 실행시킨다.

③ update문으로 root사용자 패스워드 갱신

mysql> update user set password=password('123') where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> \q         
Bye

④ 실행중인 mysql 다시 종료(권한 테이블을 사용하지 않는 데몬을 종료)

# ps -ef | grep mysqld
root     12084 11558  0 20:10 pts/2    00:00:00 sh ./mysqld_safe --skip-grant-ta
root     12090 12084  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12092 12090  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12093 12092  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
#
# killall mysqld
mysqld daemon ended
[1]+  Done                    ./mysqld_safe --skip-grant-tables
#

⑤  Mysql 데몬 재 실행 후 갱신된 패스워드로 로그인

# ./safe_mysqld &
[1] 12102
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ps -ef | grep mysql
root     12102 11558  0 20:13 pts/2    00:00:00 sh ./mysqld_safe
root     12108 12102  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12110 12108  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12111 12110  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld

# mysql -u  root  -p
Enter Password: ***************



완.료.

반응형

'Software Development > DB' 카테고리의 다른 글

[MySQL] Ubuntu 13.04 에 MySQL 5.6 설치  (495) 2013.08.27
MySQL Connection Pool 타입으로 JNDI 등록  (1213) 2009.11.16
MySQL root 비번 변경하기  (487) 2009.10.15
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

mysql 의 root 는 기본적으로 패스워드가 비어있다. 이대로 계속 두었다가는 낭패..
phpadmin 이라도 설치하면 편하겠는데, 언제 그걸 설치하는가..
mysql.user 테이블의 password 를 변경해서 쉽게 적용하자.

mysql -uroot
mysql> use mysql;
mysql> update  user  set  password=password('123456') where user='root';
mysql> flush privileges;

요렇게 간단하게 끝내자. 마지막 flush privileges; 안하면, DB 를 내렸다 올려야 한다. 꼭 권한변경 해주면 함께 해주도록 한다.

update 를 사용해서, 접속 가능한 host 등도 쉽게 변경하도록 한다.

mysql> UPDATE user SET grant_priv='N', show_db_priv='N', super_priv='N', create_user_priv='N' where user='cserver';
mysql> flush privileges;
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

Trac 의 기본 textarea 기반의 에디터는 정말.. 말이 안나온다.

어느정도 기본적인 기능을 갖춘 WYSIWYG 에디터 플러그인을 설치해서 사용하도록 한다.

[다운로드]


그런데 왜 그 흔한 색상지원이 안되는건지 모르겠다. 다른 플러그인이 또 있으려나..

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

Ticket 삭제는 내부에 기능이 없고, 별도의 플러그인을 설치해야 한다.

TicketDeletePlugin 을 다운로드 해서 설치해준다.

그러면 Admin 메뉴에 Ticket Sysems> delete, delete Change 와 같은 메뉴가 생긴다.


삭제 시에는, Ticket 의 ID (티켓 번호 #100 --> 100) 가 필요하다.
선택이 아니라, 직접 입력해야 한다.


왜 직접 ID를 적게 하고, Again 에서, 같은 ID 를 또한번 넣게 하는지 모르겠다.. 두번 입력하는것 좋은데, 선택할 수 없는게 약간 답답하기는 하다.


반응형

'Software Development > Dev Tools' 카테고리의 다른 글

[Trac] 권한 설정하기  (1906) 2009.10.16
[trac] 기본 에디터 대체 플러그인  (1198) 2009.10.14
[Trac] 필수 플러그인 설치 및 설정 #3  (496) 2009.10.11
[Trac] Trac 설정 및 새 프로젝트 #2  (1201) 2009.10.11
[Trac] Trac 설치하기 #1  (1194) 2009.10.10
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
웹 개발 하다보면, 요즘들어 웹표준을 따라야 하는 경우가 많다. 거기에다가 웹접근성 까지.. 머리아퍼 머리..
왜이리 아키텍트는 할게 많은건지, 기술만 쫒아가다가 세월 다 흘러갈 것 같다.

이런 우리들을 위해 감사하게도, 많은 툴들이 있는데 (사실 IE 용이나 별도의 전용 툴은 아직 사용해보지 못하고..^^)
그중, FireFox 에 Add-On 해서 쓸 수 있는 부가기능들이 몇가지 있어, 오늘은 비교나 좀 해봐야겠다.

http://addons.mozilla.com 에 가서, validator 로 검색하면 여러가지가 나오는데, 그중, 아래 Validator 들을 사용해보겠다.

툴들을 테스트 하기 전에, FireFox 3.5에 기본개발도구를 설치해둔다.

* FireBug - 웹개발시 디버깅용 필수
* IE Tab - IE 로 페이지를 볼 수 있다 (IE View 보다 인기 많음)
* IE View - IE 로 페이지를 볼 수 있다
* Screengrab - 화면 캡춰용
* Web Developer - 무엇보다, 소스보기>변환된소스보기 에서, Ajax 나 JavaScript 통해 변환된 페이지 소스 볼 수 있다
* ColorZilla - 컬러피커

위 툴 들은, 아래 툴과는 상관 없으나, 거의 Must-Have 아이템이다. 이제 본격적으로 Validator 를 살펴본다.

1. HTML Validator 0.8.5.8

웹 개발도구 카테고리 중, FireFox AddOns 사이트에서 순위가 꽤 높은 편이다.
설치하고 FireFox 재시작 하면,


위와 같은 화면이 뜬다. 두가지 중에 하나 혹은 둘다 병행하도록 설정할 수 있는데, HTML Tidy 방식이, WAI Level 1,2,3 의 웹접근성 까지도 검사해주므로, 일단 HTML Tidy 방식으로 선택하면 된다.

그런데, W3C 의 온라인 HTML 검사기와 동일한 레벨로 체크하고 싶으면, SGML 을 선택한다. 단, 웹접근성 검사를 해주지 않고, 자동으로 수정해주는 Cleanup 기능도 동작하지 않는다.

설치를 완료하면,



위와 같이, Task 영역에 아이콘이 생긴다. 위 예에서는 페이지에 경고가 있는 경우이고, 문제가 없는 페이지에서는 녹색 체크 아이콘이 뜬다.

경고를 더블클릭 하면, 아래 같은 화면이 뜬다.

경고나 오류를 볼 수 있는 화면으로, 소스코드도, JavaScript 가 실행된 최종 DOM 을 기반으로 하여 구성된다.
경고나 오류, 정보에 클릭하면 해당 위치의 라인으로 바로 이동한다. 경고에 대한 약간의 도움말도 바로 오른쪽에 나와주니 참으로 편리하다.

또 좋은 기능중에 하나가, "페이지 청소.." 기능이다. 이 버튼을 누르면, 어느정도 자동으로 정리해준 코드를 미리 볼 수 있다.


위에 보이는 탭 처럼, 정리된 HTML, 원본 HTML 을 소스로 하여, 각각 미리보기 까지 가능하다.
"파일>다른이름으로 저장" 메뉴를 통해, 현재 보이는 소스를 HTML 로 저장하여, 다른 검증 툴에서도 활용 가능하다.

마지막으로, "선택사항..." 버튼을 누르면, 같은 소스를 다른 알고리즘(HTML Tidy, SGML, 병행)으로 바로 바꾸어 재검사 할 수 있다.


참으로 쓰기 편하고, 소스보기도 JS 나 AJAX 등으로 변경된 결과를 반영하여 보여주기 때문에 활용성이 아주 뛰어나다.
(단, 아래와 같이, Status Bar 의 아이콘에서 우측클릭하여, 고급>지금검증... 을 눌러야 현재 JS 등으로 변경된 Page 를 Validate 한다.)



2. Total Validator 6.0.2

웹 기반의 Validation 을 수행해주는 툴이다.
플러그인이 설치되면, Status Bar 우측에, Tv 아이콘이 보인다.


우측클릭 하자마자, 바로 설정 메뉴가 뜬다. 여기에서, Validate 옵션을 선택할 수 있다.


Validation 옵션이며, HTML Validation, 접근성, 깨진링크, 스펠링체크, 스냅샷 찍기 까지 지원된다.
(스냅샷 찍기는 영 기능이 꽝이다. 시간도 오래 걸리고, 결과를 웹에서 보여주는데, 서버에 캡춰파일을 업로드 하고, 이를 결과 페이지에서 보여주는 방식이다. 스냅샷이 여러장 올라가는데, 그러다보니 파일 업로드/다운로드로 인해 속도가 상당히 느리다)


다양한 형식의 XHTML / HTML 의 Validation 을 지원한다.


웹접근성도 여러종류 지원한다.


결과 화면은 위와 같이 웹페이지로, totalvalidation.com 사이트를 통해 보여진다.
그러다보니, 전체적으로 많이 느린 편이다.

게다가, 동적으로 변경 된 소스코드를 검사할 수 없다. JS 나 Ajax 로 변경된 페이지는 검사할 수 없다는 단점이 있다.
웹페이지를 통해 결과를 보아야 하고, 파일 업로드와 서버의 분석시간이 오래걸리는것도 단점이다.
하지만, 다양한 표준에 맞추어 검사할 수 있다는 장점은 있다.


이외에도, 여러 Validator 가 있지만, 1번의 HTML Validator 가 써본 바로는 가장 괜챦았고, 다른 HTML Validator 들은, 웹서비스에 파일을 업로드 해서, 서버에서 검증하는 방식이 많이 있다.



반응형

'Software Development > Web Front' 카테고리의 다른 글

SyntaxHighliter 2.0 사용  (451) 2009.07.24
블로그 이미지

Good Joon

IT Professionalist Since 1999

,