
데이터베이스 커넥션 풀(Connection Pool)을 사용하지 않으면 어떤 문제가 발생할 수 있나요?
Connection 이라는 연결 통로가 필요하다.1. 비싼 비용💸
2. 제한된 커넥션 수🚫
Connection refused, Too many connections)
Connection Pool이다.HikariCP - 자주봤죵~?maximumPoolSize : 풀에 유지할 최대 커넥션 수minimumIdle : 유휴 상태로 유지할 커넥션 수connectionTimeout : 커넥션을 못 얻어올 떄까지 기다릴 최대 시간idleTimeout : 유휴 커넥션을 얼마나 오래 유지할지maxLifetime : 커넥션 객체가 살아있을 수 있는 최대 시간💡 커넥션 유휴 상태란 DB 커넥션이 열려있지만, 아무 작업도 하지 않는 대기 상태
Hikari Pool - Connection timeout, connection leak detected 경고TCP 소켓 연결DB 인증max_connections)가 제한됨Too many connections 오류로 서비스 전체 장애❗ 이 외에도 커넥션 풀을 사용하지 않아 커넥션을 관리하지 않으면
확장성(Scalability) 문제, 장애 복구 및 안정성 저하 문제를 초래할 수 있음
매일메일 스터디에서 커넥션 타임아웃(Connection Timeout)과 관련된 질문을 받았을 때,
명확한 답변을 하지 못했는데, 그 이유는 커넥션을 DB에 중점을 두고 생각했기 때문이다.
커넥션은 애플리케이션과 DB간의 통신선이라고 위에서 정리했는데,
그 통신의 기반이 TCP라는 부분을 간과했던 것 같다.
다시 정리하자면,
✅ 커넥션 = 애플리케이션 ↔ DB 간의 통신선
✅ DB 커넥션은 TCP 연결 + DB 세션 상태까지 포함한 개념
✅ 애플리케이션과 DB의 통신 기반은 TCP(TCP 소켓 연결)
[애플리케이션]                  [DB 서버]
    |                               |
    | 1. TCP 연결 (소켓 open)       |
    |------------------------------>|
    |                               |
    | 2. DB 인증 & 세션 생성        |
    |------------------------------>|
    |                               |
    | ← 커넥션(=TCP + 세션) -------- |
    |                               |
    ▼                               ▼
 ┌─────────────────────────────────────────┐
 │             커넥션 풀(Connection Pool)  │
 │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
 │ │Conn #1    │ │Conn #2    │ │Conn #3    │ │  ← 미리 만든 커넥션들
 │ │TCP + 세션 │ │TCP + 세션 │ │TCP + 세션 │ │
 │ └───────────┘ └───────────┘ └───────────┘ │
 └─────────────────────────────────────────┘
         ▲                 ▲
         |                 |
   요청 시 꺼내서 사용   요청 끝나면 반환
   
DB 세션을 공부해야겠다 ..!