DB(JDBC, ConnectionPool, DataSource)

jhwan·2024년 12월 4일


1. JDBC의 이점
(1)
기존: 사용하고 있는 DB를 바꿀 경우 app서버의 DB 사용코드도 변경해야 함
해결: JDBC 표준 인터페이스에만 의존
(2)
기존: 'DB마다' 커넥션 연결, SQL 전달, 그리고 그 결과를 응답 받는 방법을 새로 학습해야하는 문제
해결: 개발자는 JDBC 표준 인터페이스 사용법만 학습하면 된다.


2 JDBC 연결 후 사용법
(1) connection 정보 : URL, ID, PASSWORD, ClassName(Driver라고도 하며 요즘에는 Url을 보고 자동으로 driver를 설정해줌, App와 DB 사이의 통신 담당 드라이버를 지정)
(2) 연결 후 : connection, preparedStatment, resultSet

3.ConnectionPool
발생 배경 : connection을 획득하기 위해는 복잡한 과정을 거친다. 시간 또한 많이 소모된다. 이는 고객에게 안좋은 경험을 줄 수 있다. 따라서 커넥션을 미리 생성해두고 사용하는 방법이다.
그래서 connectionPool이란? : 커넥션을 관리하는 pool이다. app를 시작하는 시점에 커넥션을 미리 확보해서 풀에 보관한다. client는 커넥션을 사용하고 커넥션이 열린채로 커넥션 풀에 다시 반환한다. 대표적인 커넥션 풀 오픈소스는 hikariCP를 주로 사용한다.
connection.close()를 사용하면 ConnectionPool인 경우에는 connection을 닫는 것이 아니라, connection을 pool에 반환한다.

정리 : 1. connection은 연결하기가 오래걸림, 2. 따라서 connection 객체들을 pool 형태로 관리함

  1. DataSource
    무엇인가? : ConnectionPool에서 커넥션을 획득하는 방법을 추상화 하는 '인터페이스'이다. 이 인터페이스의 핵심 기능은 '커넥션 조회'이다.
    dataSource의 구현체를 무엇으로 하느냐에 따라 매번 connection을 만들기도 하고 connectionPooling을 하기도 한다. 아래에는 예시코드
    @BeforeEach
    void beforeEach(){
        // 기본 DriverManager - 항상 새로운 커넥션을 획득, 성능이 안좋음, 매 sql실행마다
        // 커넥션을 만들어야 함
//        DriverManagerDataSource dataSource = new DriverManagerDataSource(ConnectionConst.URL, ConnectionConst.USERNAME, ConnectionConst.PASSWORD);

        // 커넥션 풀링
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(ConnectionConst.URL);
        dataSource.setUsername(ConnectionConst.USERNAME);
        dataSource.setPassword(ConnectionConst.PASSWORD);

        repository = new MemberRepositoryV1(dataSource);
    }

0개의 댓글