Web/Etc

[Etc] DB Connection Pool & JNDI

hikr90 2025. 1. 9. 22:16

# Connection Pool

- DB접속시 필요한 커넥션 객체 다수를 풀이라는 공간에 미리 저장해두어 요청이 있는 경우

- 커넥션 제공, 종료시 풀에 반납하는 방식으로 시간적, 성능적 낭비를 막기위한 기법이다.

- 많은 사용자가 접속하여 DB 커넥션과 종료가 남발하여 성능저하 및 페이지 마비가 일어날 수 있는 상황을 방지하는 용도

 

 

[참고] 커넥션 풀의 사용 이유

- Model 1 의 방식에서는 기능마다 DB에 접근하는데 DB 연동에 시간이 많이 걸린다는 단점이 있다.

- DB Connection Pool은 이러한 단점을 보완하기 위한 용도로 사용된다.


 

# JNDI

- 필요한 자원을 키/값의 형태로 저장하고 필요한 경우에 키를 이용하여 값을 받는 방법

- 웹 애플리케이션에서 DB Connection을 구현할 경우, Java SE에서 제공하는 javax.sql.DataSource 클래스를 사용한다.

- 웹 애플리케이션 동작 시 톰캣이 생성한 커넥션 풀 객체에 접근하는 경우 JNDI 방식을 이용한다.

 

웹 컨테이너가 커넥션 풀 객체를 생성할 시
객체의 명칭을 키값으로 미리 설정해두면 웹 어플리케이션이 DB와 연동 작업을 할 때 JNDI의 키값으로 접근한다.

 

 

사용 예시

- 웹 브라우저로부터 NAME/VALUE의 형태로 서블릿에서 getParameter(name)의 방식으로 값을 가져오는 경우

- HashMap등의 형태로 값을 가져오는 경우

- 웹 브라우저에서 도메인 네임으로 DNS 서버에 요청하여 도메인 네임에대한 IP주소를 가져오는 경우

 

 

연동 과정

(1) JDBC 드라이버 설치 (WEB-INF/lib)

(2) Connection Pool 기능 관련 jar 파일을 /WEB-INF/lib에 설치  혹은 POM.XML에 추가 (DBCP등)

(3) context.xml 에 Connection 객체 생성 시 연결할 DB 정보를 JNDI로 설정

(4) DB 연동 시, JNDI 방식으로 저장된 DB 명칭 (Key값) 으로 DB와 연동한다.

 

속성 의미
Name DataSource에 대한 JNDI 명칭
Auth 인증 주체
DriverClassName 연결할 데이터베이스 종류에 따른 드라이버 클래스 명칭
Factory 연결할 데이터베이스 종류에 따른 Connection Pool 생성 클래스 명칭
MaxActive 동시에 최대로 데이터베이스에 연결할 수 있는 Connection 수 (한번에 접속 가능한 유저 수)
MaxIdle 동시에 IDLE 상태로 대기할 수 있는 최대 수
MaxWait 새로운 연결이 생길 때까지 기다릴 수 있는 시간 (-1인 경우 무한으로 대기한다.)
User 데이터베이스 접속 ID
Password 데이터베이스 접속 PWD
Type 데이터베이스 종류별 DataSource
Url 접속할 데이터베이스 주소와 포트 번호 및 SID