IT/정리

DB jdbc

_하늘여우_ 2020. 3. 27. 07:24

1. 보통 웹 애플리케이션이 실행됨과 동시에 연동할 데이터베이스와의 연결을 미리 설정해두며 연결 상태를 유지함 (커넥션풀, ConnectionPool)

2. 즉, 

    - 애플리케이션 실행 시 미리 ConnectionPool 객체를 생성한 후 DB와 연결 맺음

    - 애플리케이션은 DB 연동 작업 발생 시 이 ConnectionPool 객체를 이용하여 작업 수행

3. 일반적으로 ConnectionPool 객체를 구현할 때 Java SE에서 제공하는 javax.sql.DataSource 클래스를 이용하며, 톰캣이 만들어 놓은 ConnectionPool 객체에 접근할 때 JNDI를 사용함

4. 톰캣 내 context.xml 파일의 <Resource> 태그를 이용하여 톰캣 실행 시 연결할 DB 설정함

    <Resource
     name="jdbc/oracle"
     auth="Container"
     type="javax.sql.DataSource"
     driverClassName="oracle.jdbc.OracleDriver"
     url="jdbc:oracle:thin:@localhost:1521:XE"
     username="scott"
     password="tiger"
     maxActive="50"
     maxWait="-1"
    >
    </Resource>

 name="jdbc/oracle"     // name의 jdbc/oracle 로 DataSource에 접근 (JNDI이름)

 driverClassName="oracle.jdbc.OracleDriver"     // 연결할 데이터베이스 종류에 따른 드라이버 클래스 이름

 url="jdbc:oracle:thin:@localhost:1521:XE"     // 접속할 데이터베이스 주소와 포트번호 및 SID 

* 덧)

여기서 jdbc:oracle:thin:@localhost:1521:XE 이 부분이 가장 궁금했는데

- @localhost:1521:XE

  => 위에 적힌대로 DB주소:포트번호:SID 로 보면 됨 (SID는 오라클의 경우 tnsnames.ora에 SERVICE_NAME)

- jdbc:oracle:thin

  => 오라클의 드라이버 정보이며 자세한 것은 하단 출처의  'DB별 드라이버 정보' 에서 확인

  => 오라클 드라이버의 경우 thin과 oci 두 가지가 있으며 oci는 C/C++ 형태의 라이브러리, thin은 java 형태의 라이브러리이며 자세한 것은 하단 출처의 'oci, thin 드라이버 차이' 에서 확인

 maxActive="50"     // 최대 active connection 갯수

maxWait="-1"     // connection pool이 비었을 경우 대기시간 (단위 1/1000초), 기본값 -1(무한대)

    => 자세한 것은 하단 출처의 'Resource 내 속성 의미' 에서 확인

 

출처:

DB별 드라이버 정보 => https://tibang.tistory.com/454

Resource 내 속성 의미 => https://soul0.tistory.com/219

oci, thin 드라이버 차이 => https://blog.naver.com/kletgdgo/90091963113