Springboot 외부 library maven build 하여 사용 시 유의할 점(feat, tibero db library)

phantom0308
4 min readJan 15, 2021

--

tibero db를 연동하여 개발을 해야하는 경우가 생겼다.
(tibero db는 tmaxsoft에서 제공하는 국산 유료db이며, 상용화 목적의 서비스 개발이 아니므로, 데몬 라이센스를 받아 테스트 목적으로 사용하였다.)

개발하려는 시스템은 springboot framework 에 maven 을 사용하고 있었는데, tibero db 경우 , maven repository 에서 제공되는 jdbc(Java Database Connectivity)가 없기 때문에, Tmax에서 제공하는 tibero 용 jdbc library를 다운 받아 사용 하여야 한다.

아래는 코드는 흔히 보는 maven build 시, pom.xml에 추가하는 내용이며, 외부 library 경우, 프로젝트 폴더 내에 library를 넣어, 시스템 library에 의존성을 연결하게 된다.

<!-- tibero 6 --><dependency><groupId>com.tmax.tibero</groupId><artifactId>tibero-jdbc</artifactId><version>6</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/tibero6-jdbc.jar</systemPath></dependency>

${project.basedir} 는 프로젝트의 ROOT 경로이다.

maven build, install 진행하면, 아래와 같이 Maven Dependencies 목록에 jar가 생성 된것을 확인 할 수 있다.

tibero DB에 연동하여 개발하고, 이클립스 내에서 tomcat 올려서 테스트까지 완료하였다!

하지만 이후, 난관에 봉착한다.

※ maven 빌드 시, Springboot Application 의 target에 jar가 생성되는데, 이 jar file을 linux에 올려 구동하여 사용하였다.

어찌된 영문인지, 이클립스에서 잘 구동되던 것이 jar file로 구동할때와 다르게 tibero에 대한 Class를 찾지 못한다는 에러가 발생한다.(ClassNotFoundException 발생)

여러 블로그를 찾아보다 보니, 아래와 같은 원인을 찾게 된다.

원인을 말하기 전에, 참고로 말하자면…

Spring boot 프로젝트를 빌드 후, 생성된 jar 파일을 압축 해제하면 아래와 같이 BOOT-INFO, META-INFO, org로 구성 되어있다.
- BOOT-INFO에는 application의 source class file들과 의존성을 가지고 있는 jar library file들로 이루어져 있다.
- META-INFO에는 프로젝트 MANIFEST 파일과 pom.xml로 구성되어 있다.
- org 폴더는 Springboot framework 구동 관련 class file로 구성 되어 있다.

본론으로 돌아와서, BOOT-INF 폴더 안에 의존성을 가지고 있는 library 들을 찾아보니tibero6-jdbc.jar 이 없다…

이유인 즉슨, maven 빌드 시, maven설정으로 includeSystemScorp 값을 true 로 설정하지 않으면, jar 를 생성할 때 외부 library를 포함하지 않고, maven repository 에 존재하는 library만 포함하여 생성하는 것이였다.

설정 값을 넣고 다시 빌드 하여, 생성된 jar를 압축 해제해보니,

tibero-jdbc jar가 포함 되어있고, Application 도 잘 구동 되는 것을 확인하였다.

--

--

No responses yet