본문 바로가기
Develop/DB

JDBC ,커넥션풀 이해

by dev_m.w 2025. 5. 25.

1.JDBC?

예전에는 각 DB 마다 커넥션을 연결하고,SQL을 전달하고 하는 방법이 모두 달랐음, 그래서 DB를 바꾸거나 하면  이전에 애플리케이션에 사용하던 코드도 변경해야하고, 개발자가  각 데이터 베이스마다 DB에 맞는 커넥션연결,SQL전달 방법을 학습 해야했음.

그래서 자바는 JDBC표준이라는 것을 만듬(자바 DB연결 API) : 각 DB회사들은 아래있는 표준 인터페이스를 구현하도록, 즉 껍데기만 만들어놓고, 내부는 각 DB회사들이 알아서 구현하게 하도록 함.

 

    JDBC인터페이스 모음

  • java.sql.connection - 연결
  • Statement - 전달 
  • ResultSET -응답

 

그래서 우리는 표준 인터페이스에만 의존 하기떄문에 DB가 변경되도 코드는 변경하지 않고 ,  JDBC를 구현하는 라이브러리만 변경하면 된다는 장점이 생겼다,  과거에 인터페이스를 왜 만드는지  이해가 잘되지않았는데 이러한 문제를 보고서 왜 인터페이스를 잘만들어야 되는지 이해가 되었다. 

하지만 표준떄문에 많은 것이 편해졌지만 데이터베이스마다 약간의 SQL문법이 다르기떄문에 JDBC코드는 변경하지 않아도 되지만 SQL은 해당 데이터베이스에 맞게 변경 해야한다. 이를 해결위해 jpa라는 기술도 있다.

 


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

커녁선풀을 이해하기 앞서서, 사용자가 db에 있는 정보를 가져올떄 필요로 하는 요청이면 (ex,로그인,회원가입,물품구매) db와 커넥션을 맺어야 하는데, 커넥션을 획득할떄 많은 복잡한과정을 거친다(과정은 생략). 이러한 과정은 커넥션을 새로 만드는데 시간이 추가로 걸리기떄문에 응답 속도면에서 영향을 준다. 이러한 문제점을 해결하기 위해서 커넥션을 미리 생성해두고 사용하는 커넥션풀이 등장했다. 애플리케이션이 시작하는 시점에 미리 필요한 커넥션을 확보해 풀에 보관한다 

 

 

1) 커넥션 풀을 사용하는 경우

커넥션 풀을 이용한 예제

 

DB드라이버를 통해서 새로운 커넥션을 획득하는것이아닌, 커넥션 풀을 통해 이미 생성되어 있는 커넥션을 객체 참조로 그냥 가져다 쓰면된다. 애플리케이션 로직은 커넥풀에서 받은 커넥션을 사용해서 SQL을 데이터베이스에 전달하고 그결과를 받아서 처리한다.단, 사용하고나서 커넥션 연결을 끊는것이 아닌, 커넥션이 살아있는 상태로 커넥션 풀에 반환해야함

 

 

DataSource 이해

커넥션을 얻는 방법은 JDBC DriverManger를 직접 사용하거나, 커넥션 풀을 사용하는 다양한 방법이 존재한다.

 

1) 커넥션을 직접적으로 의존하는경우

 

기존에 DriverManger를 통해서 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경하려면 애플리케이션 로직의 코드를 변경해야한다. 직접적으로 의존하고 있기떄문이다.또 자바는 이러한 문제를 해결하기 위해서  아래와 같이 커넥션을 획득하는 방법을 추상화 하는 DataSource인터페이스를 만든다.

 

 

 

2) 커넥션을 획득하는 방법을 추상화

 

애플리케이션에서는 DataSource 인터페이스만 의존하기 떄문에 커넥션을 받는 기술을 변경하고 싶으면 구현체만 갈아 끼우기만 하면 되기떄문에 코드를 변경하지 않아두된다. 

 

'Develop > DB' 카테고리의 다른 글

[DB] db 모델링 정규화 관계 맺는법  (0) 2025.07.22
@Transaction,DB락  (0) 2025.05.27