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();

DataSource


Categories:

Updated:

Leave a comment