[JDBC] 커넥션 풀을 통한 DB 직접 연계 방식

2022. 4. 13.공부/JDBC

728x90

직접 연계 방식 중 DB Connection 방식은 수신 시스템의 WAS에서 송신 시스템 DB로 연결하는 커넥션 풀(Connection Pool)을 생성하고 연계 프로그램에서 해당 DB의 커넥션 풀명을 이용하여 연결하는 방식이다. 커넥션 풀은 데이터베이스 메모리 내에 있는 데이터베이스 커넥션들로 구성된 하나의 캐시인데, 데이터에 대한 요청이 발생하면 재사용되는 것으로 데이터베이스의 수행 능력을 향상시킨다. 커넥션 풀을 생성하는 방법은 다음과 같다.

 

자바 프로젝트의 Servers 폴더를 열고 context.xml파일을 수정

 

// context.xml 내부
   
<Resource 
auth="Container"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jdbcprac2?serverTimezone=UTC"
username = "root"
password = "1111"
name = "jdbc/mysql"
type = "javax.sql.DataSource"
maxActive = "300"
maxWait = "1000" 
/>

 

위와 같은 코드를 파일에 복사-붙여넣기해주고 DAO 클래스 내부를 수정하면 커넥션 풀을 사용할 수 있다.

 

// DAO 클래스 내부

private DataSource ds = null; 
// 커넥션 풀 사용을 위한 객체 DataSource 생성 (private로 처리하여 은닉)
    
public UserDAO() { // java 생성자 
	try {
    	Context ct = new InitialContext();
        ds = (DataSource)ct.lookup("java:comp/env/jdbc/mysql");
	} catch (Exception e) {
	e.printStackTrace();
	}
 }

 

 

이렇게 생성자를 고쳐주면 jsp파일에서 DB 연동 시 new 키워드로 DAO 클래스의 객체를 생성할 시 커넥션 풀을 만들어 DB와 직접 연계될 수 있다. 그러나 이 방법은 다수의 jsp파일에서 new 키워드로 DAO 호출 시마다 힙에 같은 기능을 가진 새로운 객체를 여러개 생성하여 메모리가 낭비되기 때문에 DAO 객체 내에 따로 getInstance 메소드를 만들어 jsp파일에서 getInstance를 통해 커넥션 풀을 생성할 수 있게 해야 한다.

 

public static UserDAO getInstance() { // static으로 정적 힙에 객체 생성 
if(dao == null) {
dao = new UserDAO();
}
return dao;
}

 

jsp파일에서 만들어둔 UserDAO의 getInstance를 실행하면 static에 만들어진 객체의 주소값이 jsp에 전달된다. 이렇게 힙에 dao 객체를 하나만 생성하고 스택에서 호출할 때마다 하나의 객체의 주소값만 받아서 사용하는 식으로 사용하게 되면 힙의 메모리 낭비를 방지할 수 있다.

 

// dao를 호출하여 DB 연계가 필요한 jsp 파일 내부
userDAO dao = userDAO.getInstance(); // 싱글턴에 의해 static 영역 변수 주소만 받아옴

 

 

 

'공부 > JDBC' 카테고리의 다른 글

[JDBC] JAVA에서 쿼리문 날리는 방법  (0) 2022.04.01