모든지 기록하자!

Connection Pool 이란? 본문

JSP, Servlet

Connection Pool 이란?

홍크 2021. 6. 18. 01:25
728x90

웹서버는 DB에 Access하기위해 드라이버 로드를 하고 그후에 Connection 객체를 얻는다.

쿼리 질의문을 통해서 DB와 통신을한다. PreparedStatement 객체가 그 역할을 해준다.

작업이 끝난 후 에는 자원을 효율적으로 사용하기 위해 DB Connection 을 종료한다.

웹서버는 데이터를 받아서 가공한 후에 브라우저로 response를 해준다.

 

규모가 큰 프로젝트에는 많은 질의 응답으로 위와같은 과정을 반복하는 횟수가 높아진다. 이런 부분이 프로세스에 부하가 걸릴만한 작업 일수도 있다.

그렇기 때문에 Connection Pool에 미리 Connection을 만들어 놓고 웹서버가 DB에 접속이 필요할 때 마다 사용하는 것이다.

 

Connection Pool은 우리가 사용하는 ( tomcat ) Container에서 미리 만들어 놓는다.

서버에 context.xml이라는 파일이 있다. 그 파일안에 체크한 부분처럼 데이터를 넣어준다.

 

커넥션 풀 구현

위와같이 주석처리한 처음에 사용했던 코드는 사용하지 않는다.

dataSource는 Connection Pool을 의미한다.

아래 예시를 통해 확인해보자

package com.servlet;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BookDAO {

	DataSource dataSource; // dataSource선언 import해야한다.
	
	/*
	String driver = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String id = "scott";
	String pw = "tiger";
	*/
	
	public BookDAO() {
		try {
//			Class.forName(driver); // 드라이버 로드가 필요없다.
			Context context = new InitialContext();
			dataSource = (DataSource)context.lookup("java:comp/env/jdbc/Oracle11g");
                       // 위와 동일한 코드로 사용해야 한다.
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public ArrayList<BookDTO> select() {
		
		ArrayList<BookDTO> list = new ArrayList<BookDTO>();
		
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet res = null;
		
		try {
//			con = DriverManager.getConnection(url, id, pw);
			con = dataSource.getConnection();  
			String sql = "SELECT * FROM book";
			pstmt = con.prepareStatement(sql);
			res = pstmt.executeQuery();
			while (res.next()) {
				int bookId = res.getInt("book_id");
				String bookName = res.getString("book_name");
				String bookLoc = res.getString("book_loc");
				
				BookDTO bookDTO = new BookDTO(bookId, bookName, bookLoc);
				list.add(bookDTO);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(res != null) res.close();
				if(pstmt != null) pstmt.close();
				if(con != null) con.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
		return list;
	}
	
}
728x90

'JSP, Servlet' 카테고리의 다른 글

Servlet request와 response  (0) 2021.06.05
Servlet 맵핑  (0) 2021.06.03
JSP란?  (0) 2021.06.03
Comments