백문이불여일타

Jsp&Servlet::DataSource ,ConnectionPool이란? 본문

Java

Jsp&Servlet::DataSource ,ConnectionPool이란?

퇴근각 2019. 7. 19. 19:22

앞 절에서는 회원 테이블에서 회원 정보를 조회하는 과정을 살펴봤다.

(▼아래링크참조)

https://java117.tistory.com/12

 

Jsp&Servlet:: PrepareStatement란? _실습포함

앞 절에서 회원 정보를 조회하기 위해 MemberDAO에서 Statement 인터페이스를 이용해서 데이터베이스를 연동했다. (▼아래 참고) Jsp&Servlet:: 서블릿 과 오라클 연동 하는법 _실습포함 오늘은 서블릿에서 데이터..

java117.tistory.com


데이터베이스 연동과정 단점

데이터베이스 연동과정은 웹 애플리케이션이 필요할때마다 데이터베이스에 연결하여 작업하는 방식이다.

그런데 이런식으로 필요할때마다 연동해서 작업할경우 발생하는 문제가 하나 있다.

데이터베이스 연결에 시간이 많이 걸린다는것이다.

 

특히 온라인 쇼핑몰의 경우 동시에 수십명, 많게는 수백 명까지 접속해서 상품 조회, 주문하기 등의 

기능을 사용하는데 앞의 방법처럼 데이터베이스와 연동해 작업해야 한다면 너무 비효율적이다.

이 문제를 해결하기 위해 현재는 웹 애플리케이션이 실행됨과 동시에 연동할 데이터베이스와의

연결을 미리 설정해 둔다.

그리고 필요할때마다 미리 연결해 놓은 상태를 이용해 빠르게 데이터베이스와 연동하여 작업을한다.

이렇게 미리 데이터베이스와 연결시킨 상태를 유지하는 기술을 커넥션풀(ConnectionPool) 이라고 한다.

 


기존 데이터베이스 연동방법의 문제점


ConnectionPool의 필요성

데이터베이스 프로그램에서 Connection 관리는 전체 System의 성능과 안전성에  
큰 영향을 미치는 중요한부분이다. 
하지만 일반적인 JDBC프로그래밍에서는 매번 클라이언트의 요청마다 ConnectionPool 을 이용한다. 
대부분의 DBMS 프로그램에서는 직접 Connection 을 연결하여 작업하지 않고 ConnectionPool을 이용한다.



ConnectionPool이란?

ConnectionPool 이란 클라이언트의 요청 시점에 Connection을 연결하는것이 아니라 
미리 일정수의 Connection을 만들어 놓고, 필요한 Application에 전달하여 이용하도록하는방법이다
Container 구동시 일정수의 Connection객체를 생성하게 되며 클라이언트의 요청에 의해
Application이 DBMS 작업을 수행해야 하면 ConnectionPool 에서 Connection객체를 받아와
작업을 진행하며 작업이 끝나면 다시 ConnectionPool에 반납하는 과정을 거친다.

ConnectionPool 에서는 Connection을 갑작스럽게 많이 사용하게 될 경우 미리 설정된 최대
Connection 수 만큼 증가하도록 하여 원활한 서비스가 되도록 지원을 한다.
이런 이유로 ConnectionPool을 설정할 경우에는 보통, 기본Connection수, 최대 Connection수
필요시 자동으로 증가하는 Connection수 등을 지정한다.

 

ConnectionPool은 개발자에 의해 직접 구현되어 이용될 수도 있지만 안정화되고 
검증되기까지의 상당시간의 노력이 필요하므로 대부분 검증된ConnectionPool 을 이용하며
대부분의 WAS 에서 기능을 제공하고 있다.


DataSource 이란?

ConnectionPool 에는 여러개의 Connection 객체가 생성되어 운용되는데 각각 Application 에서
직접 이용하면 체계적인 관리가 힘들게 되므로 DataSource 라는 개념을 도입하여 사용하고 있다.
DataSource라는 객체는 ConnectionPool 을 관리하는 목적으로 사용되는 객체로 Application에서는
이 DataSource 객체를 통해서 Connection을 얻어오고 반납하는 등의 작업을 수행할수 있다.
Application 에서는 DataSource 객체르 얻음으로써 ConnectionPool 을 이용하게 되는데
이 DataSource 객체는 JNDI에 의해  Application에 전달하는 방식을 따르고있다.

DataSource를 이용하지 않는 기존의 방식(DriverManager를 이용한 방식)은 내부적으로
static한 필드를 사용하기 때문에 쓰레드 환경에서는 바람직하지 않다.
되도록 DataSource를 이용하여 Connection을 관리하는 것이 좋다.


커넥션풀 동작과정

 

톰캣 컨테이너에서 제공하는 커넥션풀의 동작과정을 살펴보자

 

1. 톰캣 컨테이너를 실행한 후 응용프로그램을 실행한다.

2. 톰캣 컨테이너 실행시 ConnectionPool 객체를 생성한다.

3. 생성된 커넥션 객체는 DBMS와 연결한다.

 4. 데이터베이스와의 연동 작업이 필요할 경우 응용프로그램은 ConnetionPool 에서

    제공하는 메서드를 호출하여 연동한다.

요약

톰캣컨테이너는 자체적으로 ConnectionPool 기능을 제공한다.

톰캣 실행시 톰캣은 설정파일에 설정된 데이터베이스 정보를 이용해 미리 데이터베이스와 연결해서

ConnectionPool 객체를 생성한 후 애플리케이션이 데이터베이스와 연동할 일이 생기면 

ConnectionPool  객체의 메서드를 호출해 빠르게 연동해 작업한다.

'Java' 카테고리의 다른 글

Jsp&Servlet:: JNDI란? , 이클립스 톰캣 DataSource 설정방법  (0) 2019.07.19
Jsp&Servlet:: PrepareStatement란? _실습포함  (0) 2019.07.19
DTO, VO 차이점  (0) 2019.07.19
DTO,DAO 차이점  (0) 2019.07.19
Comments