Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 싱클톤패턴
- Java
- singleton
- 모달창 여러개
- 상속
- Servlet 맵핑
- 오라클 비교연산자
- 다운캐스팅
- static
- IP
- oracle 연동
- static메서드
- 깃 명령어
- 리스트 모달창
- spring annotation
- static 예제
- 추상 메서드
- 이클립스 오라클 연동
- GROUP BY
- 객체협력
- 템플릿
- 형변환
- 스프링 모달창
- 다중 모달창
- react
- order by
- SUB Query
- 사용자 데이터그램 프로토콜
- AOP란?
- downcasting
Archives
- Today
- Total
모든지 기록하자!
Connection Pool 이란? 본문
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