1) JDBC를 사용하는 방법
오라클이던, MySQL이던 각 DB에서 제공하는 DB Connection API를 이용해서 DB에 접속하는 방법이다.
사용자가 직접 소스코드에 ID와 PassWord, IP 등을 입력하여 커넥션 객체를 생성하고 그 객체를 이용해서 DB를 제어하는 방법이다.
2) Connection Pool( DBCP : DataBaseConnectionPool )을 사용하는 방법
사용자(프로그래머)가 소스에서 직접 DB에 연결하는 것이 아니라, 연결은 WAS(톰켓,제우스 같은)가 하고 사용자는 WAS가 연결한 커넥션을 이용하는 방법이다.
웹 컨테이너(WAS)가 실행되면서 DB와 미리 connection을 해놓은 객체들을 pool에 저장해두었다가
클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 받납받아서 pool에 저장하는 방식이다.
- WAS가 실행되면서 connection 객체를 미리 pool에 생성해 두기 때문에 connection을 생성하는데 드는 요청마다 연결시간이 소비되지 않는다는 장점이 있다.
- 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수를 제한적으로 설정한다.
#커넥션 풀(DBCP)를 사용하는 이유
JSP에 대해서 공부했거나 프로젝트를 해봤던 사람이라면 다음과 같은 소스를 본적 있을 것이다.
package java_arguments.JDBC_test;
import java.sql.*;
public class DB_Connection {
static final String DRIVER = "org.mariadb.jdbc.Driver";
static final String URL = "jdbc:mariadb://localhost:3306/test_db";
static final String USER = "root";
static final String PASSWORD = "testdb";
Connection con;
PreparedStatement pstmt;
ResultSet rs;
public DB_Connection(){
try{
Class.forName(DRIVER);
con = DriverManager.getConnection(URL, USER, PASSWORD);
if( con!= null){
System.out.println("DB 접속에 성공했습니다.");
}
} catch (ClassNotFoundException e){
System.out.println("드라이버 로드 실패");
} catch (SQLException e){
System.out.println("DB 접속실패");
e.printStackTrace();
}
}
public static void main(String[] args) {
DB_Connection new_db = new DB_Connection();
}
}
위와 같이 자바에서 DB에 직접 연결해서 처리하는 경우 JDBC 드라이버를 로드한 이후
커넥션 객체를 받아와야 한다.
하지만 이렇게 직접 연결해버릴 경우 매번 사용자가 요청할 때 마다 드라이버를 로드하고 커넥션 객체를 생성하여
연결하고 종료하기 때문에 매우 비효율적이다.
이러한 문제를 해결하기 위해서 커넥션풀(DBCP)를 사용한다.
#동시 접속자가 많을 경우
Connection Pool 설명에 따르면 동시 접속 할 경우 pool에서 미리 생성된 conenction을 제공하고 없을 경우에는
connection이 반환될 때까지 번호순대로 대기 상태로 기다린다.
또한 WAS에서 커넥션 풀을 크게 설정하면 메모리 소모가 큰 대신 많은 사용자가 대기시간 없이 사용할 수 있지만 반대로 커넥션 풀을 적게 설정하면 그만큼 대기시간이 길어질 수 있다.
'Java' 카테고리의 다른 글
DTO 클래스에서 toString() 메소드를 작성해주는 이유 (0) | 2022.01.10 |
---|---|
VO vs DTO (0) | 2022.01.07 |
Java - 오버라이딩시 주의 할점 : static 메소드는 오버라이딩 불가능하다 (0) | 2022.01.07 |
Java - 어노테이션(Annotation)이란 무엇인가? (0) | 2022.01.07 |
OCP(Open Closed Principle) 개방 폐쇄 원칙 (0) | 2022.01.06 |