Skip to end of metadata
Go to start of metadata



개요 


본 문서는 Altibase와 TOMCAT 간 연동하는 방법에 대한 가이드를 제공한다.

본 문서의 테스트 환경은 다음과 같다.

Altibase v6.3 이상 버전

TOMCAT v7.0 버전

 

Icon

이 문서와 관련된 오류 및 개선사항은 기술지원포털 또는 기술지원센터로 문의주시기 바랍니다.

Icon

이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다.

이 문서에 포함된 Altibase 제품의 특징이나 기능의 개발, 발표 등의 시기는 Altibase 재량입니다.

Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다.

 

 

TOMCAT 설치 


TOMCAT 설치 방법에 대해 간단히 살펴보도록 한다. TOMCAT 7 제품을 설치한다.
TOMCAT을 설치하기 전에 반드시 JDK(Java Development Kit) 또는 JRE(Java Runtime Environment) 가 설치되어 있어야 한다.

 

TOMCAT 다운로드


http://tomcat.apache.org/download-70.cgi 사이트에 방문하여 최근 release된 TOMCAT 바이너리 파일을 다운받는다.( apache-tomcat-7.0.56.tar.gz)

 

TOMCAT 설치


다운로드 한 압축 파일을 FTP로 옮긴다.(tomcat 설치 계정)
업로드 한 압축 파일을 적절한 디렉토리에 푼다.(tar xvzf apache-tomcat-7.0.56.tar.gz)
Binary이기 때문에 압축을 푸는 것으로 설치는 끝난다.

<tomcat 설치 예>

 

환경변수 설정


다음의 환경변수를 설정한다.

1. CATALINA_HOME : TOMCAT을 설치한 디렉토리를 지정한다.
2. JAVA_HOME 혹은 JRE_HOME : JDK 혹은 JRE가 설치된 디렉토리를 지정한다.
3. PATH : $CATALINA_HOME/bin 디렉토리(1번에 설정한 TOMCAT설치디렉토리 하위의 bin디렉토리의 경로)를 PATH에 추가한다.

<linux 환경설정 예>

 

TOMCAT 구동


다음의 명령어를 수행하여 TOMCAT을 구동시킨다.

 

TOMCAT 종료


다음의 명령어를 수행하여 TOMCAT을 종료시킨다.

 

 

JDBC Driver 설정 


TOMCAT에서 Altibase JDBC driver를 적절한 곳에 위치시켜 놓아야 Altibase와 연동이 가능하다.

 

Altibase JDBC Driver 파일을 얻는 방법


Altibase에서 제공하는 JDBC driver는 Altibase.jar 이다. 이 파일은 Altibase가 설치되어있는 서버의 $ALTIBASE_HOME/lib 디렉토리 안에 존재한다.

Altibase v5 이상부터는 $ALTIBASE_HOME/lib 디렉토리에 Altibase.jar와 Altibase5.jar 파일이 존재하는데, Altibase.jar는 일반 JDBC driver 파일이며, Altibase5.jar는 Altibase v5 그 이하의 버전을 함께 연동하고 싶을 때 사용한다. 따라서 하나의 Altibase와 연동한다거나, 동일한 버전의 여러대의 Altibase와 연동하기를 원한다면 일반적으로 $ALTIBASE_HOME/lib/Altibase.jar 파일을 사용하면 된다.

 

Altibase JDBC Driver 버전을 확인하는 방법


Altibase JDBC driver 버전을 확인하는 방법은 다음의 명령어를 수행하면 된다.

연동하려는 Altibase와 Altibase JDBC Driver가 호환 가능한지 확인을 위해 Altibase 버전 확인이 필요하다. 이때, Altibase의 cm protocol version과 Altibase JDBC Driver의 CMP가 동일하면 호환 가능하다.

버전이 UP 되면서 JDBC 관련 버그가 fix되었을 가능성이 있으므로, 일반적으로 Altibase 버전과 Altibase JDBC driver버전을 동일하게 맞추거나 최신의 Altibase JDBC driver 파일을 사용하는 것을 권장한다.

 

JDBC Driver 파일을 TOMCAT에 위치


