1. JNDI 란?

  • JNDI(Java Naming and Directory Interface)
    - Directory Service에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API
  • Why JNDI?
    - DataSource 객체, JMS message destinations, Enterprise bean home interfaces를 찾고자 JNDI를 이용함!
    - 객체 : message queues , database connection factories, environment parameters, distributed components 등

 

2. Directory, Directory Service

  • Directory
    - 데이터의 집합 또는 리스트
    (ex : 전화번호부, 부동산등기부원장, 작업리스트 등)
    - 객체를 구조적으로 저장하고 효율적으로?검색할 수?있게 해주는?데이터 저장의 하나
    - 모든 데이터는 Entry에 저장
  • Directory Service?
    - 사용자가 Directory에 저장된 정보에 접근하게 해주는 솔루션
    (ex : 콜 센터 직원)

 

3. LDAP

  • LDAP ? the Lightweight Directory Access Protocol
  • 대표적인 Directory Service
  • LDAP기반 Directory Service 응용프로그램들은 Entry의 생성, 수정, 삭제 및 검색기능을 가짐.
  • LDAP을 지원하는 소프트웨어의 예
    - E-Mail 클라이언트 (e.g. Mozilla Thunderbird)
    - LDAP 툴 (e.g. Apache Directory Studio)
    - 웹 서버 (e.g. Apache Tomcat, Apache HTTP Server)
    - 메일 서버 (e.g. Apache James)

 

4. JNDI 정의

  • 자원에 이름을 붙여 주는 서비스와 자원에 이름은 물론 속성까지 설정할 수 있도록 하는 서비스를 사용할 수 있게 하는 API.
  • 특정한 프로토콜을 지정하는 규약이 아니라, 단순히 여러 가지 프로토콜을 사용할 수 있도록 하는 표준적인 API를 지원.
  • JAVA 환경에서 이미 개발되어 있는 여러 프로토콜을 통해 Naming과 Directory Service를 사용
  • 분산 환경의 서버들간에 객체를 공유할 수 있는 방법을 제공
  • Naming Service에 JNDI를 이용해서 객체를 등록, 삭제, 검색
  • JNDI를 이용해서 객체를 등록할 때, 객체를 구분하기 위해서 JNDI명을 할당
  • 원격지에서는 해당 JNDI명을 이용해서 객체를 찾을 수 있음
  • 원격지에 있는 객체를 통해 참조하기 위하여 객체 직렬화 작업을 하게 되며, 네트워크 트래픽 발생
  • JSP/Servlet에서는 init()가 처음 한번만 실행되기 때문에 init() 메소드에서 lookup한 객체를 멤버 필드에 값을 지정해서 사용

 

5. JNDI - Integrated Naming Protocol

  • JNDI의 Naming Manager는 JNDI의 이름을 하부의 Naming Service의 이름 규칙을 따르는 이름으로 mapping 시켜줌
    - javax.naming.Context - Naming Context. Binding과 하위 Context를 찾고 관리하는데 사용
    - javax.naming.Name - Naming Service 에 있는 이름을 추상적으로 표현
    - javax.naming.Binding - Naming Service 의 이름과 그 이름에 Binding되는 객체를 나타냄.
    - javax.naming.Reference - 객체의 복사본을 구할 때 사용

 

6. JNDI Architecture

  • JNDI가 지원하는 API
    - Naming Manager를 통하여 SPI와 통신.
  • SPI(Service Provider Interface)?
    - 실제로 Naming과 Directory의 기능을 지원.
    - 각기 다른 Naming과 Directory Service들이 API와 정확하게 통신할 수 있도록 해주는 교량 역할
  • JAVA APPLICATION -> JNDI API -> Naming Manager -> JNDI SPI