◎ 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 변수에 할당
public class MemberManagerService { private static MemberManagerService instance = new MemberManagerService(); private MemberDAO dao; private MemberManagerService() { dao = MemberDAO.getInstance(); } public static MemberManagerService getInstance() { return instance; } //가입처리 메소드 public void registerMember(MemberDTO mto) throws SQLException, DuplicatedIdException, DuplicatedRegisterNumberException{ //1. 등록된 id가 있는 지 체그 // - 이미 등록된 ID라면 DuplicatedIdException를 발생 시킨다. if(dao.selectMemberById(mto.getId())!= null) { throw new DuplicatedIdException("이미 존재하는 ID입니다."); } //2. 주민번호가 등록되어있는지 체크 // - 이미 등록된 주민번호라면 DuplicatedRegisterNuberException을 발생 시킨다. if(dao.selectMemberByRegisterNumber(mto.getRegisterNumber1(), mto.getRegisterNumber2()) != null) { throw new DuplicatedRegisterNumberException("이미 존재하는 주민번호입니다."); } } }
DuplicatedIdException.java
☞ package : member.exception
☞ exception을 extends해서 중복된 id가 있으면 message를 출력
소스보기
package member.exception;
public class DuplicatedIdException extends Exception { public DuplicatedIdException() {} public DuplicatedIdException(String message) { super(message); } }
DuplicatedRegisterNumberException.java
☞ package : member.exception
☞ exception을 extends해서 중복된 주민번호가 있으면 message를 출력
소스보기
package member.exception;
public class DuplicatedRegisterNumberException extends Exception{ public DuplicatedRegisterNumberException() {} public DuplicatedRegisterNumberException(String message) { super(message); } }