[JSP] DBCP & JNDI

보람·2023년 3월 26일
0

JSP

목록 보기
12/17

1. DBCP

(1) DBCP란?

  • DataBase Connection Pool
  • 데이터베이스와 연결된 커넥션을 미리 만들어서 저장해두고 있다가 필요할 때 저장된 공간(pool)에서 가져다쓰고 반환하는 기법

(2) 커넥션 풀 장점

  • 커넥션 풀은 이용하면 커넥션을 미리 만들어두고 사용
  • 사용자가 요청할 경우 드라이버를 로드하고, 커넥션 객체를 생성해 연결하고 종료하는 비효율적인 작업 필요없음
  • 즉 데이터베이스이 부하를 줄일 수 있고 자원을 효율적으로 관리가능

(3) dbcp 사용하기

1) Servers > **-config 폴더 > context.xml 파일

  • </context> 직전에 추가

	<Resource 
       name="jdbc/oracle"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@localhost:1521:xe"
       username="jsp"
       password="jsp"
       maxActive="20"
       maxIdle="20"
       maxWait="-1"
    />
</Context>    

2) 다이나믹 프로젝트 폴더 > src > WEB-INF > web.xml 파일

  • </web-app> 직전에 추가
 <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>

3) dbcp 사용하기

  • *.jsp 파일 생성
<body>
<%
	Context context = new InitialContext(null);
	DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/oracle");
 // 톰캣에서 리소스를 관리하는 가상의 디렉터리 `java:comp/env`에서 'jdbc/myoracle`이라는 이름의 리소스를 찾는다.
	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 %>
</body>

👍 결과

2. JNDI

(1) JNDI란?

  • Java Naming and Directory Interface
  • 자바 API
  • 디렉토리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고하기 위한 API
  • 외부(WAS)에 있는 객체를 가져오기 위한 기술
  • DB Pool을 미리 Naming시켜두는 방법 (DB 연결 방법중 하나)
  • 우리가 저장해 놓은 WAS의 데이터베이스 정보에 JNDI를 설정 -> 웹 어플리케이션은 JNDI만 호출

(2) 사용하는 이유

- 운영, 관리, 최적화 문제 대처 가능

① WAS에서 설정되어 있는 것을 선호

  • 개발을 한 사람과 실제 서비스를 운영하는 담당자는 다른 경우가 많기 때문에, 소스 레벨에서 설정되어 있는 것보다 WAS에서 설정되어 있는 것을 선호

② 자원낭비 줄이기 가능

  • WAS에서 한 번 설정하면 여러개의 웹 어플리케이션에 올려서 사용 가능

③ 대리 가능

  • 장애가 나거나 성능이 정상적이지 못하면 다른 한 서버가 대신 일 가능
profile
안녕하세요, 한보람입니다.

0개의 댓글