JDBC와 DBCP(DataBase Connection Pool)

2023. 9. 15. 20:45
728x90

1. JDBC (Java DataBase Connectivity) 

: 데이터베이스와 연결하여 데이터를 송수신할 수 있도록 하는 인터페이스

다양한 종류의 관계형 데이터베이스에 접속하여 SQL문을 수행처리할 때 표준 SQL 인터페이스를 제공해 주는 API

- java.sql 패키지에 위치.

 

>> 단점이 있다.

- Database Pooling 방식을 사용하지 않고 DB에서 정보를 가져올 때마다 매번 Connection 객체를 생성하고 반납(close) 하는 형식임. > 이 방식은 비효율적이다.

>> 서버의 과부하 및 속도저하의 문제가 발생한다.

 

그러므로, 적당한 수의 커넥션 객체를 미리 만들어 놓고 요청에 따라 하나씩 꺼내쓰며 재사용하는 Pooling 기법을 사용한다면 문제를 해결할 수 있다.

 

2. DBCP (DataBase Connection Pool)

: 데이터베이스 커넥션을 미리 만들어서 풀(pool)에 저장해 두고 있다가, 요청이 들어올 때 가져다 쓰고 풀에 다시 반환하는 기능.

- 속도의 향상.

- 한정된 커넥션을 계속해서 재사용하기 때문에 동시 접속자수가 갑자기 늘어나도 웹어플리케이션이 쉽게 다운되지 않는 장점.

(커넥션 풀에 있는 커넥션 수만큼만 접속되고 나머지는 대기 상태가 된다.)

 

1) 어플리케이션이 DB 접속 요청 시 톰캣(WAS)은 Thread를 할당하여 커넥션 요청을 한다.
2) 해당 Thread는 사용가능한 커넥션을 획득하여 어플리케이션에 제공하고, 커넥션 사용 후에는 반납한다. 
3) Thread 역시 사용 후 톰캣의 스레드풀에 반환됨.

** 코드 구현시 JDNI(Java Naming and Directory Interface)를 이용한다.

: 객체에 이름을 붙이고 명부에 등록한 뒤 검색하여 사용할 수 있도록 해주는 API

 

 

> DBCP 사용 설정 방식 

1. 톰캣의 Server의 context.xml에 설정 >> 모든 프로젝트에 동일하게 적용됨.

2. 각 프로젝트의 META-INF 폴더에 context.xml을 작성하여 설정 >> 각각의 프로젝트에 맞게 적용 가능.

 

나는 2번 방식을 택했다.

이렇게 META-INF 폴더 안에 context.xml 파일을 넣어주었다. 

<?xml version="1.0" encoding="UTF-8"?>

<Context>
	<Resource
		auth = "Container"
		driverClassName = "oracle.jdbc.driver.OracleDriver"
		url = "jdbc:oracle:thin:@localhost:1521:xe"
		username = "hr"
		password = "hr"
		name = "jdbc_oracle"
		type = "javax.sql.DataSource"
		maxTotal = "10"
		maxWaitMillis = "3000"	
	/>
</Context>

<!-- 
	maxTotal : 커넥션 풀이 제공할 수 있는 커넥션 갯수
	maxWaitMillis : 최대 대기시간 설정. 0보다 작은값으로 설정하면 무한대기
 -->

그리고 getConnection() 메소드를 이렇게 구현할 수 있다.

public Connection getConnection() {
	Context ctx = null;
    DataSource ds = null;
    Connection conn = null;
    
    try {
    	ctx = new InitialContext();
        ds = (DataSource) ctx.lookup ("java:comp/env/jdbc_oracle");
        conn = ds.getConnection();
    } catch (Exception e) {
    	e.printStackTrace();
    }
}

 

728x90

'Programming > Database' 카테고리의 다른 글

Transaction  (0) 2024.02.02
JDBC  (1) 2023.12.20
정규화 Normalization와 조인 Join  (1) 2023.12.19
[연습문제 모음]  (0) 2023.12.18
Database 기초  (0) 2023.12.18

BELATED ARTICLES

more