DataSource 객체 및 데이터베이스 URL

tbJDBC 제공 기능인 데이터소스 객체를 이용하여 데이터베이스 연결 방법과 URL에 대해 설명합니다.

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

DataSource 객체

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 객체의 속성

아래는 DataSource 객체에 설정할 수 있는 속성입니다.

속성
타입
설명

databaseName

String

서버에 존재하는 특정 데이터베이스의 이름

dataSourceName

String

DataSource의 이름

description

String

DataSource에 대한 설명

networkProtocol

String

서버와 통신하는 네트워크 프로토콜의 이름 (기본값: TCP)

password

String

서버 접속을 위한 패스워드

portNumber

int

서버 리스너의 포트 번호

serverName

String

데이터베이스의 이름

user

String

서버 접속을 위한 사용자 이름

아래는 위 표에서 설명한 DataSource 객체의 속성을 설정할 수 있는 메소드입니다.

  • public String getDatabaseName()

  • public void setDatabaseName(String databaseName)

  • public String getDataSourceName()

  • public void setDataSourceName(String dataSourceName)

  • public String getDescription()

  • public void setDescription(String description)

  • public String getNetworkProtocol()

  • public void setNetworkProtocol(String networkProtocol)

  • public String getPassword()

  • public void setPassword(String password)

  • public int getPortNumber()

  • public void setPortNumber(int portNumber)

  • public String getServerName()

  • public void setServerName(String serverName)

  • public String getUser()

  • public void setUser(String user)


DataSource 객체의 추가 속성

아래는 추가로 설정할 수 있는 DataSource 객체의 속성입니다.

속성
타입
설명

driverType

String

  • JDBC Driver의 타입

login_timeout

int

  • 소켓의 read timeout을 지정

  • 최소 소켓을 생성할 때부터 DB 연결 생성이 완료될 때까지 적용

  • DB 연결 생성이 완료된 뒤에는 read_timeout 속성이 적용

  • 만약 응답이 없이 지정된 시간이 지나면 timeout 을 발생시키지만 설정값이 0일 경우에는 timeout을 발생시키지 않음 (단위: millisecond, 기본값: 0)

logWriter

java.io.PrintWriter

  • DataSource 객체를 위한 Log Writer

maxStatements

int

  • 애플리케이션 프로그램 캐시에서 저장할 문장의 최댓값

read_timeout

int

  • DB 연결 생성이 완료된 이후의 소켓의 read timeout을 지정

  • 만약 응답이 없이 지정된 시간이 지나면 timeout을 발생 시키지만 설정값이 0일 경우에는 timeout을 발생시키지 않음 (단위: millisecond, 기본값: 0)

program_name

String

  • 프로그램 이름 (기본값: JDBC Thin Client)

self_keepalive

String

  • SELF KEEP ALIVE 기능을 활성화할지 여부를 지정

  • 활성화한 경우에는 self_keepidle, self_keepintvl, self_keepcnt 속성 설정에 따라 연결 대상에 대한 네트워크 접근에 문제가 없는지 확인

  • 전체 확인 과정에 실패하면, 해당 네트워크연결을 강제로 종료시킴 (기본값: false)

self_keepidle

int

  • 접속 완료, DB 요청/응답 처리 등의 정상적인 네트워크 사용 이후, 다음 번의 정상 처리된 시간이 갱신되지 않을 때, 정상 상황으로 간주할 최대 시간을 지정

  • 지정된 시간이 지나 면 네트워크 접근에 대한 확인 절차가 시작

  • self_keepalive 설정이 true인 경우에만 유효 (단위: 초, 기본값: 60)

self_keepintvl

int

  • 매 확인할 때의 간격 및 한 번 확인할 때 최대 대기 시간을 지정

  • self_keepalive 설정이 true인 경우에만 유효 (단위: 초, 기본값: 10)

self_keepcnt

int

  • 확인 절차를 총 몇 회까지 수행할 것인지를 지정

  • 지정된횟수만큼 연속으로 실패하여야만 전체 확인과정이 실패한 것으로 처리

  • self_keepalive 설정이 true인 경우에만 유효 (기본값: 3)

URL

String

  • 데이터베이스 연결을 위한 데이터베이스 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 객체를 이용한 연결

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

JNDI를 사용하지 않는 방법

아래는 JNDI를 사용하지 않고 DataSource 객체를 사용하여 데이터베이스에 연결하는 가장 일반적인 방법입니다. 방법은 TbDataSource 객체를 생성한 후 기본 속성을 설정하면 됩니다.

예를 들면 아래와 같습니다.

TbDataSource ds = new TbDataSource();

ds.setDriverType("thin"); 
ds.setServerName("tmaxh4"); 
ds.setNetworkProtocol("tcp");
ds.setDatabaseName("tibero"); 
ds.setPortNumber(8888); 
ds.setUser("tibero"); 
ds.setPassword("tmax");

Connection conn = ds.getConnection();

JNDI를 사용한 방법

아래는 JNDI를 사용하여 데이터베이스에 연결하는 예입니다.

  1. TbDataSource 객체를 생성한 후 기본 속성을 설정합니다.

TbDataSource ds = new TbDataSource();

ds.setDriverType("thin"); 
ds.setServerName("tmaxh4"); 
ds.setNetworkProtocol("tcp"); 
ds.setDatabaseName("tibero"); 
ds.setPortNumber(8888); 
ds.setUser("tibero"); 
ds.setPassword("tmax");

  1. 초기화된 DataSource 객체를 JNDI에 등록합니다.

Context ctx = new InitialContext(); 
ctx.bind("tibero/webdb", ds);

InitialContext()를 호출하면 JNDI를 참조하는 context 객체가 생성되고, ctx.bind()를 호출하면 DataSource 객체와 JNDI 이름이 연결됩니다. 즉, 위에서 연결시킨 'tibero/webdb'만을 이용하여 아래의 예처럼 언제든지 데이터베이스에 연결할 수 있습니다.

TbDataSource ds = (TbDataSource)ctx.lookup("tibero/webdb"); 
Connection conn = ds.getConnection();


데이터베이스 URL과 데이터베이스 지시자

데이터베이스 URL(Uniform Resource Locator)은 아래와 같이 문자열 값으로 사용합니다.

jdbc:tibero:thin:@database_sepcifier

URL에 user name, password를 포함하는 형태도 제공합니다.

jdbc:tibero:thin:user/password@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를 반드시 명시해야 합니다.)

Last updated