데비안식 Apache2 + Tomcat5 + PHP4 + MySQL4 ¶
추가해야 할 소스 리스트 :
deb ftp://metalab.unc.edu/pub/linux/devel/lang/java/blackdown.org/debian sid main non-free설치해야 할 패키지 : libapache2-mod-jk2, libapache2-mod-php4(?), libmysqlclient10, libmysqlclient12, mysql-client, mysql-common, mysql-server, php4-mysql, j2se-common
사용상 주의사항 ¶
- Tomcat 4 이후에서는 모든 클래스는 패키지 컴파일이 필요함(Java Bean의 경우)
LBBOTP를 위한 설정 ¶
MySQL UTF-8 ¶
이 모든 것을 변경하지 않은 채 기본 charset인 latin1으로 사용하려면 모든 DB 커넥션(읽기, 쓰기)에 다음과 같은 식으로 써야 한다.
<%= new String(board.getName().getBytes("ISO8859-1"),"UTF-8") %>
셸 상에서 mysql utf8을 테스트 하기 전에, 다음 사항을 확인한다.
debian:~# echo $LANG ko_KR.UTF-8 debian:~# more .bashrc # ~/.bashrc: executed by bash(1) for non-login shells. ... export LANG=ko_KR.UTF-8 ...
# vi /etc/mysql/my.cnf
mysqld_safe mysqld mysql 아래에 다음 행 추가
default-character-set=utf8
# mysql -p
status 명령으로 다음 내용들을 확인한다 :
자세한 내용은 MySQL Manual | 10.3.3 Table Character Set and Collation 참고
mysqld_safe mysqld mysql 아래에 다음 행 추가
default-character-set=utf8
# mysql -p
status 명령으로 다음 내용들을 확인한다 :
mysql> status; Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8안심하긴 이르다. 특정 환경(ex: Eclipse의 SQL Explorer나 한글 미설정 환경의 터미널)에서 생성한 테이블의 경우 DB설정값을 따르지 않고 자체적인 설정 값을 가질 수 있기 때문이다. 이는 다음 명령으로 확인해 본다.
mysql> use [DB_NAME]; mysql> show table status; +-------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +-------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ | bbs_articles | MyISAM | 9 | Dynamic | 0 | 0 | 0 | 4294967295 | 1024 | 0 | 1 | 2004-12-05 00:17:09 | 2004-12-05 00:17:09 | NULL | latin1_swedish_ci | NULL | | | | bbs_boards | MyISAM | 9 | Dynamic | 0 | 0 | 0 | 4294967295 | 1024 | 0 | 1 | 2004-12-05 00:21:25 | 2004-12-05 00:21:25 | NULL | latin1_swedish_ci | NULL | | | | bbs_poa | MyISAM | 7 | Dynamic | 63 | 81 | 5128 | 4294967295 | 2048 | 0 | 83 | 2004-06-19 22:08:21 | 2004-06-19 22:08:21 | NULL | utf8_general_ci | NULL | | | | bbs_poa2 | MyISAM | 7 | Dynamic | 9 | 92 | 836 | 4294967295 | 2048 | 0 | 10 | 2004-06-19 22:08:21 | 2004-12-04 15:35:22 | NULL | utf8_general_ci | NULL | | | ...두 테이블이 설정값을 따르지 않고 자체 collation을 가지고 있음을 알 수 있다. 이를 다음과 같이 변경한다.
자세한 내용은 MySQL Manual | 10.3.3 Table Character Set and Collation 참고
mysql> alter table bbs_boards DEFAULT CHARACTER SET utf8; Query OK, 16 rows affected (0.08 sec) Records: 16 Duplicates: 0 Warnings: 0
이제 INSERT를 해 본다. 만일 입력 후 SELECT 하였을 때 ?? 형태로 나온다면 변환이 제대로 되지 않은 것이다. 이렇게 되면 시스템상의 복잡한 문제들을 추적하는 수 밖에 없으므로, 가장 간단한 방법은 테이블을 새로 만드는 것이다.(다른 방법도 찾아 볼 것)
테이블을 새로 만들기 전에 테스트 테이블을 만들어 이를 확인해 볼 수 있다. 이때 한글 문자열이 셸 상에서 정상 입/출력 되면 되는 것이다.
테이블을 새로 만들기 전에 테스트 테이블을 만들어 이를 확인해 볼 수 있다. 이때 한글 문자열이 셸 상에서 정상 입/출력 되면 되는 것이다.
mysql> create table tt1( idx int(2) primary key auto_increment not null, str varchar(200) not null ); Query OK, 0 rows affected (0.02 sec) mysql> insert into tt1 values('','하하'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> insert into tt1 values('','haha'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> select * from tt1; +-----+--------+ | idx | str | +-----+--------+ | 1 | 하하 | | 2 | haha | +-----+--------+ 2 rows in set (0.00 sec)
아래는 필자의 테스트용 JSP 파일이다. 상황에 맞게 고쳐 쓰자.(아니어도 고쳐야 한다 -_-)
<%@page contentType = "text/html; charset=utf-8" pageEncoding= "UTF-8"%> <%@page import="java.util.List" %> <%@page import="kr.pe.m9.board1.*" %> <%@page import="kr.pe.m9.board1.action.*" %> <%@page import="kr.pe.m9.board1.data.*" %> <%@page import="kr.pe.m9.board1.exception.*" %> <%@page import="kr.pe.m9.board1.manager.*" %> <%@page import="java.sql.*" %> <% //test code Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/setzer?useUnicode=true&characterEncoding=utf8","ID","PASS"); Statement stmt = conn.createStatement(); String sql = new String(("INSERT INTO groups values('','하하','호호','후후',now())").getBytes("UTF-8"),"UTF-8"); System.out.println(sql); //sql = new String("INSERT INTO groups values('','하하','호호','후후',now())"); %> <%= sql %><br> <% stmt.executeUpdate(sql); PreparedStatement pstmt = null; StringBuffer sb = new StringBuffer(); sb.append("INSERT INTO "); sb.append("groups "); sb.append("values('',?,?,?,now())"); pstmt = conn.prepareStatement(sb.toString()); pstmt.setString(1, "하하"); pstmt.setString(2, "호호"); pstmt.setString(3, "후후"); pstmt.executeUpdate(); %> <%= pstmt %> <% try{ List boardList = (List)request.getAttribute("boardList"); if(boardList.size() != 0){ for(int i=boardList.size()-1; i>=0; i--) { Board board = (Board)boardList.get(i); %> <p><%= board.getId() %>. <%= new String(board.getName().getBytes("ISO8859-1"),"UTF-8") %><br> <%= board.getName() %><br> 설명 : <%= board.getDescription() %> <br> 생성자:<%= board.getOwner() %><br> 생성일:<%= board.getDate() %> <% } }else{ %> <p>아무 게시판도 없습니다. <% } %> <p><a href="./board_list.do?command=create_board_form">게시판 생성</a> <% }catch(NullPointerException e){ %> <%= e %> 잘못된 접근입니다. <% } %>
firebird2(1.5) UTF-8 ¶
apt-get install firebird2-server-common, firebird2-classic-server, firebird2-utils-classic
JDBC Driver : http://firebird.sf.net/ -> download -> class4 jca/jdbc -> for jdk1.4(2.7M)
unzip FirebirdSQL-1.5.5JDK_1.4.zip -d jaybird/
eclipse - project properties - Java Build Path - Libraries - Add External Jars - firebirdsql-full.jar
unzip FirebirdSQL-1.5.5JDK_1.4.zip -d jaybird/
eclipse - project properties - Java Build Path - Libraries - Add External Jars - firebirdsql-full.jar
시작 자세한 내용은 http://firebird.sf.net -> documentation -> novice guide -> start here!(Quick Start Guide) 참고
(Classic Server와 Super Server의 차이점도 기술되어 있다)
(Classic Server와 Super Server의 차이점도 기술되어 있다)
/usr/lib/firebird2/bin/fb_inet_server
gsec(Firebird command-line security utility)를 이용한 계정 추가 :
데이터베이스 생성
# /usr/lib/firebird2/bin/isql
CON> CREATE DATABASE '/test.fdb'
SQL> user 'SYSDBA' password 'YOUR-PASSWORD';
# /usr/lib/firebird2/bin/isql
CON> CREATE DATABASE '/test.fdb'
SQL> user 'SYSDBA' password 'YOUR-PASSWORD';
SQL> CONNECT '/test.fdb' user 'SYSDBA' password 'YOUR-PASSWORD';
Database: '/test.fdb', User: SYSDBA
Database: '/test.fdb', User: SYSDBA
CON> select * from RDB$RELATIONS;
...
...
GUI툴은 내장되지 않음.
http://ibphoenix.com/ - Downloads - Contributed - Administration Tools 에서 사용할 적당한 툴을 구한다.
DbVisualizer 추천(현재 시점에서 4.2)
레드햇은 RPM이 제공되며 데비안은 sh 파일을 다운.(7.4M)
http://ibphoenix.com/ - Downloads - Contributed - Administration Tools 에서 사용할 적당한 툴을 구한다.
DbVisualizer 추천(현재 시점에서 4.2)
레드햇은 RPM이 제공되며 데비안은 sh 파일을 다운.(7.4M)
1. DriverManager Window에서 jaybird 드라이버를 Firebird란 이름으로 추가, 설치.
2. 첫 화면인 Object View 에서 Driver (JDBC)를 Firebird로 설정.
2. 첫 화면인 Object View 에서 Driver (JDBC)를 Firebird로 설정.
URL을 jdbc:firebirdsql:test.fdb로 설정하고 아이디와 비밀번호 입력한다.
3. Connect를 클릭. 퍼미션 에러(혹은 Resource Exception)가 날 경우 /test.fdb의 소유주를 firebird로 변경해준다.Aqua Data Studio에서도 크게 다르지 않다.
서버 등록시 Generic(JDBC)로 설정한 뒤 Url에는 동일, Driver에는 org.firebirdsql.jdbc.FBDriver라고 직접 적어주민 된다.
서버 등록시 Generic(JDBC)로 설정한 뒤 Url에는 동일, Driver에는 org.firebirdsql.jdbc.FBDriver라고 직접 적어주민 된다.
PostgreSQL(8.0) 설정 ¶
# apt-get install postgresql postgresql-contrib
debconf에서 backend locale을 ko_KR.utf8로 설정한다.
# /etc/init.d/postgresql start
# su - postgres
#psql template1
-- template1에 미리 plpgsql을 만들어 두면 나중에 DB 생성 후 따로 추가 할 필요가 없다.
create function plpgsql_call_handler()
returns opaque
as '/usr/local/pgsql/lib/plpgsql.so'
--데비안 Testing의 경우 /usr/lib/postgresql/lib/plpgsql.so
--페도라 코어 3의 경우 /usr/lib/pgsql/plpgsql.so
language 'C';
create trusted procedural
language 'plpgsql'
handler plpgsql_call_handler
lancompiler 'PL/pgSQL';
debconf에서 backend locale을 ko_KR.utf8로 설정한다.
# /etc/init.d/postgresql start
# su - postgres
#psql template1
-- template1에 미리 plpgsql을 만들어 두면 나중에 DB 생성 후 따로 추가 할 필요가 없다.
create function plpgsql_call_handler()
returns opaque
as '/usr/local/pgsql/lib/plpgsql.so'
--데비안 Testing의 경우 /usr/lib/postgresql/lib/plpgsql.so
--페도라 코어 3의 경우 /usr/lib/pgsql/plpgsql.so
language 'C';
create trusted procedural
language 'plpgsql'
handler plpgsql_call_handler
lancompiler 'PL/pgSQL';
$ createuser -DA test -P
Enter password for new user:
Enter it again:
CREATE USER
$ createdb testdb -O test
CREATE DATABASE
//혹은
$psql test
test=# ALTER USER test WITH PASSWORD '새 비밀번호';
Enter password for new user:
Enter it again:
CREATE USER
$ createdb testdb -O test
CREATE DATABASE
//혹은
$psql test
test=# ALTER USER test WITH PASSWORD '새 비밀번호';
$ logout
# psql testdb test -W
# psql testdb test -W
유저 권한은 /etc/postgresql/pg_hba.co (페도라의 경우 /var/lib/pgsql/data/pg_hba.conf) 에서 찾을 수 있다.
기본값인
같은 디렉토리의 postgresql.conf에서 다음 행의 주석을 해제한다 :
tcpip_socket = true
port = 5432
(방화벽이 설정되어 있다면 해당 포트를 해제한다)
기본값인
type | database | ip-address | ip-mask | method | |
local | all | all | ident sameuser | ||
host | all | all | 127.0.0.1 | 255.255.255.255 | password |
같은 디렉토리의 postgresql.conf에서 다음 행의 주석을 해제한다 :
tcpip_socket = true
port = 5432
(방화벽이 설정되어 있다면 해당 포트를 해제한다)
변경 후 리붓은 필수.
# /etc/init.d/postgresql restart
# /etc/init.d/postgresql restart
GUI 툴인 pgAdmin 다운로드 : http://pgadmin.org/download.php
2005년 3월 5일 최신버전(Fedora Core 3) :
wget ftp://ftp3.kr.postgresql.org/pub/mirror/pgsql/pgadmin3/release/v1.2.0/fc3/pgadmin3-1.2.0-1.i686.rpm
rpm -Uvh pgadmin3-1.2.0-1.i686.rpm
pgadmin3
2005년 3월 5일 최신버전(Fedora Core 3) :
wget ftp://ftp3.kr.postgresql.org/pub/mirror/pgsql/pgadmin3/release/v1.2.0/fc3/pgadmin3-1.2.0-1.i686.rpm
rpm -Uvh pgadmin3-1.2.0-1.i686.rpm
pgadmin3
web.xml 설정 ¶
example 참고해서 filter 설정.
<web-app> ... <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
EL 적용을 위한 설정(출처 : http://javacan.madvirus.net/main/board/board.jsp?cmd=r&kind=02&sno=702&code=0000000010&p=1&st=1&rn=T&keyword=EL)
WEB-INF/classes/filters 밑에 [attachment:SetCharacterEncodingFilter.java]를 컴파일하여 넣는다. 처음부터 EL이 적용되지 않았다는 뜻인가요? 기본적으로 EL은 적용되도록 되어 있는데요. 혹시 web.xml 파일의 <web-app> 태그가 1.2 스타일인지 2.0 스타일인지 확인해보시겠어요? 2.0 스타일은 다음과 같이 스키마와 관련된 정보와 version 속성을 갖고 있죠. <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 만약 단순히 아래와 같다면 <web-app> 톰캣은 이를 JSP 1.2의 web.xml 파일로 인식해서 자동으로 JSP 페이지에서 EL을 처리하지 않도록 한답니다. 이런 경우 JSP 페이지에 <%@ page isELIgnored = "false" %> 위 코드를 명시적으로 넣어주어야 EL이 적용이 되지요. ------------------------------------------------- gamza님이 입력한 내용 ------------------------------------------------- 안녕하세요 최범균님..책 정말 잘 보고 있습니다 제가 필요한 내용은 2.0 관련에서 필요한거였는데 앞부분부터 복습한다 생각하고 하고 있네요..^^ 질문입니다. 책대로 해 좀 응용해서 에러 페이지를 만들고 있는데. el이 죽어도 안먹어서 web.xml에서 el-ignored를 false를 해서 work 디렉토리 지우고 다시 시작했지만 안되었구요.. <%@ page isELIgnored="false" %> 이렇게 위에다 추가 한 다음에 하니 되더군요.. 테스트 페이지 jsp-examples 에서 jsp2 관련 el은 잘 뜨더군요.. 그런데 제가 만든 페이지를 webapps 디렉토리에다 만들지 않고 따로 만들었습니다. 차이점이라고는 제가 보기엔 따로 디렉터리를 두어서 돌린것 뿐인데.. 왜 그런지 좀 알려주시면 감사하겠습니다. 그리고 이럴경우에 매번 위 코드를 넣어줘야할것같은데.. 한번에 셋팅할수 있는 방법이 없는지 알고 싶습니다. Tomcat 5.0.27 버전입니다. 추운데 감기조심하시구요... 답변 기다리겠습니다.