게시판 만들기 3

msriver·2020년 5월 31일
1

JSP&Servlet

목록 보기
4/13

DBCP?

DBCP란 DataBase Connection Pool의 줄인말이다.
일반적으로 자바에서 DBMS와 연동하기 위해선 다음과 같은 4단계가 필요하다.

  1. JDBC드라이버 로드
  2. 데이터베이스와 연결 (Connection)
  3. sql문 실행 등 필요한 작업진행
  4. 데이터베이스 연결 해제

웹 어플리케이션같이 많은 사람들이 동시에 사용하는 환경이라면 위 단계를 그대로 했다간 서버가 터져나갈 것이다.
따라서 미리 Pool을 만들어놓고 그곳에 DB와 연결된 커넥션 인스턴스들을 만들어 둔다.
이 인스턴스들은 사용자에게 할당이 되어 사용되다가 사용이 끝나면 DBCP Manager에게 되돌려 준다.

DBCP 추가하기

일단 먼저 jdbc 드라이버가 이클립스 프로젝트의 WebContent/WEB-INF/lib 디렉토리에 추가되어있어야 한다.
옛날에 했던 데스크톱어플리케이션을 만들땐 build path를 해주어야 했는데 jsp를 할땐 그냥 lib폴더에 넣어주면 된다.

mysql-connector-java-8.0.20.jar
버전은 시점에 따라 변할 수 있다.

이후 server.xml파일에 생긴 context태그에 resource태그를 작성한다.

<\Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="ora_user" password="hong" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/sampledb?serverTimezone=UTC"
/>

Resource태그 앞에 붙인 백슬래쉬는 제거.
굵은 글씨로 표시된 부분의 값을 알맞게 바꾸어 주면 된다.

  • name은 자바코드와 DBCP의 연결고리 역할이다.
Context context = new InitialContext();
Context envContext = (Context)context.lookup("java:comp/env"); 
DataSource dataSource = (DataSource)envContext.lookup("jdbc/TestDB");

name에 적힌 이름과 envContext의 lookup()메서드 안에 적힌 이름이 동일 해야한다. 안그러면 오류남!

  • username, password : mysql에 접속하기 위한 아이디와 비밀번호
  • url : 위에서 sampledb라 적힌 부분을 바꿔주면 된다. 이것은 mysql에서 테이블을 생성하기전에 만든 schema 혹은 database 이름을 말한다.
mysql> create schema 'schemaname';
mysql> create database 'databasename';

작은따옴표 내부에 둘러쌓인 그녀석들을 말한다. 참고로 오라클에선 tablespace라 표현했었는데 mysql에서는 schema 혹은 database라고 한다. (둘이 같은의미)

이후 자바로 코딩을 할때 DBCP에 있는 커넥션을 얻기 위해선

Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/TestDB");
Connection conn = ds.getConnection();

과 같이 작성한다.

profile
NOBODY

0개의 댓글