TOMCAT에서 Altibase와 연동하기 위해 Altibase JDBC driver(Altibase.jar)를 적절한 곳에 위치시켜 TOMCAT에서 자동으로 인식할 수 있도록 해야하는데 다음 중 한가지 방법으로 설정하면 된다.

1. Altibase.jar를 CLASSPATH에 추가

2. Altibase.jar를 $CATALINA_HOME/ lib 디렉토리 안에 위치

 

 

Altibase와 TOMCAT 연동 


Altibase와 TOMCAT을 연동하는 방법에 대해 기술한다. 연동하는 방법으로는 DBCP를 이용하여 연동, 일반 JDBC를 이용하여 연동, Altibase의 ConnectionPool을 이용하여 연동하는 방법이 있다.

 

JNDI DataSource 연동 


JNDI DaraSource를 구성하는 방법은 $CATALINA_HOME/conf/context.xml에 아래 내용을 기술한다.

 

웹 어플리케이션 홈/WEB-INF/web.xml에 아래 내용을 추가하면 웹 에서 사용 가능하다.
웹 어플리케이션 홈/WEB-INF/web.xml 

 

태그에 정의하는 속성은 다음과 같다.

driverClassName

Altibase JDBC driver class Name

url

ALTIBASE와 연결을 위한 Connection string정보 jdbc:Altibase://IP:port_no/db_name” 형태로 기입

Username

데이터베이스 계정

Password

데이터베이스 패스워드

maxActive

최대 Connection 수, 0은 무제한. default는 8

initialSize

초기 Connection 수. default는 0

maxIdle

Pool에 idle하게 유지하는 최대 연결 수. default는 8

minIdle

Pool에 idle하게 유지하는 최소 연결 수. default는 0

maxWait

최대 연결 시도 시간 (단위 : millisec) -1은 무한 대기
Default는 무한 대기

validationQuery

연결의 validation을 체크하기 위해 사용하는 SQL문
반드시 최소한 1개이상의 row가 return되는 select문으로 지정
Ex) select 1 from dual

defaultAutoCommit

Autocommit 모드를 설정. default는 true

defaultTransactionIsolation

Transaction Isolation level을 설정한다.
NONE, REPEATABLE_READ, SERIALIZABLE
의 값을 설정할 수 있고, default는 DB서버의 default 값을 따른다. ALTIBASE의 isolation level은 default 로 READ COMMITTED 이다.

removeAbandoned

버려져서 사용되지않는 Connection에 대한 제거기능을 결정하는 속성. default 는 false
Connection이 제거되는 시점은 Connection 개수가 maxActive설정된 값을 초과하여 Connection을 요청한 이후이다. maxActive에 도달하지 않은 시점에는 Connection을 할당받을 수 있으므로, 사용되지않는 Connection 제거가 일어나지 않는다.

removeAbandonedTimeout

버려져서 사용되지않는 connection에 대한 제거가 일어나는 시간을 설정하는 속성. default로 300초

logAbandoned

버려져서 사용되지않는 connection에 대한 제거시 로그에 stack정보를 남길지를 결정하는 속성. default로 false

프로그램에서 다음과 같이 JNDI Datasource를 통해 Connection을 얻는다.
이때, java:/comp/env는 JNDI를 lookup할 때 사용하는 prefix이다.

또는

다음은 위에 설정한 JNDI Datasource를 이용하여 ALTIBASE와 연동하는 jsp 예제 프로그램이다.

 

일반 JDBC 방법으로 연동


1. JDBC driver 로딩한다.

2. Connection 객체 얻는다.

3. Statement를 객체를 얻는다.

4. SQL문을 실행한 후 ResultSet에 담는다.

5. 작업이 완료된 후 관련된 모든 객체를 close한다.

다음은 일반 JDBC를 이용하여 ALTIBASE와 연동하는 jsp 예제 프로그램이다.

 

 

Fail-Over Configuration 


Altibase가 제공하는 FailOver 기능을 이용하여 TOMCAT과 연동하는 방법에 대해 기술한다.

TOMCAT은 FailOver 기능을 제공하지 않는다. 하지만 Altibase v5.3.3 부터 FailOver 기능을 제공하기 때문에, Altibase의 FailOver기능을 이용하면 FailOver가 구현 가능하다.

