티스토리 뷰
커넥션을 얻으며, 발생하는 문제
데이터베이스에서 커넥션을 매번 얻기 위해서 아래와 같은 과정을 거치게 되는데, 많은 시간과 리소스가 발생하게 된다.
- 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.
- DB 드라이버는 DB와
TCP/IP
커넥션을 연결한다. 이 과정에서TCP/IP
연결을 위한 네트워크 동작이 발생한다. - DB 드라이버는
TCP/IP
커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. - DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다.
- DB는 커넥션 생성이 완료되었다는 응답을 보낸다.
- DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다.
커넥션 풀
이런 문제를 해결하기 위한 것이 커넥션을 미리 생성해두고 사용하는 커넥션 풀이다.
애플리케이션이 시작되는 시점에 커넥션을 미리 확보하여 커넥션 풀에 보관(기본값은 10개)하게 되는데, 커넥션 풀에 들어 있는 커넥션은 이미 TCP/IP로 DB와 커넥션이 연결되어 있기 때문에 즉시 SQL을 DB에 전달할 수 있다.
커넥션 풀 사용
애플리케이션 로직은 DB 드라이버를 통해서 새로운 커넥션을 획득하는 것이 아니라, 커넥션 풀을 통해 이미 생성되어 있는 커넥션을 객체 참조로 가져다 사용하게 된다. 애플리케이션 로직은 반환된 커넥션을 사용해서 SQL을 데이터베이스에 전달하고 그 결과을 받아서 처리한다. 커넥션을 모두 사용하고 나면 커넥션을 종료하지 않고, 다음에 다시 사용할 수 있도록 커넥션 풀에 반환한다.
대표적인 커넥션 풀 오픈소스로는 HikariCP
, commons-dbcp2
, tomcat-jdbc pool
등이 있지만,
스프링 부트 2.0부터는 기본 커넥션 풀로 제공되며, 이미 성능과 편리함, 안정성 측면에서 검증된 hikariCP
를 사용하면된다.
'Spring' 카테고리의 다른 글
[Spring] 트랜잭션 AICD (0) | 2022.04.20 |
---|---|
[Spring] DataSource (0) | 2022.04.19 |
[Spring] JDBC(Java Database Connectivity) (0) | 2022.04.17 |
[Spring] ApplicationContext (0) | 2022.03.13 |
[Spring] Singleton, SingletonContainer (0) | 2022.01.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Spring
- 리팩토링
- 자료구조
- 김영한
- 알고리즘
- 노마드코더
- 정렬
- 구현
- Refactoring
- 코틀린
- Algorithm
- 그리디
- kotlin
- webflux
- Real MySQL
- 인프런
- mysql 8.0
- 스프링 부트
- 노마드
- spring boot
- 데이터베이스
- leetcode
- 문자열
- 스프링
- 릿코드
- 북클럽
- 파이썬
- 코테
- 백준
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함