JSP 에서 JDBC 로 Oracle DB 연동하기

박영준·2024년 6월 12일
0

JSP

목록 보기
8/17

1. 오라클 설치

오라클 12C 설치

2. 계정 생성

DB 연동을 위해서는 sys 게정을 제외하고 연동을 위한 사용자 계정이 필요하다.

윈도우 검색창 > cmd(명령 프롬프트)

# 1. sys 게정으로 접속
sqlplus / as sysdba

# 2. 사용자 생성
## create user [아이디] identified by [패스워드];
SQL> create user park identified by park;

# 3. 생성된 계정 활성화
## alter user [아이디] account unlock;
SQL> alter user park account unlock;

# 4. 권한 부여
## grant connect, resource to [아이디];
SQL> grant connect, resource to park;

3. Oracle SQL Developer 로 접속 확인

4. Eclipse 에서 Server, Project, JSP 생성

Server, Project, JSP 생성

Oracle 을 설치하면, 기본적으로 하위 디렉터리에 ojdbc가 존재한다. (따로 다운 불필요)

5. 프로젝트에 ojdbc.jar 넣기

  1. 오라클 설치시, oracle 하위 디렉터리에 ojdbc.jar 파일이 자동 생성되어있었다.
    이 경로를 따라 찾아간다.

  2. ojdbc8.jar 을 복사해서, webapp > WEB-INF > lib 경로에 붙여넣는다.

6. 연동하기

방법 1. 직접 DB 연결

JDBC 기본 구동 절차 를 참고하여 jsp 파일을 작성한다.

<%@page import="java.sql.*"%>
<%@ 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>
	<%
		Connection con = null;
		Boolean connect = false;	
	
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");			// 드라이버 로드
			con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "park", "park");		// 연결
			
			connect = true;
			con.close();
			
		} catch(Exception ex) {
			connect = false;
			ex.printStackTrace();
		}
	%>

	<%
		if (connect = true) { %>
			<h3>DB 연결 성공</h3>
	<%	} else { %>
			<h3>DB 연결 실패</h3>
	<%  } %>

</body>
</html>

이 방법의 단점?

  • 사용자가 매번 요청할때마다 Driver 로드, Connection 객체 생성/연결/종료하므로 비효율적
  • 계정 정보가 그대로 노출
  • 커넥션 풀 多 사용
    • 커넥션 풀은 tomcat(WAS)이 실행될 때, DB와 연결된 객체들이 Pool에 저장되고,
      클라이언트 쪽에서 요청이 오면 Connection을 빌려주고 처리가 끝난 후에는 반납받는 저장받식을 사용
    • 만약 동시 접속자 多 면, 사용중인 Connetion이 반납될 때까지 나머지 접속자들은 대기해야한다.

주의!
jdbc:oracle:thin:@localhost:1521:orcl
DB 연결의 url 입력 시 'orcl' 대소문자 구분에 주의하자.

방법 2. context.xml & web.xml 사용

context.xml

<?xml version="1.0" encoding="UTF-8"?>

<Context>
	<Resource name = "Oracle_park"
			auth="Container"
			driverClassName="oracle.jdbc.driver.OracleDriver"
			type="javax.sql.DataSource"
			url = "jdbc:oracle:thin:@localhost:1521:orcl"
			username="park"
			password="park"
			maxActive="20"
			maxIdle="10"
			maxWait="-1"	
	/>
</Context>
  • webapp > META-INF 마우스 우측 버튼 > New 로 context.xml 라는 이름의 파일을 생성해준다.
  • '3. Oracle SQL Developer 로 접속 확인' 을 참고하여 DB에 접속한 계정 정보를 바탕으로 입력해준다.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  <display-name>jsp_oracle_prj</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <resource-ref>
  	<description>Connection</description>
  	<res-ref-name>Oracle_park</res-ref-name>
  	<res-type>javax.sql.DataSource</res-type>
  	<res-auth>Container</res-auth>
  </resource-ref>
  
</web-app>
  • webapp > WEB-INF > web.xml 에서 web-app태그 안에 작성해준다.
  • '3. Oracle SQL Developer 로 접속 확인' 을 참고하여 DB에 접속한 계정 정보를 바탕으로 입력해준다.
    • web.xml이 가장 먼저 불러오는 파일이다.
    • 따라서, web.xml 에서는 context.xml 을 불러올 수 있도록 작성해준다.

주의!
이클립스 사용법 - web.xml 이 안 보일 때

jsp 파일

<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<%@page import="java.sql.*"%>
<%@ 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>
	<%
		Connection con = null;
		Boolean connect = false;	
	
		try {
			// 1. 컨택스트 객체 생성해서, 커넥션 풀 생성
			Context init = new InitialContext();
          
          	// 2. 쓰레드 풀 관리자 객체 생성 
			DataSource ds = (DataSource) init.lookup("java:comp/env/Oracle_park");
          
            // 3. Source로부터 커넥션 풀(객체) 얻기
			con = ds.getConnection();
			
			connect = true;
			con.close();
			
		} catch(Exception ex) {
			connect = false;
			ex.printStackTrace();
		}
	%>

	<%
		if (connect = true) { %>
			<h3>DB 연결 성공</h3>
	<%	} else { %>
			<h3>DB 연결 실패</h3>
	<%  } %>

</body>
</html>
  1. 컨택스트 객체 생성해서, 커넥션 풀 생성

    • InitialContext 클래스는 Context 인터페이스를 상속받았으므로 오버라이딩해서 생성
    • context.xml 에 입력된 정보를 읽어오기 위한 객체 (JNDI 를 이용하는 것)
  2. 쓰레드 풀 관리자 객체 생성

    • 해당 객체는 커넥션 풀을 관리
    • lookup() 메서드 : 등록된 naming 서비스로부터 자원을 찾을 때 사용
    • JNDI 설정 : java:comp/env/[context.xml 에 입력한 name정보]

이 방법의 장접?

  • 보안성
  • '방법 1. 직접 DB 연결' 에서 보다 더 적은 커넥션 풀을 사용하게 된다.
  • 원하는 것만 사용한 후 반환하기 때문에, 빠른 속도

참고

7. 연동 확인하기

주의!
webapp 하위에 jsp 파일이 존재해야한다.


참고: [Eclipse] 이클립스[3]: 이클립스 - JDBC(오라클DB/sqldevoper) 연동하기
참고: [JSP] JSP에서 DB연동하기 (JDBC, 오라클, 커넥션 풀)
참고: JDBC를 이용한 DB작업_커넥션풀(Connection Pool) [3/3]

profile
개발자로 거듭나기!

0개의 댓글