사용방법은 다음과 같다.

1. context.xml 파일에 JNDI DataSource를 지정할 때 Connection url부분에 FailOver관련 속성을 지정해준다.

 

FailOver/server.xml 파일 참조

FailOver 관련 속성은 다음과 같다. 자세한 설정은 Replication Manual를 참조 하면 된다.

AlternateServer

장애 발생시 접속하게 될 가용 서버를 나타내며 (IP Address1:Port1, IP Address2:Port2,...) 형식으로 기술한다.

ConnectionRetryCount

가용 서버 접속 실패 시, 접속 시도 반복 횟수

ConnectionRetryDelay

가용 서버 접속 실패 시, 다시 접속을 시도하기 전에 대기하는 시간(초단위)

LoadBalance

on으로 설정하면 최초 접속 시도 시에 기본 서버와 가용 서버를 포함하여 랜덤으로 선택한다. off로 설정하면 최초 접속 시도 시에 기본 서버에 접속하고, 접속에 실패하면 AlternateServer로 기술한 서버에 접속한다.

SessionFailOver

STF(Service Time Fail-Over)를 할 것인지 여부를 나타낸다.
on : STF, off : CTF
CTF(Connection Time Fail-Over)는 DBMS 접속 시점에 장애를 인식하여 장애가 발생한 DBMS대신 다른 가용 노드의 DBMS로 접속하고 서비스를 진행한다.
STF(Service Time Fail-Over)는 DBMS 접속에 성공하여 서비스하는 도중에 장애가 발생하는 것으로, 다른 가용 노드의 DBMS에 다시 접속하여 세션의 프로퍼티를 복구한 후 사용자 응용 프로그램의 업무 로직을 다시 수행하도록 하는 것을 의미한다. 즉 장애가 발생한 DBMS에서 수행된 작업을 다시 한 번 수행할 필요가 있는 경우이다.

CTF 및 STF 의 구현방법은 ALTIBASE FailOver 기술문서를 참조한다.

 

 

TOMCAT 연동 시 주의사항 


TOMCAT 연동시 주의사항에 대해 설명한다.

 

TOMCAT 사용 시 JDK 환경


DBCP를 이용하여 preparestatement를 처리할 때 고려해야 할 사항이 있는데 성능 향상을 위해 Tomcat 설정 중 testOnBorrow ( default : true), poolPrepareStatements ( default : false) 설정을 변경 사용할 경우 되도록 JDK( JRE ) 1.6 이상의 환경에서 사용하길 권장한다.

문제의 증상
Tomcat log (version 6)

정상적인 경우

확인 방법

참고 : http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html

권장 Tomcat 설정 값

 

환경1

환경2

환경3

JDK Ver

1.5

1.6

1.6

Tomcat Ver

6 (dbcp ver 1.3)

6 (dbcp ver 1.3)

7 (dbcp ver 1.4)

testOnBorrow

TRUE 만 권장 (Default)

True/False

True/False

poolPrepareStatements

FALSE 만 권장 (Default)

True/False

True/False

Result

testOnBorrow=False,
poolpreparestatement=true
사용시 권장하지 않음,
JRE 또는 JDK1.6으로 업그레이드 권장

권장

권장

  • testOnBorrow
    + connection pool에서 connection을 가져올 때 해당 connection이 유효성 검사 여부
    + 기본값은 false이며, 일반적으로 기본값을 사용한다. true설정하게 되면 매번 validationQuery를 수행하기 때문에 약간의 성능저하를 감수해야 한다.
  • poolpreparestatement
    + DBCP에서 Statement 풀링이 커넥션 별로 유지되고 있기 때문에, 응용서버(App)에서는 질의를 컴파일 한 정보를 계속 유지하게 된다. 이 후 같은 질의에 대해서는 prepare 과정 없이 execute 단계만 반복함으로써 성능 향상을 가져올 수 있다.

 

사용한 Resource의 반납 


프로그램에서 할당한 Connection, Statement, ResultSet는 사용이 끝나면 반드시 명시적으로 close해줘야한다. 만약 close해주지 않으면 위의 Resource를 선언한 변수의 life cycle동안 계속 Resource를 할당하고 있기 때문에 불필요한 Resource 소모를 가져오게 된다.

