서블릿객체에서 서비스와 dao를 이용해서 oracle을 이용
-> dao가 oracle과 연결하기 위해서 connection 을 얻어냄. (Connection conn = DriverManeger.getConnection()) -> 원하는 계정에 접속 1521포트이용.
외부자원을 사용하는데 가장 오래걸리는 시간은 연결하는 작업이다. (파일오픈, db와의 연결) -> 클라이언트에게 응답하는시간이 오래걸리게 된다. 요청할때 db와 연결하지 말고 tomcat이 켜졌을때 서비스레이어에서 미리 db와의 연결을 해놓아라.(5개정도 connection객체 미리 준비) = connection pool. 톰캣에서 사용하는 connection pool도 있고 아파치도 있고 정말 다양하게 많음. 어찌됐든 어떤 타입이여도 됨. 어떤 라이브러리를 쓰던간에 미리 만들어놓을 수 있다.. 하지만 전제조건이 있음 = DataSource Interface를 구현해야함.
미리 connection풀을 만들어놓고 다른 DB들과 연결해놔(여러개여도 됨)
톰캣이 켜지는데 오래걸리겠찌만, 어떤 url이 요청이 될때 dao에서 직접 db와 연결하는 것이 아닌 dao에서 service레이어를 찾고 접근해서 jdbc- emplyeeDB - 놀고있는 connection중 하나를 취해서 정보를 얻어오는 것. => 퍼포먼스가 더 좋다. 이럴 때 dataSource를 쓴다. -> 커넥션풀을 사용하기 위해서는 무조건 dataSource로 부터 구현한 클래스를 가지고 있어야한다.
그래서 dao의 코드를 짜는 법은 dataSource를 상속받은 클래스를 선언하고,
Data source ds; InitialContext ctx= new InitialContext();
ctx.lookup("java:comp/env/jdbc/EmployeeDB)"라는 이름으로 db를 찾아서 ds라는 변수에 담음
ds.getConnection() 메서드로 놀고있는 커넥션을 찾아올 수 있음.
datasource가 모두 커넥션 풀링을 하려고 만드는 것은 아님. 다른 용도일 수도 있음.
JNDI : 자바용 naming and directory 에 접근하기 위한 api.
아파치 보다 hikari CP가 더빨라서 이걸 씀.
제어코드는 사용자쪽(자바소스코드)에서 하는게 아니라 제공자쪽에서 함(스프링) dataSource를 뭘쓸것인지처럼 = 제어의 역전