본문 바로가기
728x90
반응형

JNDI 란?

Java Naming and Directory Interface

 

Java 소프트웨어 클라이언트가 이름을 이용하여 데이터 및 객체를 찾을 수 있도록 도와주는 디렉토리 서비스에 관한 Java API

- WAS 의 데이터 및 객체 정보(DB 정보 등)을 Naming 해놓고 WAS 에서 가져다 쓰는것

 

사용 이유

1. WAS 내에 N 개의 Web Application 이 돌아가는 경우, 소스레벨에서 설정을 하게되면

  - 관리가 어려움

  - 자원낭비가 심함

 그렇기에 JNDI 를 이용하여서 WAS에서 관리하게 하였음

 

 

아래는 DB에 접근하기 위한 JNDI 예시이다.

 

 

 

만약 JNDI가 없다면?

예를 들어, MySQL DB 에 접근하기 위한 App 을 개발중이라고 하자.

MySQL JDBC 드라이버 클래스를 참조하기 위해 해당되는 JDBC URL 을 사용하려면 아래와 같이 사용해야 한다.

 

Connection conn = null;
try{ 
	Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getConnectionClassLoader() );
	conn = DriverManager.getConnection("jdbc:mysql://MyDBServer?user=~~~&password=~~~~");
	
	….
	Conn.close();
}
…

 

이는 일반적인 방법인데, 이 접근법은 작은 규모의 프로세스에 적합하고 자바언어에 익숙하기만 하면 App 을 금방 제작할 수 있다.

 

하지만 DB가 변경되거나 사용자계정, JDBC URL 변경 등 다양한 사유로 바뀔 경우가 많은데 소스레벨에서 수정을 가해야 하기때문에 프로그래머 입장에서는 복잡해 질 수 있다.

그리고 개발 외에도 DB 셋팅등에 대해서도 계속해서 신경이 쓰일 수 밖에없을것이다.

 

이때 JNDI를 사용하면 좋다.

 

 

웹로직에서 JNDI 를 셋팅한 모습인데, 개발자는 JNDI 이름인 testso 만 알고있으면 된다.

그 외에 자세한 설정값들은 웹로직(또는 그외 WAS) 단계에서 DB 연결값을 변경하면 되기에 개발자 입장에서는 DB에 관한 설정을 크게 신경 쓸 필요가 없는것이다.

 

그럼 실제 코드에서는

try { 
    Context ctx = new InitialContext (); 
    Object datasourceRef = ctx.lookup ("java: testso");
    DataSource ds = (Datasource) datasourceRef; 
    conn = ds.getConnection (); 
...... 
c.close (); 
}

 

lookup 을 활용하여 jndi 이름을 넣어주면된다.

 

JNDI 이름은 주로 jndi/mydb comp/mydb 등 형식으로 나타난다.

 

728x90
반응형

한걸음 한걸음

개인적인 기록