java oracleDB 커넥션 풀

조회수 1878회

안녕하세요 eclipse로 웹 어플리케이션을 배우는 중에 있습니다. 현재 oracle developer database로 이클립스와 연동하여 데이터를 넣고 출력하는 작업을 하고 있는중에 궁금한 것이 있어 질문합니다.

커넥션 풀을 사용하는데에 있어, 먼저 tomcat의 context 부분에 있어서 name, type부분이 잘 이해가 안되어 질문 드립니다. type에 있어서는 DataSource라는 method를 불러와 지정해 준 것인지 궁금합니다. 그리고 name 부분에 있어서는 따로 사용자가 임의로 설정해 주는 것인지 아니면 각 oracle db 마다 고유의 name이 있는지 궁금합니다.

그리고 DAO에 datasource를 불러와 커넥션 풀을 사용하는 것으로 알고 있는데

datasource = (DataSource)context.lookup("java:comp/env/jdbc/Oracle11g");

datasource 객체를 선언하고 context로 lookup을 해주는데 lookup안의 string 부분이 어떤 뜻인지 잘 모르겠습니다.

인터넷에 찾아 보아도 이 부분에 있어서는 많이 다루지 않아 여쭤봅니다. 아시는분 설명해 주시면 감사하겠습니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    JNDI(Java Naming and Directory Interface)에 대해서 먼저 이해하셔야합니다.

    간단하게 말하면 이름을 통해서 객체를 매핑시켜준다고 보면 될 것 같습니다.

    oracle db 마다 고유의 name 보다는 정확하게 jndi 객체 고유의 name 이라고 보면 됩니다. oracle db가 여러개라면 jndi 객체도 여러개가 되겠죠. 또 db만 등록할 수 있는 것도 아니고요.

    type은 사용하고자하는 클래스입니다. 그래서 lookup 의 결과를 DataSource 로 캐스팅 한 거고요.

    질문 내용에 기반하여 톰캣을 예로 들면,

    웹어플리케이션이 배포될 때 Oracle11g 라는 이름을 가진 jndi 객체가 등록됩니다. name=jdbc/Oracle11g, type=javax.sql.DataSource 등 미리 정의해놓은 context가 있겠죠.

    이 jndi 객체는 JNDI 네임 스페이스의 java:comp/env 부분에 배치됩니다. (톰캣 홈페이지에 따르면) 이를 통해 javax.naminig.Context 클래스의 lookup 메서드를 통해 name과 일치하는 jndi 객체를 찾는 겁니다.

    http://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html 한번 읽어보시면 도움 될 것 같네요.

    ++++ 추가

    https://www.holaxprogramming.com/2013/01/10/devops-how-to-manage-dbcp/

    http://d2.naver.com/helloworld/5102792

    • 감사합니다. 한가지만 더 여쭤봐도 될까요? 그러면 서버에 context을 지정해 주고, 제가 DBCP를 사용하고 싶은 클래스에서 datasource 객체를 선언해, 객체를 선언한 변수가 context.lookup을 통해 지정해 놓은 context 와 일치하는 jndi객체를 찾아 해당 DB와 연결해 준다는 것으로 이해했습니다. 그런데 DBCP를 사용할 경우 JDBC드라이버를 로드하는 수행이 없어졌는데 DBCP로 미리 CONNECTION 객체를 생성해 주어서 로드를 할 필요가 없는 건가요? 최한솔 2018.1.25 11:20
    • jndi 는 was 단에서 설정하는 것이고 dbcp 는 애플리케이션 단에서 설정한다고 보면 됩니다. 설정 내용이 어디에 있는가의 차이로 보시면 될 것 같습니다. jdbc 드라이버 로드는 필수적이라 두경우 모두 하는데.... jndi와 dbcp 차이에 대해 검색해보세요. 답변에 커넥션풀 관련 글 몇개 추가할테니 읽어보시고요. 김선우 2018.1.25 12:50
    • 네 알겠습니다. 답변 감사합니다!! 최한솔 2018.1.25 21:47

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)