[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.