DataSource

0

개념정리

목록 보기
22/33

dataSource

  • tomcat
    웹서버 - 요청 시에 html, css, js, jpg/png/txt 등 응답을 받아갈때 내용을 그대로 응답해줌
  • a.jsp요청이 들어오게 되면 컨테이너가 역할을 함
    엔진(컨테이너) - jsp페이지를 서버에서 실행을 함. -> a에대한 서블릿 객체가 있는지 확인. 없으면 생성 있으면 그대로 사용 ->
    서비스 레이어 - 디렉토리 구조로 이름을 부여해서 관리 (Naming and DirectoryService)
  • 서비스 : java:comp/env 라는 루트서비스에서 시작. 이 밑에 service를 더 등록할 수 있다. jdbc라는 하위를 만들고 그 밑에 employeeDB를 특정 번지수에 저장해놓고, 이름에 해당하는 database connection pool 객체를 만들어 놓고 다른 db와 연결해놔.

  • 서블릿객체에서 서비스와 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를 뭘쓸것인지처럼 = 제어의 역전

profile
백엔드를 공부하고 있습니다.

0개의 댓글