Cached crawled data into Redis with 10 minutes TTL.
2024-11-29T00:23:31.191+09:00 INFO 3056 --- [juseyo_be_crawl][nio-9090-exec-1] com.zaxxer.hikari.pool.ProxyLeakTask : Previously reported leaked connection com.mysql.cj.jdbc.ConnectionImpl@6fc28e5b on thread http-nio-9090-exec-1 was returned to the pool (unleaked)
에러가 떴다.
커넥션 풀에 대한 에러이다.
설정을 실제로 조정하니 에러는 해결됐는데
여기서 말하는 커넥션 풀에 대해 공부 겸 남기는 글.
-DB커넥션은 DB-애플리케이션 간 연결할 수 있는 수단을 말한다.
Driver와 Database 연결정보가 필요함.


이러한 일반적인 DB커넥션의 한계와 비용 이슈를 해소할 수 있는 방법이
바로 커넥션 풀이다.
데이터베이스와 연결을 열고 닫는 작업 시
매번 새 연결을 생성하는 대신, 미리 생성한 연결을 재사용하여 성능을 높인다.
일정 개수의 커넥션을 미리 만들어두고 만들어진 커넥션을 계속 재사용해서
연결마다 드는 부담을 줄일 수 있다.
-DB 접속 모듈을 공통화하여 유지보수에 유리
-DB Connection 수를 제한하여 과도한 접속으로 인한 서버 자원 고갈을 방지함
-DB Connection 객체를 미리 만들어 두어 접속 비용이 줄어든다.
HikariCP는 Spring Boot에서 기본적으로 지원하는 커넥션 풀 라이브러리다.
Spring Boot 2.x부터는 HikariCP가 기본 데이터소스 커넥션 풀로 설정되어
별도로 추가하지 않아도 사용할 수 있다는 것이 특징.
HikariCP 설정은 애플리케이션의 성능과 안정성을 보장하는 핵심 요소가 될 수 있다.
다시 에러로 돌아가보자.
Cached crawled data into Redis with 10 minutes TTL.
2024-11-29T00:23:31.191+09:00 INFO 3056 --- [juseyo_be_crawl][nio-9090-exec-1] com.zaxxer.hikari.pool.ProxyLeakTask : Previously reported leaked connection com.mysql.cj.jdbc.ConnectionImpl@6fc28e5b on thread http-nio-9090-exec-1 was returned to the pool (unleaked)
해석해보자면 이전에 보고 된 누수로 감지된 연결이 반환되었다는 말이다.
연결이 누수로 왜 감지되냐면
기본적으로 HikariCP는 connection leak detection이라는 기능을 제공하는데,
트랜잭션이 오래 걸리거나(기본값 30초 이상) 커넥션이 반환되지 않을 경우 경고를 출력한다.
나의 경우
데이터가 DB에 있는지 하나씩 체크하고 없는 데이터만 추려서 일괄로 DB에 insert하게끔 로직을 짰는데, 해당 작업에 트랜잭션을 달아놓으니
트랜잭션이 오래걸려서 경고가 뜬 것이었다.
그래서 다음과 같이 설정을 변경하였다.
datasource:
hikari:
pool-name: HikariCP
maximum-pool-size: 10 #풀 사이즈 : 10 -> 20으로 변경
minimum-idle: 5
idle-timeout: 30000
max-lifetime: 1800000
connection-timeout: 20000
connection-test-query: SELECT 1
leak-detection-threshold: 3000 #누수 감지 시간 : 3000(3초)-> 60000(60초)로 변경
HikariCP 누수 감지 시간과 커넥션 풀 사이즈를 조정하니
오류 없이 잘 돌아간다.
reference
https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake
https://seongwon.dev/Database/20221002-DB_Connection_Pool/