본문 바로가기

Wanna be a Programmer/Servlet & JSP

Servlet & JSP day16 - DataSource와 Connection Pool

 

DataSource

☞ DriverManager의 upgrade version으로 Connection Factory이다.

◎ JDBC 2.0에서 지원

◎ DataSource 객체는 연결할 DB에 대한 정보(driver, url, 계정)을 가지고 있다.

◎ 내부적으로 Connection Pool을 지원할 수 있다.

◎ 구현 방식 : Vendor마다 다름

- 요청 시 Connection을 생성하여 제공

- Connection Pool을 이용해 Connection을 미리 생성후 요청 시 제공

 

Connection Pool(연결풀)

☞ 데이터베이스와 연결된 Connection을 미리 만들어서 Pool속에 저장해 두고, 필요할 때마다 Connection을 Pool로 부터 가져다 쓰고 반환하는 기법

 

☞ Connection Pool의 특징

◎ Pool속에 미리 connection이 생성되어 있기 때문에 Connection을 생성하는데 걸리는 연결시간을 소비하지 않는다(시간적인 낭비해소)

◎ Connection을 계속해서 재사용하기 때문에 생성되는 Connection수가 많지 않다. → 효율적인 코딩 가능

- 속도가 빨라지고 웹 어플리케이션의 사용자가 많아도 다운되지 않음(전체적인 성능 및 처리량 향상)

 

DataSource와 DriverManager 차이

☞ DriverManager를 통해서 얻어내는 Connection 인스턴스는 데이터베이스와 실질적인 접속을 의미, 따라서 Connection.close()를 수행하면 데이터베이스와 접속이 끊긴다.

 

☞ DataSource를 통해서 얻어내는 Connection은 실질적인 접속이 아니라 논리적인 접속이다. Connection Pool에 있는 실질적인 데이터베이스 Connection에 대응될 뿐이므로, DataSource를 통해서 얻는 Connection 인스턴스를 Close()메소드로 종료하면 실질적인 접속이 끊기는 것이 아니라, Connection에 할당된 실질적인 Connection과의 논리 연결이 해제가 된다는 말이다.

 

DatabaseUtility.java

☞ package : member.util

☞ 싱글톤 패턴을 이용해 생성자에서 DataSource객체를 생성해서 instance 변수에 할당

소스보기

 

MemberDAO.java

☞ package : member.model.dao

☞ DataSource객체에 담긴 데이터베이스 연결과 관련된 정보를 싱글톤 패턴으로 디자인

◎ id로 회원 정보를 조회하여 return하는 메소드 구현

◎ 주민번호로 회원정보 조회하는 메소드 구현

◎ 회원정보를 DB에 insert하는 메소드 구현

소스보기

 

MemberManagerService.java

☞ package : member.model.service

☞ 가입처리 메소드 구현

◎ db에 등록된 id가 있는지 체크하여 이미 등록되어있으면 DuplicatedIdException 발생시킨다.

◎ db에 등록된 주민번호가 있는지 체크하여 이미 등록되어있으면 DuplicatedRegisterNuberException 발생시킨다.

소스보기

 

DuplicatedIdException.java

☞ package : member.exception

☞ exception을 extends해서 중복된 id가 있으면 message를 출력

소스보기

 

DuplicatedRegisterNumberException.java

☞ package : member.exception

☞ exception을 extends해서 중복된 주민번호가 있으면 message를 출력

소스보기