커넥션 풀이란?
데이터베이스와 연결된 커넥션을 미리 만들어서 풀(pool)속에 저장해 두고 있다가 필요할 때 커넥션을 풀에서 쓰고 다시 반납하는 기법을 말한다.
- 웹 컨테이너가 실행되면서 커넥션(Connection) 객체를 미리 풀(pool)에 생성해 둔다.
- DB와 연결된 커넥션을 미리 생성해서 풀 속에 저장해 두고 있다가 필요할 때 가져다 쓰고 반납한다.
- 미리 생성해두기 때문에 DB와의 부하를 줄이고 유동적으로 연결을 관리 할 수 있다.
왜 커넥션풀을 사용하는가?
그래서 커넥션 풀은 언제 어떨때 사용하는가?
예전에 JSP에 대해서 공부를 했거나 프로젝트를 해보신 분이라면 아래와 같은 소스를 본적이 있을 것이다.
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
sql = "SELECT * FROM BOARD"
// 1. 드라이버 연결 DB 커넥션 객체를 얻음
connection = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
// 2. 쿼리 수행을 위한 PreparedStatement 객체 생성
pstmt = conn.createStatement();
// 3. executeQuery: 쿼리 실행 후
// ResultSet: DB 레코드 ResultSet에 객체에 담김
rs = pstmt.executeQuery(sql);
} catch (Exception e) {
} finally {
conn.close();
pstmt.close();
rs.close();
}
}
위와 같이 자바에서 DB에 직접 연결해서 처리하는 경우 JDBC를 이용하여 커넥션 객체를 받아와야 한다. 그러면 사용자는 매번 요청할 때 마다 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 매우 비효율적이다.
또한 많은 요청에서 DB 커넥션을 연결해야 한다면 최악의 경우에는 DB의 서버가 다운되기도 할 것이다.
이러한 경우를 막기 위해 우리는 Connection Pool 을 이용한다.
커넥션 풀의 종류와 장단점
커넥션 풀의 종류로는 대표적으로 Apache Commons DBCP, Tomcat-JDBC, HikariCP 등이 있다.
커넥션 풀의 장점으로는
1) pool 속에 미리 커넥션이 생성되어 있기 때문에 커넥션을 생성하는데 시간이 소비되지 않는다.
2) 커넥션을 재사용하기 때문에 생성되는 커넥션 수가 많지 않다.
3) 커넥션을 생성하고 제거하는데 필요한 시간이 소요되지 않아 어플리케이션의 속도가 빨라지며 한번에 생성될 수 있는 커넥션 수를 제어하기 때문에 동시 접속자 수가 많아도 어플리케이션이 쉽게 다운되지 않는다.
단점으로는 무작정 많이 늘린다면 많은 메모리를 차지 하기 때문에 성능이 떨어 질 수도 있다.
참조
devbox.tistory.com/entry/JSP-%EC%BB%A4%EB%84%A5%EC%85%98-%ED%92%80-1
'BackEnd' 카테고리의 다른 글
Kakfa란 ? (개념, 동작원리) (0) | 2021.05.17 |
---|---|
JPA(Java Persistence API), Hibernate 란? (0) | 2021.04.25 |
메세지 큐 (0) | 2021.04.14 |
메시징 시스템(Messaging System) (0) | 2021.04.13 |
마이크로서비스 아키텍쳐 ( MSA ) (0) | 2021.04.12 |