[jsp] DBCP / tomcat / oracle / DB 연결하기

seulki·2022년 10월 22일
0

jsp

목록 보기
44/51
post-custom-banner

🎈 DBCP (DataBase Connection Pool)

  • 데이터베이스와 연결된 커넥션미리 만들어서 저장해두고 있다가
    필요할 때 저장된 공간(pool) 에서 가져다 쓰고 반환하는 기법.
  • 커넥션 풀을 이용하고 커넥션을 미리 만들어 두고 사용하기 때문에
    매번 사용자가 요청할 경우 드라이버를 로드하고, 커넥션 객체를 생성해 연결하는 비효율적인 작업을 하지 않아도 된다.
  • 데이터베이스 부하를 줄일 수 있고, 효율적으로 관리할 수 있다.


🎈 JNDI(Java Naming and Directory Interface)

  • DBCP이름을 붙여 관리할 수 있는 인터페이스
  • 디렉토리 서비스에서 제공하는 데이터 및 객체를 발견하고
    참고하기 위한 자바 API
  • DB connetion을 위한 DB 연결 객체를 자바코드로 만들어왔는데,
    이것을 WAS 단tomcat으로 옮기는 것이다.
    그렇기 때문에 naming을 통해 이 connetion pool에 접근하여 커넥션넘겨받아야한다.
  • 즉, DB Pool을 미리 Naming 시켜두는 방법 (DB 연결 방법 중 하나)
  • 우리가 저장해 놓은 WAS 의 데이터베이스 정보JNDI를 설정해 놓으면, 웹 어플리케이션JNDI만 호출하면 간단해진다.


🎈 JNDI 사용 이유

  • 개발을 한 사람과 실제 서비스를 운영하는 사람은 다른 경우가 많기 때문에, 소스 레벨에서 설정되어 있는 것보다
    WAS 에서 설정되어 있는 것을 선호한다.
    (자바소스코드로 되어있다면, 엔지니어가 배포 시 마다,
    소스코드를 수정해야하기 때문 )

  • 자바 서버 폴더에서, 프로젝트에 맞는 폴더 안에 있는 context.xml 파일에서 생성!

  • 🗝️ WAS에 DB Connection 생성하기!
    - context.xml


<Resource
		name="jdbc/oracle"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName = "oracle.jdbc.driver.OracleDriver"
		url= "jdbc:oracle:thin:@localhost:1521:xe"
		username= "jsp"  // DB ID
		password="jsp"	 // DB pw
		maxActive="20"	 // 동시 접속 가능한 Connection 수
		maxIdle= "20" // 사용한 Connction을 사용 후 Pool에 반납 시
          			  // 최대로 유지할 개수 -> maxActive와 동일!
		maxWait= "-1" // Connection pool에 연결가능한 Connection이
  					  // 없을 때, 유저를 얼마나 기다리게 할 것인지
	/>



  • 🗝️ was 단에 생성한 DB connection과 project 와의 연결고리인 naming 만들기
    - web.xml 에 추가
 <resource-ref>
  	<description>Connection</description>
  	<res-ref-name>jdbc/oracle</res-ref-name>
  	<res-type>javax.sql.DataSource</res-type>
  	<res-auth>Container</res-auth>
  </resource-ref>

  • 🗝️ 라이브러리 추가하기

  • tomcat- dbcp 라이브러리 경로

  • 이클립스에 추가!


🎈 생성된 DBCP 이용하는 방법

  • dbcp_test.jsp
<%@page import="javax.naming.InitialContext"%>
<%@page import="java.util.Date"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.directory.InitialDirContext"%>
<%@page import="javax.naming.Context"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		//dbcp를 이용하는 방법
		Context context = new InitialContext(null);
		DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/oracle");
		Connection conn = dataSource.getConnection();
	%>

	<%=conn %>
</body>
</html>
  • connection 정보 출력되면 연결 성공!

  • DB select문으로 날짜 출력해보기!

    <%@page import="javax.naming.spi.DirStateFactory.Result"%>
    <%@page import="javax.naming.InitialContext"%>
    <%@page import="java.util.Date"%>
    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.sql.PreparedStatement"%>
    <%@page import="java.sql.Connection"%>
    <%@page import="javax.sql.DataSource"%>
    <%@page import="javax.naming.directory.InitialDirContext"%>
    <%@page import="javax.naming.Context"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<%
    		//dbcp를 이용하는 방법
    		Context context = new InitialContext(null);
    		DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/oracle");
    		Connection conn = dataSource.getConnection();
    		
    		String sql = "select sysdate from dual";
    		
    		PreparedStatement pstm = conn.prepareStatement(sql);
    		ResultSet rs = pstm.executeQuery();
    		
    		Date date = null;
    		
    		if(rs.next()){
    			date = rs.getDate(1);
    		}
    	%>
    
    <%-- 	<%=conn %> --%>
    <%=date %>
    </body>
    </html>

profile
웹 개발자 공부 중
post-custom-banner

0개의 댓글