제4장 DataSource 객체와 데이터베이스 URL

내용 목차

4.1. DataSource 객체
4.1.1. DataSource 객체의 속성
4.1.2. DataSource 객체의 추가 속성
4.2. DataSource 객체를 이용한 연결
4.2.1. JNDI를 사용하지 않는 방법
4.2.2. JNDI를 사용한 방법
4.3. 데이터베이스 URL과 데이터베이스 지시자

DataSource 객체는 데이터베이스의 모든 리소스를 지칭하는 포괄적인 개념으로 JDBC 2.0 표준의 확장 API로 처음 소개되었다. 여기서 설명하는 DataSource는 하나의 데이터베이스에 대응된다.

본 장에서는 tbJDBC에서 제공하는 DataSource 객체를 이용하여 데이터베이스에 연결하는 방법과 데이터베이스 URL에 대해 설명한다.

javax.sql.DataSource에 정의된 기본 인터페이스는 다음과 같다.

public interface DataSource
{
    Connection getConnection() throws SQLException;
    Connection getConnection(String username, String password) throws SQLException;
    ...
}

Tibero에서는 com.tmax.tibero.jdbc.ext 패키지를 제공하고 있다. 즉, 각종 DataSource 객체의 속성을 설정할 수 있는 메소드를 제공하여 애플리케이션 프로그램 개발자의 편의를 제공하고 있다.

다음은 추가로 설정할 수 있는 DataSource 객체의 속성이다.

속성타입설명
driverTypeStringJDBC Driver의 타입이다.
login_timeoutint

소켓의 read timeout을 지정한다.

최소 소켓을 생성할 때부터 DB 연결 생성이 완료될 때까지 적용된다. DB 연결 생성이 완료된 뒤에는 read_timeout 속성이 적용된다. 만약 응답이 없이 지정된 시간이 지나면 timeout을 발생시키지만 설정값이 0일 경우에는 timeout을 발생시키지 않는다. (단위: millisecond, 기본값: 0)

logWriterjava.io.PrintWriterDataSource 객체를 위한 Log Writer이다.
maxStatementsint애플리케이션 프로그램 캐시에서 저장할 문장의 최댓값이다.
read_timeoutintDB 연결 생성이 완료된 이후의 소켓의 read timeout을 지정한다. 만약 응답이 없이 지정된 시간이 지나면 timeout을 발생시키지만 설정값이 0일 경우에는 timeout을 발생시키지 않는다. (단위: millisecond, 기본값: 0)
program_nameString프로그램 이름이다. (기본값: JDBC Thin Client)
self_keepaliveString

SELF KEEP ALIVE 기능을 활성화할지 여부를 지정한다.

활성화한 경우에는 self_keepidle, self_keepintvl, self_keepcnt 속성 설정에 따라 연결 대상에 대한 네트워크 접근에 문제가 없는지 확인한다. 전체 확인 과정에 실패하면, 해당 네트워크 연결을 강제로 종료시킨다. (기본값: false)

self_keepidleint

접속 완료, DB 요청/응답 처리 등의 정상적인 네트워크 사용 이후, 다음 번의 정상 처리된 시간이 갱신되지 않을 때, 정상 상황으로 간주할 최대 시간을 지정한다. 지정된 시간이 지나면 네트워크 접근에 대한 확인 절차가 시작된다. self_keepalive 설정이 true인 경우에만 유효하다.

(단위: 초, 기본값: 60)

self_keepintvlint

매 확인할 때의 간격 및 한 번 확인할 때 최대 대기 시간을 지정한다. self_keepalive 설정이 true인 경우에만 유효하다.

(단위: 초, 기본값: 10)

self_keepcntint확인 절차를 총 몇 회까지 수행할 것인지를 지정한다. 지정된 횟수만큼 연속으로 실패하여야만 전체 확인과정이 실패한 것으로 처리된다. self_keepalive 설정이 true인 경우에만 유효하다. (기본값: 3)
URLString데이터베이스 연결을 위한 데이터베이스 URL이다.

다음은 위 표에서 설명한 DataSource 객체의 추가 속성을 설정할 수 있는 메소드이다.

  • public String getDriverType()

  • public void setDriverType(String driverType)

  • public int getLoginTimeout()

  • public void setLoginTimeout(int time)

  • public PrintWriter getLogWriter()

  • public void setLogWriter(PrintWriter writer)

  • public int getMaxStatements()

  • public void setMaxStatements(int maxStatements)

  • public int getReadTimeout()

  • public void setReadTimeout(int readTimeout)

  • public String getProgramName()

  • public void setProgramName(String name)

  • public boolean getSelfKeepalive()

  • public void setSelfKeepalive(boolean keepalive)

  • public int getSelfKeepidle()

  • public void setSelfKeepidle(int keepidle)

  • public int getSelfKeepintvl()

  • public void setSelfKeepintvl(int keepintvl)

  • public int getSelfKeepcnt()

  • public void setSelfKeepcnt(int keepcnt)

  • public String getURL()

  • public void setURL(String url)

DataSource 객체를 이용하여 데이터베이스에 연결하는 방법은 JNDI를 사용하지 않는 방법과 사용하는 방법이 있다. JNDI(Java Naming and Directory Interface)는 Java로 작성된 애플리케이션 프로그램이 DNS, NDS 등과 같은 네이밍, 디렉터리 서비스에 접근하기 위한 API이다.

데이터베이스 URL(Uniform Resource Locator)은 다음과 같이 문자열 값으로 사용한다.

jdbc:tibero:thin:@database_sepcifier

Tibero에서 제공하는 데이터베이스 지시자(database_specifier)는 다음과 같이 사용할 수 있다.

hostname:port:[service_name]

또한 여러 개의 데이터베이스 연결을 지정하기 위한 DESCRIPTION 형태도 제공한다.

(DESCRIPTION=
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(PROTOCOL=TCP)
(ADDRESS_LIST=
 (ADDRESS=(HOST=dbsvr1)(PORT=8629))
 (ADDRESS=(HOST=dbsvr2)(PORT=7629))
 ...
))

위의 예에서 LOAD_BALANCE와 FAILOVER 기능은 선택적으로 적용할 수 있다. 단, ADDRESS_LIST는 하나 이상의 ADDRESS를 반드시 명시해야 한다.