다음은 수업시간에 교수님이 저를 꼭 집어서 시켜서 제가 작성한 것 입니다. 도움이 될 까 하고 여기에 올려봅니다.



JDBC에 대한 설명을 수업시간에 들어서 다 아실거라 믿습니다. 다시 조금 설명하면 Java와 DB의 연결점이라고 생각하시면 됩니다. DB 마다 조금씩 SQL명령구문이 다릅니다. 다른 DB를 사용한다고 해서 SQL명령이 들어간 부분을 완전히 바꾼다고 한다면 보수유지에 문제가 많겠지요. 그래서 통일성있게 하려고 JDBC를 사용합니다. 


  JDBC를 사용할려면 우선 자바 JDK가 깔려있어야 하겠고 또 DB에 맞는 JDBC Driver가 필요합니다. 우리의 목표는 MySQL과 자바의 연결이니 MySQL에서 제공하는 JDBC Driver 가 필요합니다.  http://www.mysql.com/downloads/api-jdbc.html  이 주소를 따라가면 MySQL의 JDBC 드라이버를 받을 수 있습니다.


   다운 받을 때 버전 번호 잘 확인 하기 바랍니다. 버전 번호에 대한 설명은 http://dev.mysql.com/doc/refman/5.0/en/connector-j-versions.html  에 있습니다. 이 내용은 JDBC버전과 Mysql 의 관계를 설명한것입니다.  저의 엉터리 영어 해석을 동원하자먄  Connector/J 3.0 버전은 MySQL 3.x or MySQL 4.1 servers(버전뒤에 servers 가 붙는 것은 뭔지 모르겠습니다.) 에서 동작하고 , Connector/J 3.1 는 MySQL 4.1 and MySQL 5.0 servers 에서 동작하고, Connector/J 5.0  는  Connector/J 3.1의 기능에 뭔가를 추가했다는 말 같습니다.
  여기에 우리는 자바 가상머신 버전과 Connector/J 의 버전도 고려해야 합니다. 그 설명은 http://dev.mysql.com/doc/refman/5.0/en/connector-j-versions-java.html 여기에 있습니다. 자바 1.5이상을 쓰시면 그 다지 걱정하지 않아도 될 것 같군요..


  그냥 zip 파일이기 때문에 압축해제 하고 싶은데 하시기 바랍니다. 이 디렉토리(폴더)안에는 mysql-connector-java-[ver]-bin.jar 이런 형식의 jar 파일이 있습니다. 이 파일의 총 경로(디렉토리주소\파일이름)를 CLASSPATH라는 환경변수에 이 디렉토리를 설정하기 바랍니다. (CLASSPATH 에 추가 하는 것은 다 아시리라 믿습니다. PATH에 설정하듯이 설정하면 됩니다. CLASSPATH라는 환경변수가 없으면 만들고, 있으면 세미콜론 하나 붙인 후 이 패스를 추가 하면됩니다. )
 근데 이게 재부팅해야 작동하는 것 같습니다. 환경설정 자체는 재부팅이 필요없는데 JVM이 다시 로드되어서 작동하는 것 같습니다. 재부팅 안하고 하려면 mysql-connector-java-5.0.5-bin.jar 파일을 C:\Program Files\Java\jdk1.5.0_10\lib 라는 디렉토리에 넣으면 됩니다. 이게 더 좋은 방법일 것 같습니다.


 이제 잘 설정되었는지 실험해 보시기 바랍니다. 다음을 컴파일 한 후 실행해 보기 바랍니다.
===============================================
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;



public class jdbcTest {
 public static void main(String[] args) {
  try {
   // The newInstance() call is a work around for some
   // broken Java implementations


   Class.forName("com.mysql.jdbc.Driver").newInstance();
  } catch (Exception ex) {
   // handle the error
  }
 } 
}==================================================


 이 프로그램은 간단하게 Mysql과 연결하기 위해 드라이버를 로딩하는 기능을 합니다. 이게 제대로 실행되어야 합니다. 실행중 에러가 나면 안됩니다. 잘 작동하지 않는다면 대부분의 문제는 앞에서 설정을 잘못하였거나 자기 Mysql 버전과 맞지 않는 것을 사용했기 때문입니다.(저 같은 경우, 완전이 압축해제 하지 않아서 시간을 조금 허비했군요. 이 경우도 확인해 보시기 바랍니다.)


 이제 Mysql에 접속해 보겠습니다. 우선 mysql이 작동하는 상태로 만들고, 다음 코드를 컴파일 후 실행해 보기 바랍니다.
