1. Connection Pool 이란?
애플리케이션이 데이터베이스와 통신을 하기 위해서는 Database Connection(데이터베이스 연결)이 필요하다.
데이터베이스 연결 수명 주기는 아래와 같다.
- 데이터베이스 드라이버를 사용하여 데이터베이스에 연결하기
- 데이터 읽기 / 쓰기를 위한 TCP 소켓 열기
- 소켓을 통한 데이터 읽기 / 쓰기
- 연결 종료
- 소켓 닫기
데이터베이스 연결은 상당히 비용이 많이 드는 작업이다.
따라서, 가능하면 데이터베이스 연결을 최소한으로 줄여야 한다.
커넥션 풀은 애플리케이션 서버가 시작될 때 미리 일정 수의 데이터베이스 연결을 생성하고,
이를 Pool에 보관하는 기술이다.
이렇게 미리 생성된 연결들은 클라이언트의 요청이 있을 때 재사용된다.
1 - 1. 동작 방식
- 애플리케이션 서버 시작 시 미리 정해진 수의 커넥션을 생성하여 Pool에 저장한다.
- 클라이언트가 데이터베이스 연결을 요청하면, 풀에서 사용 가능한 커넥션을 제공한다.
- 클라이언트가 작업을 마치면 해당 커넥션을 풀에 반환한다.
2. Connection Pool 의 이점
커넥션 풀의 가장 큰 장점은 애플리케이션의 성능을 크게 향상시킨다는 점이다. 데이터베이스 연결을 매번 새로 생성하는 대신, 미리 생성된 연결을 재사용함으로써, TCP 연결, 인증 등의 오버헤드를 줄일 수 있다. 또한, 사용 가능한 연결을 즉시 제공함으로써 애플리케이션의 전반적인 응답 시간을 단축시킨다. 결과적으로 자원 사용을 최적화할 수 있는 것이다.
3. Connection Pool 은 무조건 크게 설정하면 좋을까?
커넥션 객체는 메모리를 차지하므로, 불필요하게 많은, 스레드 수 보다 많은 커넥션을 유지하면 메모리 낭비가 발생한다. 따라서, 스레드 풀 크기보다 커넥션 풀 크기가 크면, 사용되지 않는 커넥션이 생겨 실질적으로 메모리만 차지하게 되는 것이다. 반대로 커넥션 풀 사이즈가 스레드 풀 사이즈보다 작으면, 스레드가 커넥션을 기다리는 상황이 발생하니 작업이 원활하지 수행되지 못하게 된다.
커넥션 풀 크기는 애플리케이션의 동시성 수준, CPU 코어 수, 대기 시간 비율 등을 고려하여 최적화된 크기로 결정해야 한다.
References
https://www.maeil-mail.kr/question/88
https://www.baeldung.com/java-connection-pooling
'백엔드 면접 질문' 카테고리의 다른 글
HTTP 메서드에서 멱등성(Idempotent)이란 무엇인가요? (0) | 2025.01.03 |
---|---|
웹 브라우저에 www.google.com 을 입력했을 때 어떤 과정이 이뤄지나요? (0) | 2024.12.31 |
동일성과 동등성에 대해서 설명해주세요. (0) | 2024.12.17 |
equals와 hashCode는 왜 함께 재정의 해야 하나요? (0) | 2024.12.16 |
JPA에서 ID 생성 전략에 대해서 설명해주세요. (1) | 2024.12.07 |