Post

[Java] JNDI 설정(server.xml)

JNDI 설정: Java Naming and Directory Interface

JNDI(Java Naming and Directory Interface)는 자바 애플리케이션에서 네이밍 및 디렉터리 서비스에 접근하기 위한 자바 API입니다. JNDI를 사용하면 환경별로 변경되는 데이터나 리소스를 외부에서 관리하고, 여러 애플리케이션 간의 자원을 공유할 수 있습니다. 이 글에서는 JNDI의 개념과 설정 방법에 대해 자세히 알아보겠습니다.

JNDI 개념


JNDI는 주로 다음과 같은 상황에서 사용됩니다:

  • 데이터베이스 연결 정보
  • 메일 서버 연결 정보
  • 리소스 설정 정보(파일 경로, 디렉토리 등)

JNDI는 트리 형태의 네이밍 공간을 제공하며, 각각의 노드는 이름과 객체를 매핑합니다. 이를 통해 애플리케이션은 이름을 사용하여 객체에 접근할 수 있습니다.

JNDI 설정 방법


1. 서버 환경 설정

JNDI를 사용하려면 먼저 서버 환경에서 리소스를 설정해야 합니다. 톰캣(Tomcat) 서버의 경우, server.xml 파일에서 JNDI 리소스를 설정할 수 있습니다. 아래는 데이터베이스 연결을 위한 JNDI 리소스 설정 예시입니다. 여기서 중요한 것은 만약 validationQuery를 작성했다면 그 DB에 맞는 쿼리문을 사용해야 합니다. 예를 들어, oracle을 설정한다면 validationQuery는 select 1 from dual 이런식으로 말이죠! 제가 이걸 빼먹어서 회사에서 삽질좀 했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Context>
    <!-- JNDI 설정 -->
    <Resource name="jdbc/myDataSource"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/mydb"
              username="user"
              password="password"
              maxTotal="100"
              maxIdle="30"
							validationQuery="SELECT 1"
              maxWaitMillis="10000"/>
</Context>

2. 애플리케이션에서 JNDI 사용

JNDI 리소스는 InitialContext를 사용하여 접근할 수 있습니다. 아래는 데이터베이스 연결을 위해 JNDI 리소스에 접근하는 예시 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class JndiExample {
    public static void main(String[] args) {
        try {
            Context context = new InitialContext();
            DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDataSource");
            Connection connection = dataSource.getConnection();
            // Connection을 사용하여 데이터베이스 작업 수행
            connection.close(); // 작업 완료 후 연결 닫기
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

JNDI 설정의 장점


  • 환경변수와 같이 애플리케이션과 분리된 외부 설정을 통해 유지보수성을 향상시킵니다.
  • 리소스의 중앙 집중 관리로 인해 유연성과 확장성이 향상됩니다.
  • 서로 다른 애플리케이션 간의 자원 공유를 가능하게 합니다.
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.