2. connection pool
2. connection pool
Connection Pool(23. 12. 01)
데이터 베이스에 접근하기 위한 패턴
- 미리 Connection 객체를 생성하여 Pool 또는 Container에 배치
- • Application에서 Connection 객체가 필요할 때, 새로운 객체를 생성하는 대신 Pool에서 해당 객체를 가져와 사용하고 재사용을 위해서 사용된 객체는 Pool에 반납합니다.
장점
- 데이터베이스에 Connection을 생성할때 소요되는 시간 및 자원을 줄일 수 있습니다.
- Connection 수를 제한 할 수 있어 과다한 접속으로 인한 서버 자원 고갈을 예방합니다.
- 메모리 영역에서 Connection을 관리하기 때문에 클라이언트가 데이터베이스 작업을 빠르게 진행할 수 있습니다.
Connection Pool 구현?
*1. DataBase Driver를 사용하여 DataBase 연결
- 데이터 읽기/쓰기 위한 TCP/Socket Open
- Socket을 통해서 데이터 읽기/쓰기
- DataBase 연결 닫기
- TCP/Socket Close*
이전까지는 close()
하면 Connection을 Close 했지만 이젠 자신을 반환(pool에) 하는 방식으로 바꾼다.
1
connection.close() -> PoolableConnection.close()
Apache Commons DBCP
DBCP2
는 Apache Commons Pool 기반으로 한다.Maven
1 2 3 4 5
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.11.0</version> </dependency>
최적화
WAS == Tomcat 은 Thread Pool을 사용
- Default = 200개
- 즉 tomcat 기본설정을 사용한다면 동시에 최대 200개까지 처리할 수 있음
- DBCP parameter를 WAS의 Thread Pool Size로 고정하여 최적화.
1 2 3 4 5 6 7 8 9 10 11 12
BasicDataSource basicDataSource = new BasicDataSource(); basicDataSource.setUrl("jdbc:mysql://133.186.241.167:3306/nhn_academy_100"); basicDataSource.setUsername("nhn_academy_100"); basicDataSource.setPassword("1jaOTakgkS1$dWl2"); basicDataSource.setInitialSize(200); basicDataSource.setMaxTotal(200); basicDataSource.setMaxIdle(200); basicDataSource.setMinIdle(200); basicDataSource.setMaxWait(Duration.ofSeconds(2)); basicDataSource.setValidationQuery("select 1"); basicDataSource.setTestOnBorrow(true);
DataSource
- 기존의 DriverManager를 통해 DB Connection을 얻는 것보다 더 좋은 기법
- 서버에서 관리하기에 DB 변경이 수월하다.
- Connection, Statement 객체를 pooling 할 수 있다.
apache META-INF 의
context.xml
에 다음과 같은 코드 추가1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?xml version="1.0" encoding="UTF-8"?> <Context> <!-- Default set of monitored resources. If one of these changes, the --> <!-- web application will be reloaded. --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxTotal="5" maxIdle="5" maxWaitMillis="10000" username="nhn_academy_0" password="1234" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/nhn_academy_0" closeMethod="close" /> </Context>
context.xml
없으면 프로젝트 구조 가서 만들자.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.