= 데비안식 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의 경우)
= 참고 문서 =
* [http://wiki.kldp.org/wiki.php/Apache2Tomcat5Howto]
= 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> 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을 가지고 있음을 알 수 있다. 이를 다음과 같이 변경한다.
자세한 내용은 [http://dev.mysql.com/doc/mysql/en/Charset-table.html 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 %>
<%
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);
%>
<%= board.getId() %>. <%= new String(board.getName().getBytes("ISO8859-1"),"UTF-8") %>
<%= board.getName() %>
설명 : <%= board.getDescription() %>
생성자:<%= board.getOwner() %>
생성일:<%= board.getDate() %>
<%
}
}else{
%>
아무 게시판도 없습니다. <% } %>
게시판 생성
<%
}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
시작 자세한 내용은 http://firebird.sf.net -> documentation -> novice guide -> start here!(Quick Start Guide) 참고
(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';
SQL> CONNECT '/test.fdb' user 'SYSDBA' password 'YOUR-PASSWORD';
Database: '/test.fdb', User: SYSDBA
CON> select * from RDB$RELATIONS;
...
GUI툴은 내장되지 않음.
http://ibphoenix.com/ - Downloads - Contributed - Administration Tools 에서 사용할 적당한 툴을 구한다.
[http://www.minq.se/products/dbvis/ DbVisualizer] 추천(현재 시점에서 4.2)
레드햇은 RPM이 제공되며 데비안은 sh 파일을 다운.(7.4M)
1. DriverManager Window에서 jaybird 드라이버를 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라고 직접 적어주민 된다.
== 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';
$ 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 '새 비밀번호';
$ logout
# psql testdb test -W
유저 권한은 /etc/postgresql/pg_hba.co (페도라의 경우 /var/lib/pgsql/data/pg_hba.conf) 에서 찾을 수 있다.
기본값인
|| 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
[http://database.sarang.net/database/postgres/JServ/post_jdbc-6.html 참고 문서]
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
== web.xml 설정 ==
example 참고해서 filter 설정.
{{{