[JAVA] JNDI

happiyoung_·2024년 9월 12일

java

목록 보기
9/9

Intro

java log4j 취약점 분석을 하던 중에 jndi에 대해 궁금해졌다.
jndi를 이해하려면 여러가지 바탕지식이 필요하다.

Connection

네트워크 상의 연결을 의미

자바에서는 다음과 같은 코드로 커넥션을 만들 수 있다.

DriverManager.getConnection()

이렇게 connection이 만들어지면 connection pool이라는 개념이 등장한다.

connection pool : 클라이언트 요청 시점에 Connection을 연결하는 것이 아니라 미리 일정 수 의 Connection을 만들어 놓고 필요한 어플리케이션에 전달하여 이용하는 방법

예를 들어, JDBC Framework에서 close가 이루어지면 Connection을 Connection Pool에 반납한다.

Datasource

Connection Pool을 관리하는 목적으로 사용되는 객체

자바에서는 다음과 같은 코드로 DataSource를 얻어온다.

javax.sql.DataSource

application에서는 이 datasource인터 페이스를 통해 Connection을 얻어오고 반납하는 등의 작업을 구현한다.
즉, datasource는 어플리케이션이 connection들을 어떻게 관리할지를 구현하는 인터페이스이다.

JDBC, Java DataBase Connectivity

데이터 베이스를 조작하는 표준 SQL 인터페이스 API

JDBC는 지난달 공부한 자바 crud 프로젝트에서 h2-console 실행할때 보았던 api이다.

다음과 같은 특징을 가지고 있다.

  • 인터페이스 기반 구축 (데이터베이스 커넥션 인터페이스)
  • 각 DBMS에 맞는 JDBC를 받아주게 되면 수비게 DBMS 변경가능

하지만 다음과 같은 단점을 가지고 있다.

  • JDBC는 Database Pool 방식을 사용하지 않고 DB에서 정보를 가져올때마다 매번 DB Connection을 열고 닫는다. (비효율적)

DBCP, DataBase Connection Pool

application을 시작할 때 원하는 만큼 Connection 객체를 만들어 Pool에 넣어놓은 채 필요할 때마다 가져다 쓰고 다시 반납하는 방식

다음과 같은 특징을 가지고 있다.

  • 다중 스레드를 스레드 풀로 관리하는 방식과 비슷하다.
  • 보통 DataBase Connection Pool을 application 소스 단에 설정해놓은 방식이다.

JNDI, Java Naming and Directory Interface

WAS 단에 DB Connection 자체를 미리 네이밍해두는 방식

application은 API를 호출하여 자원과 다른 프로그램 객체를 찾는다.
여기서 말하는 자원은 데이터 베이스 서버나 메시징 시스템 같은 시스템과의 연결을 제공하는 프로그램 객체이다.
(JDBC 자원을 데이터 소스라고 함)
자원 객체와 JNDI 이름은 application 서버에 포함된 이름 지정 및 디렉토리 서비스에 의해 함께 바인딩 된다.
즉, 저장해 놓은 WAS의 데이터 베이스 정보에 JNDI를 설정해 놓으면 웹 애플리케이션은 JNDI만 호출하면 간단해진다.

JNDI는 다음과 같은 장점을 가지고 있다.

  • DB 설정 정보를 파악하기 쉽다.
    	> WAS단에 설정정보를 통해 DB가 몇개 붙어있는지 파악하기 수월하다.
  • DB Connection Pool을 효율적으로 사용할 수 있다.
    	> WAS 단에서 DB Pool을 하나로 관리하면 static 객체를 생성 후에 쉽게 가져다 쓸 수 있기 때문에 효율이 좋아진다.

JNDI를 사용해야하는 이유

  1. 개발을 한 사람과 실제 서비스를 운영하는 사람은 다르기때문에 WAS에서 설정되어 있는게 좋다.
  2. WAS에 여러개의 웹 application 을 올려서 사용하기 때문에 WAS에서 한번에 설정해줘야 자원 낭비를 줄인다.
  3. 장애가 나거나 성능이 정상적이지 못하면 다른 한 서버가 일을 해줄 수 있다.

Outro

정말 자바는 파면 팔수록 알아야하는 용어도 많고, 추상화도 많아서 양파 같은 언어인 것 같다.
하지만, 추상화된 의미 그것을 사용해야하는 이유를 알 수록 (함부로 판단하긴 어렵지만) 개인적으로 정말 잘 짜여진 언어인것같다는 생각이 든다.

profile
해삐한 다영의 컴퓨터와 친해지기 프로젝트 🥰

0개의 댓글