===================================================
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;



public class jdbcTest {
 public static void main(String[] args) {
  try {
   // The newInstance() call is a work around for some
   // broken Java implementations


   Class.forName("com.mysql.jdbc.Driver").newInstance();
  } catch (Exception ex) {
   // handle the error
  }
  try{
   Connection conn =
        DriverManager.getConnection("jdbc:mysql://localhost" ,"아이디" ,"패스워드");
        } catch (SQLException ex) {
   // handle any errors
   System.out.println("SQLException: " + ex.getMessage());
   System.out.println("SQLState: " + ex.getSQLState());
   System.out.println("VendorError: " + ex.getErrorCode());
  }


 } 
}
====================================================
 아이디와 패스워드 라고 중간에 한글로 된 부분은 진짜 자신의 아이디와 패스워드를 적어주시기 바랍니다.
 DriverManager.getConnection 메소드는 접근하기 위한 주소와 아이디, 패스워드를 받아 MySQL과 접속시켜줍니다. 만일 웹에서 작동하게 된다면 localhost 대신 자신의 웹주소를 적어야 하겠죠. 그리고 만일 Mysql을 처음 설치할 때 localhost로 안하고 다른 것으로 설정했다면 그 주소로 해야 합니다. 에러가 안 나와야 정상입니다.


 


 이제 쿼리를 날려봅시다.
==============================================
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;


public class jdbcTest {
 public static void main(String[] args) {
  
  try {
   // The newInstance() call is a work around for some
   // broken Java implementations


   Class.forName("com.mysql.jdbc.Driver").newInstance();
  } catch (Exception ex) {
   // handle the error
  }
  
  Connection conn = null;
  try{
   conn =
        DriverManager.getConnection("jdbc:mysql://localhost", "nahanmil","1234");
        } catch (SQLException ex) {
   // handle any errors
   System.out.println("SQLException: " + ex.getMessage());
   System.out.println("SQLState: " + ex.getSQLState());
   System.out.println("VendorError: " + ex.getErrorCode());
  }
  
  Statement stmt = null;
  ResultSet rs = null;
  try{
   stmt = conn.createStatement();
   rs = stmt.executeQuery("SELECT version()");
  
   // or alternatively, if you don't know ahead of time that
   // the query will be a SELECT...
  
   if (stmt.execute("SELECT versoin()")) {
    rs = stmt.getResultSet();
   }
  } catch(Exception ex) {
   // handle the error
  }



 } 
}
================================================================
 쿼리만 날려 봤습니다. SELECT versoin()은 SQL 버전을 출력해 주는 구문입니다. 우리의 결과는 rs에 들어 있습니다.이 자료를 출력하겠습니다. 우선 mytest 데이터베이스에 test라는 테이블을 만들어서 다음과 같이 자료를 넣었습니다. 우선 Database를 만들어 주어야 합니다.
create database mytest;
그 다음 테이블을 만들어 주어야 합니다. 다음과 같이 하면 됩니다.


CREATE TABLE  `mytest`.`test` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(45) character set utf8 NOT NULL,
  `age` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
);


그리고 그 안의 데이터는 다음과 같습니다.
1 김철수 19
2 이영희 25
3 홍길동 43


 insert into 를 이용하는 것은 다 아시겠죠..


================================================
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;
import java.sql.CallableStatement;


