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