META-INF
디렉토리META-INF
디렉토리는 Java 애플리케이션의 구성 정보와 메타데이터를 관리하여, 런타임 환경이 해당 애플리케이션을 올바르게 실행하도록 돕습니다. Java 런타임은 META-INF
디렉토리의 정보를 참조하여 클래스 경로를 설정하거나, 애플리케이션의 엔트리 포인트를 파악하고, 특정 서비스의 구현체를 로드할 수 있습니다.
context.xml
: Tomcat 리소스 설정context.xml
은 Apache Tomcat과 같은 애플리케이션 서버에서 개별 웹 애플리케이션의 환경 설정과 리소스(특히 데이터베이스 연결)를 정의하는 데 사용되는 구성 파일입니다. 이 파일은 주로 데이터베이스 연결 풀 설정, JNDI 리소스, 환경 변수 등을 지정하며, Tomcat이 애플리케이션을 실행할 때 이 설정을 읽어들여 애플리케이션에 필요한 리소스를 제공합니다.
META-INF/context.xml
: WAR 파일 내부의 META-INF
디렉토리에 위치할 수 있으며, 해당 애플리케이션에만 적용됩니다.conf/context.xml
: Tomcat의 conf
디렉토리 아래에 위치할 경우, 모든 웹 애플리케이션에 공통으로 적용됩니다.META-INF/context.xml
에 설정을 저장합니다.<?xml version="1.0" encoding="utf-8" ?>
<Context>
<Resource name="jdbc/mariadb1"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://localhost:3306/sample"
username="root"
password="!123456"/>
</Context>
java:comp/env/jdbc/mariadb1
와 같은 형식으로 애플리케이션에서 참조하게 됩니다.jdbc/
는 데이터베이스 리소스를 나타내기 위해 사용되는 표준 접두사입니다.Container
로 설정하면 Tomcat이 이 리소스를 관리하고 인증합니다.javax.sql.DataSource
는 데이터베이스 연결 풀을 의미합니다.javax.sql.DataSource
는 데이터베이스 연결 풀을 정의하는 표준 인터페이스로, JDBC 드라이버를 통해 데이터베이스와의 연결을 관리합니다.<%
Connection conn = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:/comp/env");
DataSource dataSource = (DataSource) envCtx.lookup("jdbc/mariadb1");
conn = dataSource.getConnection();
out.println("데이터베이스 연결 성공");
} catch (Exception e) {
System.out.println("[에러] " + e.getMessage());
} catch (SQLException e) {
System.out.println("[에러] " + e.getMessage());
} finally {
if (conn != null) conn.close();
}
%>
Context initCtx = new InitialContext();
InitialContext
는 Java 애플리케이션이 네이밍 및 디렉토리 서비스에 접근할 수 있도록 해주는 기본 클래스입니다.Context envCtx = (Context) initCtx.lookup("java:/comp/env");
java:/comp/env
라는 경로에 등록되므로 이를 참조합니다.DataSource dataSource = (DataSource) envCtx.lookup("jdbc/mariadb1");
context.xml
파일에 정의된 데이터베이스 리소스 jdbc/mariadb1
을 찾습니다. 이 예제에서는 context.xml
에서 설정한 MariaDB 데이터베이스의 DataSource 객체를 가져옵니다.conn = dataSource.getConnection();
DataSource
객체를 통해 데이터베이스 연결을 획득합니다. JNDI를 통해 DataSource
객체를 가져오면, 데이터베이스 연결 풀에서 연결을 관리할 수 있어 효율적입니다.JNDI(Java Naming and Directory Interface)는 Java에서 네이밍과 디렉토리 서비스를 제공하는 API입니다. 이를 통해 Java 애플리케이션은 데이터베이스, 파일 시스템, 메시지 큐 등 다양한 리소스에 접근할 수 있습니다. Tomcat과 같은 애플리케이션 서버는 JNDI를 사용하여 리소스를 관리하고, 이를 통해 코드에서 리소스의 위치를 추상화하여 환경에 독립적인 구성이 가능합니다.