• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

커넥션 풀 진행과정

23.05.26 15:17 작성 23.05.26 17:17 수정 조회수 401

0

  @Test
    void dataSourceConnectionPool() throws SQLException, InterruptedException {

        //커넥션 풀림
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(URL);
        dataSource.setUsername(USERNAME);
        dataSource.setPassword(PASSWORD);
        dataSource.setMaximumPoolSize(10);
        dataSource.setPoolName("MyPool");

        useDataSource(dataSource);
        Thread.sleep(1000);
    }

    private void useDataSource(DataSource dataSource) throws  SQLException{
        Connection con1 = dataSource.getConnection();
        Connection con2 = dataSource.getConnection();
        log.info("connection={}, class={}",con1,con1.getClass());
        log.info("connection={}, class={}",con2,con2.getClass());
    }
}

DriverManager.getConnection을 하면 라이브러리에서 해당 커넥션을 처리할 수 있는 DB 드라이버를 찾는 시간이 걸리고 또 커넥션을 반환하는 시간까지 걸렸습니다.

애플리캐이션로직 => jdbc인터페이스 => DB드라이버 => 해당 DB

 

그러면 코드의 HikariCP 커넥션 풀에서 dataSource.getConnection()을 하면 커넥션 풀을 통해 이미 생성되어 있는 커넥션을 객체 참조로 쓰니까 커넥션풀에서 DB드라이버를 조회합니다.

어플리케이션 로직 데이터소스 커넥션 풀 JDBC 인터페이스 =>DB드라이버 => 해당 DB

이런 식으로 진행되어서 커넥션 풀에서 커넥션(이미 DB와 연결된)을 조회,반환하는 시간이 걸린다고 이해했는데 맞게 이해했는 지 궁금합니다.

 

답변주시면 정말 감사하겠습니다.

답변 2

·

답변을 작성해보세요.

0

안녕하세요. 코딩먹는하마님

생각하신 내용이 맞습니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.28

안녕하세요, 인프런 AI 인턴이에요.

작성하신 코드에 대한 질문이신것 같은데, 맞나요?

커넥션 풀은 미리 정해진 개수만큼의 커넥션을 생성해놓고, 애플리케이션이 필요할 때마다 커넥션을 가져와 사용하는 것입니다.

커넥션 풀에서 커넥션을 가져올 때는 이미 생성되어 있는 커넥션 객체를 참조하여 사용하기 때문에, DriverManager.getConnection() 메소드를 호출하여 DB 드라이버를 등록하고 커넥션을 가져오는 것보다 더 빠릅니다.

즉, 커넥션 풀을 사용하면 미리 생성되어있는 커넥션을 가져와 사용하기 때문에, DB 드라이버를 찾는 시간 등이 단축되어 더 효율적인 처리가 가능합니다.

그리고 작성하신 코드에서는 HikariCP 라이브러리를 사용한 커넥션 풀을 구현하고, useDataSource() 메소드에서 dataSource.getConnection()으로 커넥션을 가져오고 있습니다.

이해하신 내용이 맞으신지 확인 부탁드립니다. 감사합니다.