- 기존 DB 연동 방법의 단점
웹 애플리케이션이 필요할 때마다 DB에 연결해야 한다면, 매 번 연결과정을 거치므로 이 경우 시간이 많이 걸릴 수 있다. 특히, 수백 명 이상이 동시에 접속하여 이용하는 규모가 큰 서비스의 경우는 더욱 이것이 단점으로서 부각된다. 따라서 이를 해결하여 빠른 속도로 DB에서 정보를 얻어와 서비스를 구동시킬 수 있는 방법으로 커넥션풀(ConnectionPool)을 이용할 수 있다.
- 커넥션풀(ConnecionPool)이란?
기존 DB 연동방식은 웹 애플리케이션이 필요할 때마다, DB의 연결을 설정해두는 방식이었다. 하지만 이렇게 매 번 연결을 설정해두고 데이터를 가져와 작업을 처리할 필요는 없다. DB를 연결해야 하는 부분은 사용자들이 서비스를 이용할 때마다 계속해서 공통적으로 이루어져야 하는 작업이므로 이 부분을 따로 떼어 미리 작업해두고, 필요할 때 가져와 빠르게 사용할 수 있는 것이다. 이것이 커넥션풀의 원리다. 즉, 커넥션풀이란 미리 DB와 연결된 상태를 유지하는 기술을 말한다. 그리고 이러한 커넥션풀은 톰캣으로부터 제공된다.
- 커넥션풀 작동 방식
1) 톰캣 컨테이너가 실행될 때, 커넥션풀 객체를 생성한다.
2) 생성된 커넥션풀 객체는 DBMS와 연결한다.
3) 이후 DB 작업이 필요한 경우, 커넥션풀에서 제공하는 메서드를 통해 DB를 연동한다.
- 커넥션풀 설정하기
1) 톰캣이 제공하는 DBCP 라이브러리를 다운받아 lib폴더에 설치한다. ('tomcat-dbcp-버전.zip' -> 압축풀기 -> jar파일)
2) Servers의 context.xml에 커넥션풀 객체 생성 시 연결할 DB 정보를 JNDI로 설정한다.
*JNDI란? - Java Naming and Directory Interface로서, 필요한 데이터를 key와 value로 저장하여 필요할 때 key로 가져와 value를 활용하는 방법이다. 여기서 JNDI는 커넥션풀 객체를 이용하기 위한 목적으로 활용한다(DB 정보를 JNDI 형태로 저장 -> 객체 필요 시 해당 DB 정보를 JNDI의 key로 가져와 사용)
<Resource
name="jdbc/oracle" //JNDI 이름
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver" //DB연결 시 필요한 값
url="jdbc:oracle:thin:@localhost:1521:xe" //DB연결 시 필요한 값
username="DBMS아이디" //DB연결 시 필요한 값
password="DBMS비밀번호" //DB연결 시 필요한 값
maxActive="50"
maxWait="-1"/>
3) DAO 클래스를 다음과 같이 수정한다.
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:comp/env");
dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
Connection con = dataFactory.getConnection();
참고 : 도서 <자바 웹을 다루는 기술>
'TIL' 카테고리의 다른 글
<자바 Java> JSP 요소 (0) | 2021.11.10 |
---|---|
<트러블슈팅> DB 연동 시 쿼리문 오류 / html 내 js 실행안됨 (0) | 2021.11.09 |
<자바 Java> 메서드 (0) | 2021.11.07 |
<자바 Java> DB 연동하기 (2) (0) | 2021.11.06 |
<트러블 슈팅> 자바 JUnit 테스트 에러 (0) | 2021.11.05 |