Connection을 close해주지 않으면 pool로 Connection이 반납되지 않기 때문에 다른 곳에서 Connection을 사용하지 못할 것이다.
Statement는 session이 유지되는 동안 어플리케이션 뿐만 아니라, DB 서버상에도 Statement 정보가 메모리에 할당되어 남아있게 된다. 따라서 Statement를 close해주지 않고 Connection도 close해주지 않는다면, 어플리케이션에서 불필요한 Resource가 계속 할당되는 것도 문제지만, DB 서버의 Query_Prepare 메모리 영역도 증가하게 된다.

만약 위의 Resource들을 명시적으로 close해주지 않았다면, 해당 Resource를 선언한 변수의 life cycle동안 메모리에 할당되어 있다가 life cycle이 끝나면 해당 Resource를 더 이상 참조하지 않게 되므로, JVM(Java Virtual Machine)의 GC(Garbage Collector)가 후에 해당 Resouce들을 해제하게 될 것이다. 하지만 일반적으로 GC는 우선순위가 가장 낮은 쓰레드이다. 따라서 GC가 Resource를 해제하는 시점이 언제인지는 예측하기가 어렵다. 즉, 어플리케이션에서 변수의 life cycle이 끝나서 더 이상 참조되지 않기 때문에 바로 해제될 수 있는 것이 아니고, GC가 해제하지 않는 이상 DB 서버에서는 계속 해당 Resource에 대한 정보를 가지고 있게 된다.

따라서, 반드시 사용이 끝난 Resource는 명시적으로 close 해주는 것을 권장한다.

 

버려진 Connection을 제거 


DBCP를 이용하여 connection을 처리할때 문제점이 하나 있는데 바로 웹어플리케이션에서 명시적으로 ResultSet, Statement, Connection을 close해줘야 한다는 것이다. 만약 웹어플리케이션에서 이러한 resource를 close하는 것을 실패했다면 이후에 resource들을 재사용할 수 없게 된다. 이러한 현상을 Connection pool leak이라고 부르며, connection pool leak이 지속된다면 최종에는 이용가능한 connection이 모두 없어지게 될 것이다. 이러한 문제를 막기위해 DBCP에서 문제가 발생하여 버려진 connection을 복구하고 로깅하는 방법을 제공하는데 다음의 속성을 설정하면 된다.

 

 

TOMCAT 연동 시 오류사항 


TOMCAT에서 Altibase 연동 시 자주 발생되는 오류사항에 대한 내용을 설명한다.

 

No Suitable Driver 


java.sql.SQLException: No suitable driver 오류는 접속 URL정보중 Altibase에 해당하는 부분을 잘못 기입했을 때 발생한다.

 

Communication link failure


java.sql.SQLException: Communication link failure 오류는 다음과 같은 상황에서 발생한다.

1. ALTIBASE DB server가 구동중이지 않는 상황

2. ALTIBASE JDBC driver 파일이 ALTIBASE DB server의 버전과 상이한 경우
예) ALTIBASE DB Server의 버전은 5.3.1 버전인데, 5.1.1 버전의 ALTIBASE JDBC driver 파일을 사용하는 경우

3. 접속 URL 정보가 잘못 설정된 경우

3-1. IP가 잘못 설정된 경우
3-2. PORT_NO가 잘못 설정된 경우

예) ALTIBASE DB Server의 IP주소가 10.10.10.10 이고 PORT_NO가 20300인데 IP주소를 10.10.10.1로 설정하고나 PORT_NO를 20301로 설정한 경우

 

그외 확인 사항


간혹 웹 어플리케이션의 context.xml 파일에 DataSource를 지정했을 때 Connection url부분이 정확함에도 불구하고 Client unable to establish connection 에러 혹은, driver 클래스가 null이라는 에러를 접할 수도 있다. 이때는 $CATALINA_HOME/conf/catalina 디렉토리안의 웹어플리케이션이름.xml 파일을 지우도록 한다. 간혹 웹 어플리케이션의 context.xml 파일이 변경되었는데도 해당 파일이 reloading이 안되어 에러가 발생하는 경우가 있다.

 

 

  • No labels