문제
JBOSS EAP7에서 oracle DB 연동 후 아래와 같은 오류가 발생합니다.
java.sql.SQLException: 지원되지 않는 문자 집합(클래스 경로에 orai18n.jar 추가): KO16MSWIN949
원인
이는 ojdbc8에서 지원하지 않는 인코딩 방식이 포함되어 있어 발생한 에러입니다. 또한 오류 자체에서도 클래스 경로에 orai18n.jar을 추가해 달라고 친절하게 안내하고 있습니다.
해결
해당 인코딩을 지원하는 orai8n.jar를 JDBC 드라이버에 의존성으로 추가하면 문제가 해결됩니다.
ora18n.jar를 추가하기 위해서는 JDBC 드라이버를 배포 방식으로 제공할 수 없습니다.
JBOSS_HOME/modules 디렉터리 하위에 모듈 방식의 등록이 필요합니다.
orai18n.jar가 포함된 OJDBC 드라이버 추가 방법
Step 1: 드라이버 파일 준비
아래의 오라클 사이트에서 드라이버 파일을 다운로드합니다. ojdbc8-full.tar.gz 파일 안에 ojdbc8.jar, orai18n 파일 모두 포함하고 있으니 하나만 받아서 압축을 풀어 주면 됩니다.
https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

Step 2: ojdbc 모듈 등록
Step1에서 다운로드한 두 파일과 모듈 설정에 필요한 “module.xml”파일을 생성하여 지정된 위치에 함께 넣어주면 모듈 인식이 가능해집니다.
- 다운로드 한 파일을 EAP 엔진의 모듈 디렉터리 하위로 이동 ( 파일 위치와 모듈 이름은 동일 )
$ mkdir -p $JBOSS_HOME/modules/com/oracle/jdbc/main/
$ cp ojdbc8.jar orai18n-11.2.0.4.jar $JBOSS_HOME/modules/com/oracle/jdbc/main/
$ ls $JBOSS_HOME/modules/com/oracle/jdbc/main/
ojdbc8.jar orai18n-11.2.0.4.jar
- “module.xml” 파일 생성
$ vi $JBOSS_HOME/modules/com/oracle/jdbc/main/module.xml
<?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.1" name="**com.oracle.jdbc**"> ## 모듈 위치와 동일하게 설정
<resources>
<resource-root path="**ojdbc8.jar**"/> ## 파일명과 동일하게 설정
<resource-root path="**orai18n-11.2.0.4.jar**"/> ## 파일명과 동일하게 설정
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
위에서 본 바와 같이 모듈 등록은 jar 파일을 디렉터리 구조에 맞게 위치 시키고, module.xml 파일을 생성해서 드라이버 파일과 함께 넣어주게 되면 끝입니다.
이제 해당 모듈을 사용하는 datasource 설정에 드라이버를 추가하여 사용할 수 있습니다. 이 방법은 아래 Step3과 Step4에서 설명합니다.
Step 3: oracle 드라이버 등록 ( 인스턴스에서 실행 )
- 인스턴스의 jboss-cli에서 드라이버 설정
## 드라이버 생성
[standalone@192.168.243.151:9990 /] /subsystem=datasources/jdbc-driver=oracle:add(driver-name=oracle,driver-module-name="com.oracle.jdbc",driver-xa-datasource-class-name="oracle.jdbc.xa.client.OracleXADataSource")
{"outcome" => "success"}
## 드라이버 확인
[standalone@192.168.243.151:9990 /] ls /subsystem=datasources/jdbc-driver
h2 oracle ## 등록된 oracle 드라이버 확인
Step 4: DataSource 설정
- 사용하는 설정 파일의 datasource 부분에서 드라이버 이름을 방금 설정한 oracle로 교체합니다.
# vi $BASE_DIR/configuration/standalone.xml
...
<datasource jta="false" jndi-name="java:jboss/oracleDS" pool-name="oracleDS" enabled="true" use-ccm="false">
...
**<driver-class>oracle.jdbc.OracleDriver</driver-class>
<driver>oracle</driver>**
...
</datasource>