공대생의 에러일기

JDBC와 DBCP란? 본문

DB

JDBC와 DBCP란?

냥늉냥 2021. 3. 5. 03:39
반응형

JDBC와 DBCP란?

비전공자의 관점에서 아주 쉽게 말하자면 DB와 서버간의 연결(통신)? 방법입니다.

 

하지만 사실상 JDBC는 API고, DBCP는 연결 방법이므로 두개를 비슷하게 외우면 안되니 설명을 듣고 이해합시다..!

 

 

  • JDBC (Java DataBase Connectivity)

      자바에서 SQL을 실행하기 위해 데이터베이스를 연결해주는 응용프로그램 인터페이스입니다.

      데이터베이스 표준 접근 API(Application Programing Interface)

      즉, 서버와 DB가 연동되있는 자바프로그램에서 SQL문을 사용한다면 JDBC를 사용할 수 있습니다.

      DB는 JDBC를 사용하기 위한 드라이버를 제공하는데, JDBC는 이 드라이버를 통해 DB에 접속 할 수 있습니다.

 

 

이 글을 읽는 대부분의 사람들은 jdbc와 DBCP의 차이점을 알기 위해 왔을것 같아 말씀드리자면

JDBC만 있어도 DB접속은 됩니다. 

그럼 DBCP는 뭐냐? 왜있냐?

JDBC의 떨어지는 DB 이용 효율을 높여줄 또다른 방법입니다.

무슨 효율을 어떻게 높이는지 JDBC와 비교하며 설명하겠습니다.

 

 

 

  • DBCP (DataBase Connection Pool)

DB 객체를 효율적으로 관리하는 일종의 '방법'입니다.

DB Connection 객체를 생성하면 Pool 이라는 공간에 저장해 두고, DB 연결 요청이 들어올 때 이 커넥션Pool에서 커넥션 객체를 가져다 쓰고 반환 합니다. 그 수가 maxldle 값을 넘어가면 객체 연결이 끊어지게 됩니다.

 

maxIdle 사용한 커넥션을 풀에 반납 시 최대로 유지할 개수

 

 

  • JDBC를 사용할 때 DB접속 절차
  1.  DB 접속을 위한 JDBC 드라이버 로드
  2.  DriverManager.getConnection() Method로 DB 커넥션 객체를 받는다.
  3.  받아온 커넥션 객체로부터 쿼리 수행을 위한 PreparedStatement() 객체 생성
  4.  executeQuery()를 실행해서 결과를 받아옴
//이해를 돕기위한 임의의 코드입니다.
try {
     Class.forName("com.mysql.jdbc.Driver"); //드라이버 로드
     } catch(ClassNotFoundException e) {
            e.printStackTrace();
     }
     String sql = "SELECT ... id FROM ...";
     try(Connection conn = DriverManager.getConnection(id, user, pw); //객체 받기
             PreparedStatement ps = conn.prepareStatement(sql)) //SQL을 사용할 수 있게 하는 PS 객체 생성
                 try(ResultSet rs = ps.executeQuery()){  //SQL 실행
                     while(rs.next()) {
                         String description = rs.getString(1);
                         int id = rs.getInt("id");

 

 

JDBC가 비효율적인 이유는 

DB를 연결할때마다 매번 드라이버를 로드하고 커넥션 객체를 생성하는걸 반복하기 때문입니다.

 

 

DBCP를 사용하게 된다면 불필요한 단계를 줄이므로 속도가 향상되고, DB커넥션의 과부하를 방지할 수 있습니다.

 

 

DBCP에 대한 장점을 장황하게 설명 했지만 단점이 없는것은 아닙니다.

DBCP는 커넥션 객체가 과하게 많으면 메모리를 많이 차지하게 됩니다.

따라서 무작정 많이 늘리는 것은 오히려 성능이 떨어지는 결과를 가져옵니다.

 

Comments