티스토리 뷰
데이터베이스 커넥션
- 애플리케이션과 데이터베이스의 연결을 뜻함
- 애플리케이션에서 데이터베이스에 접속하고 접속을 종료하는 일련의 과정을 의미.
풀(Pool)
- 필요할 때마다 개체를 할당하고 파괴하는 대신, 사용 준비된 상태로 초기화된 개체 집합
- 즉, 데이터베이스 커넥션 풀은 커넥션(개체)을 미리 생성해 사용 준비된 상태로 초기화된 커넥션 집합
자바의 Connection 인터페이스
java.sql 패키지에 정의된 Connection 인터페이스에는 다음과 같이 설명한다.
A connection (session) with a specific database.
SQL statements are executed and results are returned within the context of a connection.
특정 데이터베이스와의 연결(세션)입니다. SQL 문이 실행되고 연결 컨텍스트 내에서 결과가 반환됩니다.
Connection 인터페이스에 대한 좀 더 자세한 정보는 아래 자료를 참고하기 바란다.
- Connection 인터페이스
- Java® Platform, Standard Edition & Java Development Kit Version 11 API Specification
데이터베이스 커넥션 풀, DBCP(DataBase Connection Pool)
- 클라이언트의 요청에 따라 각 스레드에서 데이터베이스에 접근하려면 Connection이 필요, 이때 미리 데이터베이스와 커넥션을 맺어놓는 것.
- 미리 커넥션의 개수를 확보해 둔 뒤 이 커넥션을 애플리케이션에서 사용하고 반환하는 형태
사용하는 이유
- DB 커넥션 비용 절감
- Pool 속에 미리 Connection이 생성되어 있기 때문에 Connection을 생성하고 닫는데 시간이 소비되지 않는다.
- Connection을 계속해서 재사용하기 때문에 Connection의 수가 많이 필요하지 않다.
- 안정적인 DB 커넥션 유지
- 커넥션 수를 제어하기 때문에 동시 접속자 수가 몰려도 애플리케이션이 쉽게 다운되지 않는다.
Thread Pool과 Connection Pool
Connection Pool과 비슷한 맥락으로 Thread Pool이라는 개념이 있다.
- WAS에서 Thread pool과 Connection pool내의 Thread와 Connection의 수는 직접적으로 메모리와 관련이 때문에, 많이 사용하면 할수록 메모리를 많이 점유하게 된다.
- 그렇다고 반대로 메모리를 위해 적게 지정한다면, 서버에서는 많은 요청을 처리하지 못하고 대기할 수밖에 없다.
- 보통 WAS의 Thread의 수가 Conncetion의 수보다 많은 것이 좋다. 모든 요청이 DB에 접근하는 작업이 아니기 때문이다.
새롭게 궁금해진 점
- 스프링 부트에서의 커넥션 풀 설정
- Java에서 스레드 풀 사용
참조 자료
'CS > DB' 카테고리의 다른 글
데이터베이스 인덱스 (0) | 2022.10.28 |
---|---|
DB의 Lock (0) | 2022.10.08 |
트랜잭션 (Transaction) (0) | 2022.10.08 |
MySQL 아키텍처 (0) | 2022.08.04 |
조인 수행 원리 (0) | 2022.08.02 |
댓글