๐ ์๋ฐ ์น์ ๋ค๋ฃจ๋ ๊ธฐ์ ์ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋จ๊ณผ ๋์์ ์ฐ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐ ํด๋๋ค. ํ์ํ ๋๋ง๋ค ๋ฏธ๋ฆฌ ์ฐ๊ฒฐํด๋์ ์ํ๋ฅผ ์ด์ฉํด ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์์ ์ ํ ์ ์๋ค. ์์ฝํ์๋ฉด ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ ์ํจ ์ํ๋ฅผ ์ ์งํ๋ ๊ธฐ์ ์ ์ปค๋ฅ์ ํ์ด๋ผ ๋ถ๋ฅธ๋ค.
JDBC์ ๋ฌธ์ ์ ์ ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค.
Connection Pool๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ฉด ๋ฏธ๋ฆฌ ์ฐ๊ฒฐ๋ ์ํ๋ฅผ ์ ์งํ๋ฏ๋ก ๋น ๋ฅด๊ฒ ์์
ํ ์ ์๋ค.
ํฐ์บฃ ์ปจํ ์ด๋ ์คํ
Connection pool ๊ฐ์ฒด ์์ฑ
์ปค๋ฅ์ ๊ฐ์ฒด <-> DBMS ์ฐ๊ฒฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ ์์ ์, ConnectionPool์ด ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ํธ์ถ
ํฐ์บฃ์ ์์ฒด์ ์ผ๋ก ConnectionPool์ ์ ๊ณตํ๋ค.
Java Naming and Directory Interface
ํ์ํ ์์์ key-value๋ก ์ ์ฅํด์ ํ์ํ ๋ key๋ฅผ ์ด์ฉํด value๋ฅผ ์ป๋ ๋ฐฉ๋ฒ.
์ฆ ๋ฏธ๋ฆฌ ์ ๊ทผํ ์์์ ํค๋ฅผ ์ง์ ํ ๋ค์, ์ฑ์ด ์คํ ์ค์ผ ๋ ํด๋น ํค๋ฅผ ์ด์ฉํด ์์์ ์ ๊ทผํด์ ์์ ํ๋ ๊ฒ์ด๋ค.
์ค์ ๋ก ConnectionPool๊ฐ์ฒด๋ฅผ ๊ตฌํํ ๋ javaSE๊ฐ ์ ๊ณตํ๋ javax.sql.DataSourceํด๋์ค๋ฅผ ์ด์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ํฐ์บฃ์ด ๋ง๋ค์ด๋์ ConnectionPool๊ฐ์ฒด์ ์ ๊ทผํ ๋๋ JNDI๋ฅผ ์ด์ฉํ๋ค.
JNDI ์ฌ์ฉ ์
jarํ์ผ ๋ค์ด ๋ฐ๊ณ ์์ถ ํผ๋ค.
ํ๋ก์ ํธ ๋น๋ํจ์ค์ jarํ์ผ์ ์ถ๊ฐํ๋ค
์ฐธ๊ณ : ์ด์ ๊ธ
์ด์ ๊ธ ์์ ์ฝ๊ฐ ์ฝ๋๋ฅผ ์์ ํ๋ค.
package pro07.sec01.ex01;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class MemberDAO {
/* JDBC ์ค์
* private static final String DRIVER = "com.mysql.cj.jdbc.Driver"; //DRIVER
* NAME private static final String URL =
* "jdbc:mysql://127.0.0.1:3306/servletex?serverTimezone=Asia/Seoul"; //JDBC
* URL/์คํค๋ง private static final String USER = "servlet"; //DB ID private static
* final String PWD = "1234"; //DB PW
*/
private Connection con;
private PreparedStatement pstmt;
//DataSource์ค์
private DataSource ds;
public MemberDAO() {
try {
//JNDI์ ์ ๊ทผํ๊ธฐ ์ํด ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ฅผ ์ง์
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");
//context.xml์ ์ค์ ํ name๊ฐ์ ์ด์ฉํด ํฐ์บฃ์ด ๋ฏธ๋ฆฌ ์ฐ๊ฒฐํ DataSource๋ฅผ ๋ฐ์์จ๋ค.
ds = (DataSource) envContext.lookup("jdbc/mysql");
} catch (Exception e) {
e.printStackTrace();
}
} //์์ฑ์
List<MemberVO> listMembers() {
List<MemberVO> list = new ArrayList<>();
try {
// connectDB(); //JDBC์ค์
//DataSource๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ค.
con = ds.getConnection();
String sql = "select * from t_member";
System.out.println("Query : " + sql);
pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
/*
* select๋ฌธ์ ๋ ๋ ค์ ๋ฐ์์ฌ ์นผ๋ผ๋ค.
* getString(String columnLabel)์ผ๋ก ๋ฐ์์จ๋ค.
* */
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String email = rs.getString("email");
Date regdate = rs.getDate("regdate");
/*
* ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ
* MemberVO๊ฐ์ฒด์ ๋ด๋๋ค.
* */
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPwd(pwd);
vo.setName(name);
vo.setEmail(email);
vo.setRegdate(regdate);
list.add(vo);
}
//์ฐ๊ฒฐํ๋ ๋ฐ๋์์๋ก ๋ซ๋๋ค.
rs.close();
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
} //listMembers()
/* JDBC์ค์
* private void connectDB() { try { Class.forName("com.mysql.cj.jdbc.Driver");
* System.out.println("DRIVER LOADING....."); con =
* DriverManager.getConnection(URL, USER, PWD);
* System.out.println("Connection ์์ฑ");
*
* } catch (Exception e) { e.printStackTrace(); } }
*/
}
๊ฒฐ๊ณผ๋ ๊ฐ๋ค. ๋ค๋ง ์ด๋ฒ์ ์ปค๋ฅ์ ํ์ ์ด์ฉํด DB์ ์ฐ๋ํ๋ค๋ ์ ์ด ๋ค๋ฅด๋ค.