Connection pool์ด๋? Connection ๊ฐ์ฒด๋ฅผ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋๋ง๋ค ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋น์ค๋๊ธฐ ์ ์ ์น์๋ฒ์์ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ ์ค๋นํ ๋ค์, ํ์ํ ๋ ์ค๋น๋ Connection์ ๊ฐ์ ธ๋ค ์ฌ์ฉํจ์ผ๋ก์จ JDBC ํ๋ก๊ทธ๋๋ฐ์ ๋ฌธ์ ์ ๋ค์ ๊ฐ์ ํ ๊ธฐ์ ์ด๋ค. ์๋ฒ๊ฐ ์์ ๋ ๋ Connection๊ฐ์ฒด๋ ์๋ฒ์์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ค๋นํ ์ ์๊ณ , ์ด๋ ๊ฒ ์ค๋น๋ Connection ๊ฐ์ฒด๋ค์ ๊ฐ์ง๊ณ ์๋ ๋ฆฌ์์ค๋ฅผ Connection pool ์ด๋ผ๊ณ ํ๋ค.
DBCP๋? DataBase Connection Pool์ ์ฝ์๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด๋์ธ ์น ์ดํ๋ฆฌ์ผ์ด์ ์์, ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ Connection์ด ์์ฑ๋๋ค๋ฉด ์ ๋ง์ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ํ์ ๋ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ์ด๋ฌํ ์ํฉ์ ์๋ฐฉํ๊ธฐ ์ํด ๋ฏธ๋ฆฌ ์ผ์ ๊ฐฏ์์ Connection์ ๋ง๋ค์ด Pool์ ์ ์ฅ์ ํ๊ณ , ์ฌ์ฉ์์ ์์ฒญ์ด ๋ฐ์ํ๋ฉด Connection์ ์ ๊ณตํ๊ณ ์ฌ์ฉ์์์ ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋๋ค๋ฉด Pool์ ๋ค์ ๋ฐํํ์ฌ ๋ณด๊ดํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
Connection pool์ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ๋ "์๋ ํฅ์"๊ณผ "์์ ๊ณต์ "์ ์๋ค.
Connectionํด๋์ค๊ฐ ๊ฐ์ฒดํ ๋ ๋, ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ํด๋์ค๋ค๋ณด๋ค ๋ค์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๋ง์ฝ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๊ฒฉ์ง์ ์กด์ฌํ๋ค๋ฉด, ๋คํธ์ํฌ ์ํฉ์ ๋ฐ๋ผ ๋ ์ง์ฐ์ด ๋ ์๋ ์๋ค. ๋ํ, ์ ํ๋ฆฌ์ผ์ด์
์ด ๋น๋ฒํ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์ ์์ฑํ๋ค๋ฉด, ์ด๋ฌํ ์๊ฐ์ ์ธ ์ค๋ฒํค๋๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๋๋ฆฌ๊ฒ ๋ง๋ ๋ค. ์ด ๊ฒฝ์ฐ, ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋ ๋ ์ผ์ ์์ Connection์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ณ , Connection Pool์ ํตํด ์ฌ์ฌ์ฉ ํ๋ค๋ฉด ์๋นํ ์๋ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค.
JNDI๋? Java Naming and Directory Interface์ ์ฝ์๋ก ๋๋ ํฐ๋ฆฌ ์๋น์ค์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ๋ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ๊ฒฌ(discover)ํ๊ณ ์ฐธ๊ณ (lookup) ํ๊ธฐ ์ํ ์๋ฐ API๋ค.
ํ๋ก์ ํธ์ WebContent\META-INF ํด๋์ context.xml ํ์ผ์ ์์ฑํ๋ค.
<Context>
<Resource name="jdbc_maria" auth="Container" type="javax.sql.DataSource"
driverClassName="org.mariadb.jdbc.Driver" loginTimeout="10" maxWait="5000"
username="root" password="๋น๋ฐ๋ฒํธ" testOnBorrow="true"
maxActive="500" maxIdle="100"
url="jdbc:mariadb://localhost:3306/table์ด๋ฆ" />
</Context>
์ด๋ ๊ฒ context.xml๋ฅผ ๋ฐ๋ก ์์ฑํ๋ฉด, ์ ๋ฒ ํฌ์คํ ์ฒ๋ผ db์ฐ๊ฒฐํ๋ ์ฝ๋๋ ์์ฑํ์ง ์์๋ ๋๋ค. META-INF ํด๋๋ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ context.xml์ ์ด๋ค๋ฉด ๊ฐ์ธ์ ๋ณด๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ์ง ์์ ๋ณด์์ ์ ๋ฆฌ ํ๋ค.
package pack5db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class DbTest1 {
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
public DbTest1() {
try {
Class.forName("org.mariadb.jdbc.Driver");
} catch (Exception e) {
System.out.println("๋ก๋ฉ ์คํจ :" +e);
System.exit(0);
}
try {
conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/test","root","seoho123");
} catch (Exception e) {
System.out.println("์ฐ๊ฒฐ ์คํจ : "+e);
System.exit(0);
}
// import๋ฌธ ์๋ต
public class ConnPooling {
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
private DataSource ds;
public ConnPooling() {
try {
Context context = new InitialContext();
ds = (DataSource)context.lookup("java:comp/env/jdbc_maria");
} catch (Exception e) {
System.out.println("db ์ฐ๊ฒฐ ์คํจ : "+e.getMessage());
}
}
java:comp/env๋ ๊ณ ์ ์ผ๋ก ์ฐ๊ณ ๋ค์ ์ด jdbc_maria๋ context.xml์์ name์ผ๋ก ์ด ๊ฒ์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค. JDBC์ ๋นํด ๊ฐ์ธ์ ๋ณด๋ฅผ ์ธ๋ถ์ ๋ ธ์ถ์ํค์ง ์๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ ๋ฆฌํ๋ค.
์์ฑ ์ด๋ฆ | ์ค๋ช |
---|---|
initialSize | BasicDataSourceํด๋์ค ์์ฑํ ์ต์ด๋ก getConnection() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ปค๋ฅ์ ํ์ ์ฑ์ ๋ฃ์ ์ปค๋ฅ์ ๊ฐ์ |
maxActive | ๋์์ ์ฌ์ฉํ ์ ์๋ ์ต๋ ์ปค๋ฅ์ ๊ฐ์ (๊ธฐ๋ณธ ๊ฐ : 8) |
maxldle | ์ปค๋ฅ์ ํ์ ๋ฐ๋ฉํ ๋ ์ต๋๋ก ์ ์ง๋ ์ ์๋ ์ปค๋ฅ์ ๊ฐ์ (๊ธฐ๋ณธ ๊ฐ : 8) |
minIdle | ์ต์ํ์ผ๋ก ์ ์งํ ์ปค๋ฅ์ ๊ฐ์ (๊ธฐ๋ณธ ๊ฐ : 0) |
์ด๋ฏธ์ง ์ถ์ฒ : https://linked2ev.github.io/spring/2019/08/14/Spring-3-%EC%BB%A4%EB%84%A5%EC%85%98-%ED%92%80%EC%9D%B4%EB%9E%80/
dbcp : https://zzang9ha.tistory.com/376