[ITWILL : JSP]커넥션풀(Connection Pool)
ITWILL학원 : 25강 JSP기초 BY 정규태강사
1. JNDI(Java Naming and Directory Interface)(p444~)
필요한 데이터를 키-값 쌍으로 저장해서 필요시마다 키를 사용하여 값을 가져오는 방법
예시 :
- 내장객체.setAttribute(“키”, 값);
- 내장객체.getAttribute(“키”);
- 컬렉션의 해시맵/해시테이블 (“키”, 값);
- DNS서버(도메인서버) : 도메인네임에 해당하는 ID정보를 저장해서 사용
사용법
- 컨테이너(예:톰캣)를 사용하여 Connection Pool생성하여 그 안에 이름에 해당하는 정보를 저장(=키), 해당하는 DB정보를 저장(=값)해서 사용.
그렇다면 커넥션풀이 뭘까?
2. 커넥션풀(Connection Pool)
DB연결을 하기위한 객체
효율적인 데이터 처리 가능
도입된 배경 : 빈번한 디비연결/호출로 인해서 메모리낭비(누수)발생을 줄이고자 도입되었다.
사용법 :
- 미리 연결정보(Connection)를 생성
- 필요할때마다 빌려주고
- 다 쓰면 반납하는 방식
작동방식 :
- 사용자 요청(Service)에 따른 Connection Pool에 쓸 쑤 있는 connection체크 후 connection 1개씩 할당 -> 있으면 바로 사용, 없으면 대기(반납되기를 기다리기)거나 임시객체를 생성
- 커넥션(연결정보)개수를 제한(커넥션풀이 알아서 효율적으로 관리함)
- 커넥션 객체를 다 쓰게되면 자원회수
2-1. 라이브러리 다운로드
커넥션풀을 사용하기 위해선 라이브러리를 다운받아야 한다.
라이브러리 다운로드 주소 : Apache Commons
zip파일 다운로드 3가지
- collections
- dbcp
- pool
위의 세가지를 차례대로 다운받으면 된다.
먼저 collections zip파일다운로드
그다음 dbcp zip파일다운로드
마지막 pool zip파일다운로드
- 압축 푼 뒤
D:\workspace_jsp7\JSP7\WebContent\WEB-INF\lib
경로에 아래 세가지 파일을 복붙commons-collections4-4.4.jar
commons-dbcp2-2.7.0.jar
commons-pool2-2.8.0.jar
2-2. 라이브러리를 서버에 연결
META-INF
폴더에Context.xml
생성
- DB연결에 필요한 정보를 저장할 수 있다.
- 속성작성
- name : 외부에서 해당정보에 접근할 수 있도록하는 이름값(필요에 따라 변경가능)
- auth : 자원관리자를 지정(Container/Application 고정)
- type : 웹에서 사용될때(name속성으로 호출할때) 표시되는 객체 타입(고정)
- driverClassName : JDBC드라이버주소(필요에 따라 변경가능)
- mysql쓴다면 : com.mysql.jdbc.Driver
- 오라클쓴다면 : oracle.jdbc.driver.OracleDriver
- url : DB가 존재하는 위치 = 디비서버의 주소(필요에 따라 변경가능)
- mysql쓴다면 : jdbc:mysql://localhost:3306/jspdb
- 오라클쓴다면 : jdbc:oracle:thin:@localhost:1521:orcl
- username/password : DB접속 계정 정보
- maxWait : 커넥션풀에 사용가능한 커넥션이 없을 경우 커넥션의 회수를 기다리는 시간 지정(단위: 밀리초)
1 | <Context> |
2-3. JNDI 리소스 설정
web.xml
파일에서 아래 코드 작성- description : 설명작성(의미없음, 원하는대로 작성하면됨)
- 나머지정보들은 Context.xml파일에서 해당 설정값을 그대로 복붙할 것!
1 | <resource-ref> |
- 작동방식 : 서버를 실행하면 web.xml 먼저 접속 후 resource-ref코드를 보고 Context.xml을 읽어서 DB를 연결한다.
2-4. getCon()메서드 작성 : 커넥션풀 사용
memberDAO.java
파일로 이동해서 getCon()메서드를 커넥션풀을 사용한 아래 코드로 변경해준다.
InitialContext클래스는 Context클래스를 재구현한 클래스이고 Object를 상속받았다
1
2
3public class InitialContext
extends Object
implements ContextDataSource ds = (DataSource) init.lookup(“java:comp/env/jdbc/context파일의 name값그대로 입력”);
1 | //드라이버로드 디비연결 : 커넥션 풀 사용 |