Module Web Arch02
DBCP
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ๊ธฐ ์ํด์ DB์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ Connection์ ํตํด ์ฐ๊ฒฐ์ ํ ๊ฒ์ด๋ค.
ํ์ง๋ง ํ๋์ DB๊ฐ ์๋ ๋ค๋ฅธ DB๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๋ ๋ค์ ๊ฐ์ ์ค์ ํ๋ ๋นํจ์จ์ ์ธ ์์ ๊ณผ ์ฌ์ฉ์๊ฐ DB์ ์ ๊ทผํ๊ฒ ๋ ๋ ๋ง๋ค Connection ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด ๋๊ธฐ์๊ฐ๋ง ๊ธธ์ด์ง๊ณ ์๋ฒ์ ๋ถํ๊ฐ ๊ฑธ๋ฆด ๊ฒ์ด๋ค.
์ด๊ฒ์ ํด์ํ๊ธฐ ์ํด ์ผ์ ํ ์์ Connection์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ฉด ์๋ฒ์ ๋ถ๋ด์ ์ค์ผ ์ ์๊ณ ์ฌ์ฉ์์ ๋๊ธฐ์๊ฐ์ ์ค์ด๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๊ฐ์ ธ ์ ์ฐํจ์ ๊ฐ์ง๊ฒ ๋๋ค.
DBCP : Data Base Connection Poll ์ปค๋ฅ์ ํ์ ์ง์ ์์ฑํ์ฌ ์ฌ์ฉํ ์ ์์ง๋ง ๋นํจ์จ์ ์ด๋ฉฐ ๊ฐ DB์์ ์ ๊ณตํ๋ DBCP๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
import java.sql.Connection;
import oracle.jdbc.pool.OracleConnectionCacheImpl;
/*
* Oracle API์์ ์ ๊ณตํ๋ connectionPool๊ธฐ๋ฅ ์ด์ฉ ๊ตฌํ
* OracleConnectionCacheImpl.class์ ์ด์ฉํ์ฌ ConnectionPool ๊ตฌํ
* << Singleton pattern ์ด์ฉ >>
*/
public class OracleConnectionPool {
/// Field
//==>singleTon pattern ๊ท์น 1 : ์์ ์ ๊ฐ์ฒด๋ฅผ static ์ผ๋ก ์ ์ธ
private static OracleConnectionPool instance;
private OracleConnectionCacheImpl occi;
private String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
private String user = "scott";
private String password = "tiger";
private int minConn = 5; //๋ณด์ ํ connnection์ ์ต์์
private int maxConn = 10; //๋ณด์ ํ connnection์ ์ต๋์
/// Constructor
//==>singleTon pattern ๊ท์น 2 : ์์ฑ์๋ private ์ ์ธ ::์ธ๋ถ์์ ์์ฑ๋ถ๊ฐ
private OracleConnectionPool() {
try {
occi = new OracleConnectionCacheImpl();
occi.setURL(url);
occi.setUser(user);
occi.setPassword(password);
occi.setMinLimit(minConn);
occi.setMaxLimit(maxConn);
} catch(Exception e) { e.printStackTrace(); }
}
/// Method For only one instance ์์ฑ
//==>singleTon pattern ๊ท์น 3 : ์์ ์ ์ธ์คํด์ค return ํ๋ static metod
public static synchronized OracleConnectionPool getInstance() {
if(instance==null) instance = new OracleConnectionPool();
return instance;
}
// occi๊ฐ ๊ฐ์ง๊ณ ์๋ con์ ๋๊ธด๋ค(5 ~ 10)
public synchronized Connection getConnection() {
Connection conn = null;
try{ conn = occi.getConnection(); }
catch(Exception e) { e.printStackTrace(); }
return conn;
}
// occi๊ฐ ๊ฐ์ง๊ณ ์๋ con์ ๋ซ๋๋ค.(5 ~ 10)
public synchronized void close() {
try { occi.close(); }
catch(Exception e) { e.printStackTrace(); }
}
//////////////////////////// ์๋์ ๋ method๋ test์ฉ์ด๋ค. //////////////////
//๋ง๋ค์ด์ง ๋ชจ๋ connection์
public int getCacheSize() { return occi.getCacheSize(); }
//์ค์ ๋ก Client์์ ๋น๋ ค๊ฐ(์ฌ์ฉ์ค์ธ) Connection ์
public int getActiveSize() { return occi.getActiveSize(); }
}//end of class
์ค๋ผํด์์ ์ ๊ณตํด์ฃผ๋ DBCP์ด๋ค.
์๋ฒ์ ๋ํ ์ ๋ณด์ Connection์ ์ต์์ ์ต๋๊ฐ์ ์ง์ ํด ์ค์ผ๋ก์จ ์ ์ฐํด ์ง ์ ์๋ค.
๊ฐ์ ํด๋์ ๋ฃ์ด์ ์ฌ์ฉํ๋ฉฐ ์๋์ ๊ฐ์ด Dao์ ๋ฃ์ด ์ค๋ค.
//Class.forName("oracle.jdbc.driver.OracleDriver");
//con = DriverManager.getConnection(dburl, dbuser, dbpwd);
con = OracleConnectionPool.getInstance().getConnection();
Leave a comment