Skip to content

Latest commit

 

History

History
84 lines (70 loc) · 5.45 KB

db-connection-pool.md

File metadata and controls

84 lines (70 loc) · 5.45 KB

DB Connection Pool

DB Connection Pool 이란?

  • DB Connection Pool은 데이터베이스에 연결하는 데 필요한 연결 객체(Connection)들을 미리 생성해두고, 이 객체들을 재사용할 수 있도록 관리하는 기술
  • 연결 객체를 재사용함으로써, 데이터베이스 연결 설정 시간을 절약
  • 동시에 사용할 수 있는 최대 연결 수를 제한하여, 데이터베이스 서버의 부하를 관리할 수 있음
  • 애플리케이션의 동시 사용자 수가 증가해도 효율적으로 연결을 관리할 수 있음
  • 스레드 풀과 매우 유사하지만 스레드 풀은 CPU의 작업 처리 능력을 최적화 하기 위해 스레드를 관리하고 커넥션 풀은 데이터 베이스 연결 객체를 관리하여 데이터베이스 접근을 최적화 하므로 대상과 목적이 다름

커넥션 풀 동작 과정

  1. 초기화 : 애플리케이션이 시작되면 일정 수의 데이터베이스 연결을 미리 생성하여 커넥션 풀에 저장
  2. 연결 요청 : 애플리케이션에서 데이터베이스 접근이 필요할 때, 커넥션 풀에서 사용 가능한 연결 객체를 가져와 사용
  3. 작업 완료 : 데이터베이스 작업이 완료되면 연결을 닫는 대신, 커넥션 풀에 반환하여 다른 요청에서 재사용 가능
  4. 자원 해제 : 사용되지 않는 연결은 일정 시간이 지나면 자동으로 해제되거나 재활용됨

// java HikariCP 설정 예시
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("username");
config.setPassword("password");
config.setMaximumPoolSize(10); // 최대 10개의 연결을 유지

HikariDataSource dataSource = new HikariDataSource(config);

Connection connection = dataSource.getConnection();
// 데이터베이스 작업 수행
connection.close(); // 실제로는 연결을 닫지 않고 풀에 반환

Ssafy Wizards CS Study

1. DB와 Client가 Connection을 어떻게 구성하는지 설명해 주세요.

  1. 네트워크 연결 설정
    • 클라이언트가 데이터베이스 서버에 연결 요청
    • 요청은 네트워크를 통해 이루어지며, 클라이언트는 데이터베이스 서버의 IP 주소와 포트 번호를 사용하여 접속
  2. TCP 소켓 연결 생성
    • 클라이언트와 서버 간에 TCP 소켓 연결 설정
    • 이 소켓 연결은 클라이언트와 서버 간의 양방향 통신을 가능하게 하며, 데이터가 전송될 경로를 제공
  3. 핸드셰이크(Handshake)
    • 클라이언트와 서버가 프로토콜 및 인증 요구사항 교환
    • 핸드셰이크 과정에서는 서로의 프로토콜 버전, 인증 요구사항, 데이터 형식 등의 정보를 교환
    • 이 단계에서 데이터베이스 서버는 클라이언트의 요청을 이해할 수 있는지, 클라이언트가 서버의 요구사항을 충족하는지 확인
  4. 인증(Authentication)
    • 클라이언트의 인증 정보(사용자명, 비밀번호) 검증
    • 데이터베이스 서버는 이 정보를 확인하여, 클라이언트가 데이터베이스에 접근할 수 있는 권한이 있는지 검증
    • 인증이 성공하면, 클라이언트는 데이터베이스에 접근할 수 있게 되며, 실패하면 연결이 종료
  5. 세션(Session) 생성
    • 인증 성공 시, 서버에서 클라이언트와의 세션 생성
    • 이 세션은 클라이언트의 상태 정보를 유지하며, 데이터베이스에서 수행되는 작업의 컨텍스트를 제공
    • 세션이 설정되면 클라이언트는 SQL 쿼리 등을 통해 데이터베이스와 상호작용할 수 있음
  6. 쿼리 실행 및 데이터 전송
    • 클라이언트가 SQL 쿼리를 전송하고 서버가 응답
    • 데이터베이스 서버는 쿼리를 실행한 후, 그 결과를 클라이언트에게 반환
    • 이 데이터 전송은 설정된 TCP 소켓을 통해 이루어지며, 세션이 유지되는 동안 계속해서 클라이언트와 서버 간에 데이터가 주고받을 수 있음
  7. 세션 종료 및 연결 해제
    • 작업 완료 후 세션 종료 및 TCP 소켓 연결 해제
    • 연결 해제는 TCP 소켓을 닫는 것으로 이루어지며, 이를 통해 클라이언트와 서버 간의 통신이 끝남

커넥션 풀을 통한 커넥션 동작 방식

  1. 사전 연결 생성
    • 애플리케이션이 시작될 때, 커넥션 풀은 미리 일정 수의 DB 연결(Connection)을 생성하고 유지
    • 이 연결들은 미리 TCP 소켓 연결과 인증 과정을 거쳐 준비된 상태로 대기
  2. 연결 요청 시
    • 클라이언트가 데이터베이스에 접근해야 할 때, 새로운 연결을 생성하지 않고, 커넥션 풀에서 이미 생성된 연결을 가져옴
    • 클라이언트는 네트워크 연결 설정, TCP 소켓 연결 생성, 핸드셰이크 및 인증 과정 등을 거치지 않고 곧바로 데이터베이스와 상호작용할 수 있음
  3. 쿼리 실행 및 데이터 전송
    • 위와 동일
  4. 작업완료 후
    • 클라이언트가 작업을 완료한 후, 연결을 닫지 않고 커넥션 풀에 반환
    • 이 연결은 다시 풀에 들어가 다른 클라이언트가 사용할 수 있도록 준비됨
  5. 자원 해제
    • 사용되지 않는 연결은 일정 시간이 지나면 자동으로 해제되거나 재활용됨
    • 필요에 따라 커넥션 풀의 크기를 조정하여, 더 많은 연결을 생성하거나 줄일 수 있음