- 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고(lookup)하기 위한 자바 API
- 외부에 있는 객체를 가져오기 위한 기술
- Tomcat과 같은 WAS를 보면 특정 폴더에 필요한 데이터 소스(라이브러리)가 있는데 그것을 우리가 사용하기 위해 JNDI를 이용해서 가져오는 것
- 톰캣이 만들어 놓은 ConnectionPool 객체에 접글 할 때는 JNDI를 이용한다
- 필요한 자원을 키/값쌍으로 저장한 후 필요할 떄 키를 이용해 값을 얻는 방식
①. 사용자가 요청을 한다.
②. 요청은 Control을 거쳐 Molel로 전달된다.
③. Molel로 넘어간 요청은 JNDI에 등록된 데이터베이스 객체(Type:DataSource)를 검색한다.
④. JNDI를 통해 찾은 객체로부터 커넥션을 획득한다.
⑤. 데이터베이스 작업이 끝난 후 획득한 커넥션을 반납한다.
특징
- DB커넥션을 WAS단에서 제어하면서 서버에서 하나의 커넥션 풀을 가짐(공유객체를 사용)
- Application이 DB에 직접 Connection을 요청하는 것이 아니라 JNDI lookup을 통해 Datasource 객체를 획득하고 그것을 Connection 요청
장점
- DB설정 정보를 파악하기 쉽다 → WAS단에서 설정정보를 통해 디비가 몇 개 붙어있는지 정보를 파악하기 수월
- DB 커넥션 풀을 효율적으로 사용 가능
JDBC와 차이점
- 하드코딩하지 않아도 됨
- JNDI는 재활용을 하기 위한 코드로 부하가 발생하지 않게 하기 위해 JNDI를 사용해야 함
- JNDI는 DB Pool을 미리 Naming 시켜두는 방법(JDBC 필요), JDBC는 API패키지를 이용하여 DB 연결
설정방법
https://all-record.tistory.com/104 참고
DBCP와의 관계
- DBCP는 JDBC의 약점을 보완한 방식으로 DataSource & JNDI를 이용
- 자바 소스에서 직접 관리하는 DBCP보다는 WAS에서 설정을하는 JNDI를 보안상의 이유로 선호하는 경우가 있음
- JNDI를 사용하게 되면, DB의 Connection정보는 WAS에서 관리 하므로, 소스단에 노출되지 않는다. 운영서버의 중요정보가 일반 개발자에게 노출되지 않음