커넥션 풀과 데이터소스 이해

개발하는 도비·2023년 9월 18일

spring-db

목록 보기
2/7
post-thumbnail

1. 커넥션 풀 이해

1-1. 데이터베이스 커넥션 프로세스

  • 커넥션 순서

      1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션 조회
      1. DB 드라이버는 DB와 TCP/IP 커넥션을 연결
      1. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달
      1. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성
      1. DB는 커넥션 생성이 완료 응답
      1. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환
  • 커넥션을 매번 획득할 경우 문제점

    • 커넥션을 새로 만드는 것은 복잡하고 시간이 소모다 크다.
    • 서비스 운영시 커넥션 + SQL 실행으로 응답 속도에 영향을 줌.
    • 문제점 해결 아이디어로 커넥션 풀을 사용.

1-2. 커넥션 풀

  • 커넥션을 미리 생성해두고 사용.

  • 커넥션 풀 초기화

    • 시작 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해서 보관
  • 커넥션 풀 연결 상태

    • 커넥션 풀에 들어 있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태 -> 언제든지 즉시 SQL을 DB에 전달
  • 커넥션 풀 사용

    • 사용 : 커넥션을 획득 x, 풀에서 커넥션 객체를 가져다 사용.
    • 반환 : 커넥션을 사용해 SQL을 사용해 처리가 끝난 후 커넥션을 종료하는 것이 아닌 풀에 반환

2. DataSource 이해

2-1. DataSource 필요성

  • DriverManager로 새로운 커넥션을 생성하거나, 풀에서 사용

  • DriverManager를 통해 커넥션 획득하다가 커넥션 풀로 변경시 문제

    • 애플리케이션 로직도 변경이 필요
  • 커넥션을 획득하는 방법을 추상화

  • DataSource

    • 대부분의 커넥션 풀은 DataSource 인터페이스를 이미 구현
    • 커넥션 풀의 코드를 직접 의존하는 것이 아니라 DataSource 인터페이스에만 의존하도록 애플리케이션 로직 작성

2-2. DataSource - DriverManager 예제

  • DriverManager
DriverManager.getConnection(URL, USERNAME, PASSWORD)
  • DriverManagerDataSource
void dataSourceDriverManager() throws SQLException {
      DriverManagerDataSource dataSource = new DriverManagerDataSource(URL,USERNAME, PASSWORD);
      useDataSource(dataSource);
}

private void useDataSource(DataSource dataSource) throws SQLException {
      Connection con1 = dataSource.getConnection();
}
  • DataSource 설정과 사용의 분리
    • 설정: 설정과 관련된 속성들은 한 곳에 있음.
    • 사용: 설정은 신경쓰지 않고, DataSource 의 getConnection() 만 호출해서 사용
    • DriverManager의 경우 커넥션 할 때마다 설정 정보를 넣어서 사용해야함.

3. 참조

  • 스프링 DB 1편 - 데이터 접근 핵심 원리
  • 링크
profile
도비의 양말을 찾아서

0개의 댓글