본문 바로가기
Back/Spring Boot

[SpringBoot] 외장 tomcat에 JNDI 설정 (+war)

by 은z 2023. 10. 23.

상황

WAS에 데이터베이스 정보를 설정하고 연결하는 방식으로 개발해달라는 요청이 들어왔다.

이번 기회를 통해 tomcat에 JNDI 설정을 하는 방법을 정리해보았다.

 

 


실행환경 및 버전

  • OS : Ubuntu 20.04.3 LTS
  • build tool : Gradle
  • IDE : Intellij 유료버전
  • JDK : open JDK 11
  • Spring Boot : 2.7.9
  • Tomcat : 9.0.71

 

✔️1. 먼저 external tomcat에서 war 로 빌드 가능한 환경 세팅하기

 

📌 이 게시글은 외장 톰캣에 war로 빌드하여 배포하는 환경이 갖추어져 있다는 전제하에 진행되므로,

아래 포스팅을 참고하여 미리 세팅이 갖추어져 있는지 확인 바란다.

2023.10.11 - [Back/Spring Boot] - [SpringBoot] war로 배포하기, 외장 톰캣 구동 (+Trouble Shooting)

 

[SpringBoot] war로 배포하기, 외장 톰캣 구동 (+Trouble Shooting)

상황 SpringBoot의 경우 기본적으로 내장 tomcat을 지원하고 이는 jar 형식으로 배포해서 사용한다. 하지만 좀 더 세부적인 톰캣 모듈 설정이 필요하거나 고객사의 요청에 의해 war로 패키징 해야하는

zoetechlog.tistory.com

 

 

[application 소스에서 적용할 부분]

✔️2. properties 파일에 jndi 적용

📌jndi방식이 아닌 JDBC 방식은 이런식으로 설정해둘 것이다.

  # 데이터베이스 연결 및 설정
spring:
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: 
    username: 
    password:

 

📌jndi방식은 이렇게 jndi-name 을 명시해준다.

spring:
  datasource:
    jndi-name: java:comp/env/jdbc/j4s

jndi-name은 tomcat의 설정파일과  java source를 연결시켜주는 연결고리 같은 역할을 한다고 보면 된다.

이렇게 명시하면 server.xml에서 jndi/j4s 로 지정한 datasource를 바라본다.

주의할 점은 springboot 설정을 할 때는 jndi-name 에 java:comp/env/ 를 tomcat 설정파일에 쓰일 name 앞에 추가해 줘야 한다.

 

이제 tomcat 설정을 건들여보자!

 

[tomcat 설정파일에서 적용할 부분]

✔️3. server.xml

📌톰캣의 conf/server.xml 을 vi 편집기로 열어 아래와 같이 추가한다.

공백으로 둔 부분은 자신의 프로젝트 DB설정에 따라 적절히 명시해준다.

  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->

        <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                pathname="conf/tomcat-users.xml" />

    	<!--  추가한 부분 시작   -->
        <Resource auth="Container" 
        		  driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
                   name="jdbc/j4s"
                   password=""
                   username=""
                   type="javax.sql.DataSource"
                   url=""/>
    	<!--  추가한 부분 끝   -->
        
</GlobalNamingResources>

 

✔️4. context.xml

📌 톰캣의 conf/context.xml 을 vi 편집기로 열어 아래와 같이 추가한다. (name, global 부분도 잘 맞춰서 명시하기!)

<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    
    
    <!-- 추가한 부분 시작 -->
    <ResourceLink auth="Container" name="jdbc/j4s" global="jdbc/j4s" type="javax.sql.DataSource" />
	<!-- 추가한 부분 끝 -->
    
</Context>

 

 

✔️5. war 파일 배포 후 서비스 시작해보기

📌 이제 설정은 마쳤으니, 프로젝트를 war로 패키징하여 설정해둔 톰캣 위에서 배포해보자!

그리고 startup.sh 명령어를 통해 실행하여 DB연결이 잘 되면 성공한 것이다.

 

댓글