public class jdbcTest {
 public static void main(String[] args) {
  
  try {
   // The newInstance() call is a work around for some
   // broken Java implementations


   Class.forName("com.mysql.jdbc.Driver").newInstance();
  } catch (Exception ex) {
   // handle the error
  }
  
  Connection conn = null;
  try{
   conn =
        DriverManager.getConnection("jdbc:mysql://localhost", "nahanmil","1234");
        } catch (SQLException ex) {
   // handle any errors
   System.out.println("SQLException: " + ex.getMessage());
   System.out.println("SQLState: " + ex.getSQLState());
   System.out.println("VendorError: " + ex.getErrorCode());
  }
  
  Statement stmt = null;
  ResultSet rs = null;
  try{
   stmt = conn.createStatement();
   rs = stmt.executeQuery("SELECT * FROM mytest.test");
  
   // or alternatively, if you don't know ahead of time that
   // the query will be a SELECT...
  
   if (stmt.execute("SELECT * FROM mytest.test")) {
    rs = stmt.getResultSet();
   }
  } catch(Exception ex) {
   // handle the error
  }
  
  try{
   while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");        
    int age = rs.getInt("age");
    System.out.println(id + " " + name + " " +age);
   } 
  }catch(Exception ex) {
   // handle the error
  }
  }
 
}
================================================


 다음과 같은 결과가 나와야 합니다.
 
=====================
1 김철수 19
2 이영희 25
3 홍길동 43
====================


 


  MySql5.x 버전을 사용하면 한글이 깨져서 나올 수 있는데, MySQL Server Instance Config Wizard 라는 프로그램(MySQL 설치시 자동설치됩니다.)으로 환경설정을 다시 해주어야 합니다. 기본으로 하다기 Charracter set 을 설정하는 부분이 있는데, 맨 마지막 Manaul로 설정하고 Character set을 EucKR로 설정하세요.
그리고 테이블 삭제하고 다시 만들어서 실험해 보세요..


 여기 까지가 제 강의 입니다. 대부분의 자료는 http://dev.mysql.com/doc/refman/5.0/en/connector-j.htmlhttp://www.javastudy.co.kr/docs/lec_jdbc/index.shtml 에서 읽어보고 작동여부를 점검했습니다. 저기 있는대로 하니까 안되는 것도 있어 좀 고쳐서 했습니다.


 버전마다 차이는 크지 않을 거라고 생각합니다. 감사합니다.

sample.war

 우선 톰캣이 뭔지 알아야 할 것 같습니다. 아파치를 이용하여 PHP를 웹에서 돌리듯이 톰캣을 이용해서 JSP를 서버에서 돌려 웹에 보여주게 해줍니다. (사실 저도 JSP 오늘 시작했기 때문에 자세히는 모르겠습니다.  ) 

 톰캣을 다운 받으실려면 http://tomcat.apache.org/ 에 방문하기 바랍니다. (주소 뒤에 받는 apache가 너무 정겹게 느껴지지 않으십니까. ) 

 제 시스텀은 윈도우즈 XP + 서비스팩 2 입니다. (아마 머 않아서 리눅스 데비안 패키지에서도 톰캣을 설치하지 않을까 생각됩니다. 앞의 글들을 보다시피 윈도으즈에서 적용한 다음에 데비안에서 깔아봤봤습니다. 플랫폼 독립을 매우 좋아하는 저이기에 분명히 리눅스에서도 깔아볼려고 할 것 같군요.) 그리고 톰캣의 버전은 5.5.20 입니다.   톰캣의 최신 버전은  6.0.9-beta 입니다. 그러나 이미 많은 경험을 통헤 너무 높은 버전의 설치는 많은 고생을 동반한다는 것을 깨닫았기 때문에 그 보다 한 단계 낮고 많이 사용하는 5.x 대를 설치했습니다. 

 쉬운 설치를 위핸 Windows Service Installer 버전을 선택했습니다. 이미 많은 경험을 통해 zip 파일 형식의 설치는 설정의 복잡함으로 인해 더 고생이 심하다는 것을 깨닫았습니다.

 설치는 그 다지 복잡하지 않습니다. 다만 + 기호를 누른후 서비스(service)를 누르는게 좋아 보입니다. (많은 사이트에서 그것을 추천했습니다. ) 그리고 이왕이면 공부를 위해 Example 까지 설치하시기 바랍니다. 그 다음 디렉토리를 지정해 주고 admin 계정의 비밀번호를 설정해 줍니다. (비밀번호를 잊지 마시기 바랍니다. ) 그 다음 jre 가 설치된 패스를 요구하는데 자동으로 잡아줍니다. 그 다음의 자동으로 설치해 둡니다. 

 설치 후 아파치에서 많이 보아왔던 깃털모양의 아이콘이 시스템 트레이에 보여주어서 start, stop 을 편하게 조절할 수 있습니다. 

 설치 후 http://localhost:8080/ 접속하면 기본 화면이 뜹니다. (설치할 때 다른 포트로 설정했다면 8080대신 설치할 때 적은 포트번호를 입력해야 합니다. )

 
 이제 다 설치 되었는지 실험해 보아야 하겠죠. 간단한 예제코드를 http://tomcat.apache.org/tomcat-5.5-doc/appdev/sample/sample.war 를 받아서 Tomcat설치한 디렉토리\webapps 디렉토리 밑에 압축을 해제해 놓습니다. (war 라는 확장자를 처음보는데, 알집으로 풀리내요. 일반적인 압축프로그램으로 풀리리라 생각됩니다. ) (파일이 없어졌다면 맨 위의 sample.war 파일을 받으시기 바랍니다.)

 그리고 나서 http://localhost:8080/sample 를 열어보면 예제파일이 열립니다. 이제 jsp 배울 준비는 끝난 것 같군요.  

