SSARTEL-10th / JPTS_bookstudy

"개발자가 반드시 알아야 할 자바 성능 튜닝 이야기" 완전 정복
7 stars 0 forks source link

JNDI님 누구세요? #11

Open kgh2120 opened 9 months ago

kgh2120 commented 9 months ago

👍 문제

12장 DB를 사용하면서 발생 가능한 문제점들 파트를 보면 JNDI라는 명칭이 굉장히 많이 등장합니다. JNDI라는 녀석을 이용해서 어떤 작업을 수행하는 모양입니다. JNDI를 검색해보니 아래와 같이 설명하는데, 여전히 저와는 어색하네요. JNDI가 어떤 녀석이고 어떤 상황에서 사용하는지 정리해주세요!

JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API다.

✈️ 선정 배경

JNDI라는 이름.. 저만 처음 들어보나요? 이 책을 읽으면서 모르는 부분은 많았지만, 완전히 처음 들어본 녀석이라 골라봤습니다.

📺 관련 챕터 및 레퍼런스

story12. DB를 사용하면서 발생 가능한 문제점들

🐳 비고

olrlobt commented 9 months ago

JNDI (Java Naming and Directory Interface) 란?

Java에서 제공하는 API 중 하나로, 다양한 네이밍 및 디렉토리 서비스에 접근하게 해주는 인터페이스이다.

쉽게 말해, \ JNDI는 이름을 사용하여 다양한 리소스나 객체에 접근할 수 있게 해주는 도구고,

예를 들어, 네트워크 상의 특정 서비스나 애플리케이션 내의 객체 등에 이름을 기반으로 찾아 접근할 때 JNDI를 사용할 수 있다.

JNDI의 핵심 개념: Context, InitialContext

Context:

InitialContext:

import javax.naming.Context;
import javax.naming.InitialContext;

public class JndiExample {
    public static void main(String[] args) {
        try {
            // InitialContext 객체 생성
            Context initialContext = new InitialContext();

            // JNDI를 사용하여 객체 조회
            Object obj = initialContext.lookup("java:comp/env/someResource");

            // ... 리소스 사용 ...

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

JNDI로 DB 정보 연결

Tomcat의 context.xml


<Resource name="jdbc/MyDB" 
          auth="Container" 
          type="javax.sql.DataSource"
          maxActive="100" 
          maxIdle="30" 
          maxWait="10000"
          username="db_user" 
          password="db_password" 
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/mydb"/>

Java 코드에서 JNDI를 사용하여 데이터베이스 연결 얻기 :


import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;

public class JndiDbConnectionExample {
    public static void main(String[] args) {
        try {
            // JNDI 초기 컨텍스트 생성
            Context initialContext = new InitialContext();

            // DataSource 조회
            DataSource ds = (DataSource) initialContext.lookup("java:comp/env/jdbc/MyDB");

            // 데이터베이스 연결 얻기
            Connection conn = ds.getConnection();

            // ... 데이터베이스 작업 ...

            // 연결 종료
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

JNDI의 장점:

JNDI의 단점:

REF.

https://go-coding.tistory.com/76 https://itworldyo.tistory.com/entry/JNDI%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94