2015년 8월 27일 목요일

신입SW인력을 위한 실전 JSP 동영상과정 - 제17~20강 데이터베이스, 컨텍션 풀

이 게시물은
http://www.wiz.center/204
http://www.wiz.center/205
http://www.wiz.center/206
http://www.wiz.center/207

의 동영상 강의를 시청하고 작성한 글입니다.
새로 시작하는 경우라면 위 링크의 동영상 강의를
들어보세요


1. JDBC - mysql
    JAVA API로 SQL문을 실행하여 데이터를 관리하기 위한 목적으로 제작됨
     DB 연결을 위한 별도 작업 없이 해당 라이브러리를 추가함으로서
     JAVA에서 쿼리문을 실행 가능하게끔 함.
   강의에서는 Oracel JDBC를 설명하나 여기서는 좀 가볍고 테스트 쉬운
     Mysql로 작업을 진행하도록 함.
   JDBC jar 드라이버는 아래 링크를 참고
http://ggoreb.tistory.com/121
http://hyeonstorage.tistory.com/112
 

2. 설정 방법
  1) mysql-connector-java-x.x.xx.jar (버전마다 상이함) 다운로드
      다운로드는 상단 JDBC 소계 링크에서 확인하여 구한다.

  2) library 등록
      그림과 같이 라이브러리를 WEB-INF/lib 밑에 드래그 해서
      등록한다.


  3) jsp 파일에서 db 연결 설정
      아래 그림을 참고한다.
        Driver가 정상적으로 로드되고, 실행순서가 일치하다면 쿼리가
        정상적으로 진행되고 결과를 ResultSet으로 받아 낼 수 있다.
   

  4) 사용
     resultSet 객체가 제공하는 함수를 이용해서 select 문에서
      받아낸 인자를 뽑아낼 수 있다.
     해당 클래스 관련 정보는 아래를 참고
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

여긴 한글 설명
http://noritersand.tistory.com/96

  5) 예제
------------------------------------
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%!
Connection connection;
Statement statement;
ResultSet resultSet;

// String driver = "oracle.jdbc.driver.OracleDriver";
// String url = "jdbc:oracle:thin:@localhost:1521:xe";
// String uid = "root";
// String upw = "tiger";
// String query = "select * from member";

String driver =  "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3336/jspex";
String uid = "root";
String upw = "";
String query = "select * from jspex.member";

//table이 없는 경우 아래 쿼리로 table 생성 및 자료를 입력한다.
// create table member (
// id varchar(20) primary key,
// pw varchar(20),
// name varchar(20),
// phone varchar(20));

//insert into member(id, pw,name,phone) values('abc','123','김수필','010-2222-3333');
// *insert를 4번 정도 입력하세요 다른 정보로

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>start</h1>

<%
out.println(driver);
out.println(url);
out.println(uid);
out.println(upw);
try{

Class.forName(driver); //oracle.jdbc.driver.OracleDriver
connection = DriverManager.getConnection(url, uid, upw); //jdbc:oracle:thin:@localhost:1521:xe
statement = connection.createStatement();
resultSet = statement.executeQuery(query); //select * from member

while(resultSet.next()){
String id = resultSet.getString("id");
String pw = resultSet.getString("pw");
String name = resultSet.getString("name");
String phone = resultSet.getString("phone");

out.println("id : " + id + ", pass : " + pw + ", name : " + name + ", phone : " + phone + "<br />");
}

} catch(Exception e) {
e.printStackTrace();
} finally {
try{
if(resultSet != null) resultSet.close();
if(statement != null) statement.close();
if(connection != null) connection.close();
} catch(Exception e){}
}
%>

</body>
</html>
-----------------------------------
결과 :


3. 컨넥션 풀이란?
    1항목 JDBC를 사용할 경우 1개의 트랜젝션에
      여러 쿼리를 써야 할 경우 한번의 쿼리 실행시마다 db와 연결을
      요청하고 해제하는 작업이 필요하다
    연결에 대한 증명 정보를 서버에 저장하면 트랜젝션 시작~끝내
      1번의 연결을 유지할 수 있는 이점이 있어서 이걸 쓴다.
    그외에 따로 모듈을 빼서 연결하거나 하는 등의 방식도 있지만
     여기서는 컨넥션풀만 다룬다.


4. 설정 방법
  1) library 추가
     먼저 eclipse 에 tomcat-dbcp가 있는지 확인한다. 없는 경우
      설치된 tomcat/lib 폴더밑에 해당 jar 파일을 복사해서 lib밑에
      넣어주면 된다.
     본인 같은 경우 tomcat을 eclipse 상에 연동했기 때문에
      해당 폴더 밑 lib 의 jar 파일들이 다 로드 되어 있는 상태임
     만약에 위와 같이 library가 없는 또는 누락된 경우 tomcat/lib
       폴더에서 해당 tomcat-dbcp.jar 파일을 찾아서
       lib폴더 밑에 붙여준다.


  2) server- context.xml 의 Resource 부분 수정




  3) jsp에서 소스 변경하기
      상단 소스 부분에서 변경하고자 한다면
    (1) import Statement 를 변경
<%@page import="java.sql.Statement"%>
        를
<%@page import="java.sql.PreparedStatement"%>
        로 변경

    (2) statement 객체생성시 클래스 변경
      statement -> PrepareStatement

    (3) statement 객체에 connection 함수 변경
        기존
// statement = connection.createStatement();
        를
statement = connection.prepareStatement(query);
        로 변경

  3) 결과는 동일하게 출력된다. (그러면 성공)
      그러나 강제로 소스로 insert 를 다중으로 진행해야 하는 경우라면
      select 로 확인 후 insert를 하거나 update를 타야되는 경우라면
      트랜젝션이 2개 이상 쿼리로 구성되는 경우
     뿐만 아니라 사용자가 많으면 많을수록 웹서버에서
      db정보를 관리하는게 컴파일된 jsp servlet 까지 찾아서
      db연결하는것보다 낳다고 본다

      결론 : 우리 회사가 어느 부분으로 구현되어 있던지
               합당한 이유는 있으니 사용할 수 있도록 준비.

댓글 없음:

댓글 쓰기