jsp 는 http://www.jabook.org/ 를 통해서 공부 할려고 합니다. 그런데 버전이 달라 애를 먹이군요.


덧 글 : 아직 완벽하지 않습니다. 이 글을 계속 고쳐지고 있습니다.
최종 수정일 06년 02월 23일 오후 17시 경. 이젠 하다하다 별 것을 다하게 됩니다. 이미 APM세팅 때문에 많은 노력을 기울렸는데 이젠 톰캣에 도전하려고 합니다. 솔직히 오늘 갑자기 루씬을 설치하고 싶어젔는데 이것 설치하려면 톰캣이 있어야 한다는 글만 읽고 아침부터 설치에 도전하고 있습니다. 다음 주면 개강인데, 개강전까지 못하면 학업에 지장 줄 것 같군요.
확실히 윈도우즈 보다 편하기 할 수 있다. 크게 어렵지 않다. 난 testing버전(현재 etch) 를 사용하고 있다.

컴파일해서 사용해야 모든 배포판에서 일정하게 설치되겠지만 데비안을 사용하는 있는데 굳이 그런 필요를 못 느꼈다. 솔직히 그냥 컴파일하여 설치하기는 너무 복잡해 보인다. 각종 옵션을 걷어주면서 configure 한 다음 make 해야 할 것이다.

이것 하면서 느낀점 하나. 윈도우즈 xp 에서 할 때는 리눅스 자료가 많아 보였는데, 지금 자료를 찾아보니 리눅스용 자료는 얼마 없다는 점이다. 내가 컴파일을 하지 않은 이유이기도 하다.

http://debianusers.org/DebianWiki/wiki.php/APM 을 읽어가면서 했는데 큰 문제 없었다. 다만 거기에 있는 자료는 조금 오래된 버전이 나오고 있다. 그래서 php4 라 되어 있는 부분을 php5 로 생각해야 한다. 그래서 php4-common 대신 php5-common 을 설치해야 한다. 물론 stable 버전의 경우는 또 다를 것이다. http://www.debian.org/distrib/packages 를 통해서 패키지를 검색할 수 있다. 여길 통해서 어느 버전까지 패키지를 이용할 수 있는지 알 수 있다. mysql 관련 패키지는 따로 뒤에 버전을 안 붙여주어도 최신 버전을 받을 수 있는 것 같다.

내 경우
apache2 apache2.2-common libapache2-mod-php5 php5 php5-common php5-gd php5-mysql libdbd-mysql-perl libdbi-perl mysql-client mysql-server mysql-common
를 설치했다. 주의 점은 php5-mysql 을 맨 뒤에 설치해야 하는 것 같다. 이 것은 php5 와 mysql 을 따로 설정안해주어도 자동으로 연동시켜준다. 윈도우즈 처럼 php.ini 를 수정하는 일은 필요없다. 그게 조금 미심쩍다.
만일 mysql 과 php 가 잘 연동되지 않는다면
dpkg-reconfigure php5-mysql
를 해보기 바란다. 순서가 조금 잘 못 되었있다면 설정이 안되는 것 같은데 이것 하니 잘 작동한다.