JDBC 프로그램의 사용자가 많아지면 하나의 작업이 만들어지고 close 되기 전에 동시접속자가 많아지면 Connection이 부족해져서 DB가 과부하가 걸려 서비스가 중단이 될수 있다.
이 문제점을 해결하기 위해 필요한것이 DBCP 라는 것이 있다.
DBCP : DATABASE Connection Pool, 데이터베이스에서 사용되는 커넥션 객체들의 울타리
Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.ObjectPool
의존성 라이브러리 에러
A라이브러리에서 또다른 B라이브러리를 필요로 할때
commons-dbcp2-2.9.0 // DBCP 외장 라이브러리
commons-pool2-2.11.1 // DBCP 외장 라이브러리에서 요구하는 추가 라이브러리
commons-logging-1.2 // 다시 추가로 요구하는 라이브러리
this.bds = new BasicDataSource();로 인해서 커넥션 에러가 나기 때문에
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
커넥션 에러
private BasicDataSource bds = new BasicDataSource(); 이렇게 해야됨
특정 클래스들은 new를 자유롭게 사용해선 안되고 단하나의 인스턴스로만 사용하게끔 제한해야 하는데, 이떄 사용 되는 디자인 패턴
들어오는 접속자마다 DAO를 생성하는게 아니라 하나를 만들어놓고 하나가지고 여러명이 쓰게끔 해줘야 함특정클래스를 한개이상 못만들게 하기 위해 싱글톤패턴
기존처럼 Main(뷰)에서 CafeMenuDAO dao = new CafeMenuDAO(); 를 다수의 사용자가 발생하면 접속자 한명한명마다 DAO를 하나씩 만들어서 쓰는데( 따로따로 코드를 실행)
CafeMenuDAO dao = new CafeMenuDAO(); 하면 내부의 private BasicDataSource bds = new BasicDataSource(); 도 계속 생성이 되면
BasicDataSource의 커넥션도 this.bds.setInitialSize(30); 30개 60개 ~ 계속 생성되기 떄문에 생성자로 빼두고, 싱글톤 패턴 사용으로 한개의 DAO만을 가지고 여러명이 사용하게끔
static 은 new , 객체 생성없이 사용 가능. // 싱글톤패턴을 사용하려는데 어떻게 new 없이 접근을 할것인가 ? 그래서 public static CafeMenuDAO getInstance() static으로 만들어서
객체생성없이 CafeMenuDAO dao = CafeMenuDAO.getInstance(); 접근을 하고 if 과정을 통해 new CafeMenuDAO()를 사용하기 위함.
싱글톤패턴도 DAO의 종류가 많아지면 싱글톤패턴도 무효화 될수 있다< 코드 상에 DBCP 를 만들지 않고 플랫폼에 DBCP 요청
synchronized, 메서드 작업이 끝날때까지 기다려줘야 함 다음 쓰레드로부터 안전한 쓰레드 세이프, 동시에 여러명이 사용하면 안되는 메서드에 사용,