1. DBCP(Database Connection Pool)
- 원칙은 항상 데이터베이스를 열어주면(Connection) 무조건 닫아줘야 한다.(conn.close())
- 사용자가 한명이 아니라 여러명이기 때문에 연결이 엄청 많아지기 때문에 부하가 걸리게 된다.
- 이렇게 되면 계속 Connection을 열고 닫고를 반복해줘야 하기 때문에 컴퓨터에서 자원이 낭비된다.
- 이것을 해결해주는 것이 DBCP이다.
- 사용자의 요청이 있을 때마다 DB 연결을 한다면 코드가 복잡해지며 많은 요청이 있을 때 연결속도가 저하될 수 있다.
- 따라서 이미 Connection을 만들어 두고 필요시 저장된 공간(Connection Pool)에서 가져다 쓰고 다시 반납하는 기법이다.
* JNDI(Java Naming and Directory Interface)
- 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고하기 위한 자바 API이며 외부에 있는 객체를 가져오기 위한 기술
- 사용자 요청 > JNDI에 등록한 DB객체 검색 > 찾은 객체에서 커넥션 획득 > DB 작업 종료 후 커넥션 반납
2. DBCP 라이브러리
- DBCP를 사용하기 위해서는 라이브러리를 넣어줘야 한다.
- apache 폴더에 lib에 있는 tomcat-dbcp.jar 파일을 WebContent > WEB_INF > lib 안에 넣어줘야 되고 프로젝트의 bulid path에 Libraries에 추가해줘야 한다.
- 그 뿐만 아니라 DB를 사용해야 하기에 mysql의 Connector-J도 넣어줘야 한다.
3. 실제 사용
- DBCP를 사용하기 위해서는 라이브러리 추가 말고도 해줘야 할 것이 있다.
- 우리가 등록한 Servers 폴더 안에 context.xml에다가 몇가지 소스들을 추가해 DBCP를 사용할 프로젝트의 WebContent안에 META_INF 안에 넣어줘야 한다.
- 사실 프로젝트 안에 있는 context.xml에다만 추가해줘도 상관없지만 여러 프로젝트에다가 사용할 거라면 Servers에 있는 context.xml에다가 추가해주고 파일을 복사 붙여넣기로 사용하는 게 더 낫다.
- context.xml에다가 빨간색 네모친 부분만 추가해 주면 된다.
- <Resource /> 태그 안에다가 추가해주면 되는데 이 추가하는 것은 자바 외부에 Connection 객체를 생성하는 것이다.
- context.xml을 읽는 순간 객체가 만들어지는 것인데 서버가 요청을 받게 되면 context.xml을 읽게 된다.
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jsp"
username="root"
password="1234"
maxActive="20"
maxIdle="20"
maxWait="-1"
/>
- name : DBCP를 이용하기 위한 name(key 값) - 자바에서 이용할 때 사용하기 위한 name
- auth : 인증방식( Container : 웹 컨테이너로 인증 )
- type : 타입 설정
- driverClassName : MySQL을 사용하기 위한 드라이버 이름
- url : 우리가 사용하고 싶은 mysql 주소
- username : 사용자 이름
- password : 비밀번호
- maxActive : 연결 최대 허용 개수
- maxIdle : 항상 연결상태를 유지하는 개수(보편적으로 maxActive와 개수를 같게 해줌)
- maxWait : 커넥션 풀에 연결 가능한 커넥션이 없을 경우 대기하는 시간(음수라면 사용할 커넥션이 없으면 오류)
- context.xml에 필요한 것들을 추가한 뒤 이제 DB 작업을 하기 위한 DAO 객체로 와서 Connection 객체를 가져와 쓰면 된다.
- 먼저 DBCP를 사용하기 위한 Context와 DataSource 타입의 변수를 전역변수로 선언해 준다.
- context = new InitialContext(null);로 context를 설정해 준다.
- context.lookup("java:comp/env/설정한 name"); 으로 객체를 가져온다. 설정한 name은 context.xml에 작성한 name을 작성해주면 된다.
- 그리고 그 객체를 아까 전역변수로 선언한 DataSource ds 에 넣어주면 된다.
- context.xml에 type을 DataSource로 설정해줬기 때문에 DataSource 변수에 넣어주는 것이고 설정한 type은 DataSource 뿐만 아니라 다양하기 때문에 lookup 메소드는 Object 타입으로 반환을 한다.
- 그렇기 때문에 ds에 넣기 위해서는 다운 캐스팅으로 넣어줘야 한다.
- 이제 마지막으로 ds.getConnection()으로 Connection 객체를 반환해주므로 연결해준다.
- 그 다음으로는 이제 늘 하던 것처럼 sql문 작성하여 ps에 넣어주고 DB 작업을 하면 된다.
'웹개발 > JSP' 카테고리의 다른 글
[JSP] 회원가입 유효성 검사, 비밀번호(정규식) 검사 (0) | 2022.05.26 |
---|---|
[JSP] 다양한 세션 이용 (0) | 2022.05.26 |
[JSP] Ajax(Asynchronous Javascript and XML), GET/POST 방식 (0) | 2022.05.25 |
[JSP] 세션(Session) (0) | 2022.05.23 |
[JSP] 쿠키(Cookie) (0) | 2022.05.22 |