[JSP] 05. 데이터베이스

Min's Study Note·2023년 11월 6일
0

JSP

목록 보기
7/16

데이터베이스란?

일반적으로 컴퓨터 시스템에 전자적으로 저장되는 구조화된 정보 또는 데이터의 조직화된 모음

  • 우리가 매일 PC나 스마트폰을 통해 접하는 거의 모든 웹 애플리케이션은 데이터베이스를 사용
  • 정보를 제공하는 측에서는 필요한 내용을 데이터베이스에 미리 입력
  • 클라이언트는 콘텐츠를 웹 페이지를 통해 확인
  • JSP에서는 JDBC(Java Database Connectivity)를 통해 데이터베이스와 연동

JDBC 설정 및 데이터베이스 연결

JDBC(Java Database Connectivity)

  • 자바로 데이터베이스 연결 및 관련 작업을 할 때 사용하는 API
  • JDBC API는 JDBC 드라이버가 있어야 하므로 다운로드 및 설정 후 사용
  • 오라클(Oracle XE) 사용

▣ JDBC 드라이버 설정

  • C:\01DevelopKits\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
  • 드라이버 파일을 프로젝트의 WEB-INF 하위의 lib 폴더에 추가
  • 단순히 복사하여 추가하는것 만으로 모든 설정 완료
  • 배포 시에도 드라이버는 함께 따라가므로 별도의 설정 필요없음

▣ 연결 관리 클래스 작성

public class JDBConnect { Connection ⇐ DB연결
Statement, PreparedStatement, ResultSet ⇐ 쿼리실행 및 결과
public JDBConnect() {
	try { ⇐ 오라클 드라이버 및 커넥션URL, 계정 정보
		Class.forName("oracle.jdbc.OracleDriver"); 
        String url = "jdbc:oracle:thin:@localhost:1521:xe"; 
        String id = "musthave"; 
        String pwd = "1234"; 
        con = DriverManager.getConnection(url, id, pwd); 
	}catch (Exception e) {
    	e.printStackTrace(); 
	}
	}
}

▣ 연결 설정 개선1

<context-param>
	<param-name>OracleDriver</param-name> ⇐ 드라이버 이름
	<param-value>oracle.jdbc.OracleDriver</param-value>
</context-param>
<context-param>
	<param-name>OracleURL</param-name> ⇐ 접속 URL 
    <param-value>jdbc:oracle:thin:@localhost:1521:xe</param-value>
</context-param>
<context-param>
	<param-name>OracleId</param-name> ⇐ 계정 아이디
	<param-value>musthave</param-value>
</context-param>
<context-param>
	<param-name>OraclePwd</param-name> ⇐ 패스워드
	<param-value>1234</param-value>
</context-param>
  • web.xml에 컨텍스트초기화매개변수로 입력
  • application 내장객체를통해얻어온다.
public JDBConnect(String driver, String url, String id, String pwd) {
	try { ⇐ 생성자 코드가 이와 같이 간소화
		Class.forName(driver); 
        con = DriverManager.getConnection(url, id, pwd);
        System.out.println("DB 연결 성공(인수 생성자 1)"); 
	}catch (Exception e) { 
    	e.printStackTrace(); 
	}
}
  • 접속정보 변경시 web.xml만 수정하면 됨
  • 하지만 JSP에서 반복적인 코드가 발생됨
<h2>JDBC 테스트 2</h2>
<% ⇐ application내장객체로 컨텍스트 초기화 매개변수얻어옴
String driver = application.getInitParameter("OracleDriver"); 
String url = application.getInitParameter("OracleURL"); 
String id = application.getInitParameter("OracleId"); 
String pwd = application.getInitParameter("OraclePwd"); 

JDBConnect jdbc2 = new JDBConnect(driver, url, id, pwd);
jdbc2.close(); 
%>

▣ 연결 설정 개선2

public JDBConnect(ServletContext application) { ⇐ 생성자 수정
	try { ⇐ 생성자에서 직접 web.xml의 내용 읽어옴
	String driver = application.getInitParameter("OracleDriver");
    Class.forName(driver); 
    
    String url = application.getInitParameter("OracleURL"); 
    String id = application.getInitParameter("OracleId"); 
    String pwd = application.getInitParameter("OraclePwd"); 
    con = DriverManager.getConnection(url, id, pwd); 
  • web.xml은 그대로 사용
  • JSP에서 반복적인 코드를 생성자로 이동
  • JSP의 코드 간소화
<h2>JDBC 테스트 3</h2>
<% ⇐ JSP에서 application 내장객체를 인수로 전달
JDBConnect jdbc3 = new JDBConnect(application);
jdbc3.close(); 
%>

커넥션 풀로 성능 개선

커넥션 풀(connection pool)

  • 웹 서버는 클라이언트의 요청시 마다 DB 연결 및 해제를 반복
  • 빈번한 연결과 해제는 시스템 성능을 영향을 미침
  • 이 문제에 대한 해법으로 커넥션 풀이 널리 사용됨
  • Connection 객체를 미리 생성해 풀(pool)에 넣어놓고, 요청이 있을 때 가져다 사용하는 기법

▣ JNDI(Java Naming and Directory Interface)

  • 자바 소프트웨어에서 객체나 데이터를 전체 경로를 몰라도 ‘이름’만으로 찾아 쓸 수 있는 디렉터리 서비스

▣ JNDI를 통한 커넥션 풀 사용 절차

  • WAS(톰캣)가 시작할 때 server.xml과 context.xml에 설정한 대로 커넥션 풀을 생성
  • JSP 코드에서 JNDI 서버(WAS가 제공)로부터 데이터소스 객체를 얻어옴
  • 데이터소스로부터 커넥션 객체를 가져옴
  • DB 작업 수행
  • 모든 작업이 끝나면 커넥션 객체를 풀로 반환

▣ server.xml 수정

  • <GlobalNamingResources> 엘리먼트에 <Resource> 항목 추가
    - driverClassName, type
    - JDBC 드라이버 및 DataSource 클래스 설정
    - minIdle, maxTotal, maxIdle, maxWaitMillis
    - 개체의 개수 및 대기시간 설정
    - url, name, username, password
    - 오라클 연결을 위한 URL, 커넥션풀의 이름, 계정 정보

▣ context.xml 수정

  • <Context> 엘리먼트에 <ResourceLink> 항목 추가
    - global, name
    - 커넥션풀의 이름 및 전역적으로 사용할 이름 지정
    - type
    - DataSource 클래스 설정

💡(참고) JDBC란?

🔽 context.xml 파일

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
    <Resource name="dbcp_oracle"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
              username="lmh"
              password="1234"
              maxTotal="20"
              maxIdle="10"
              maxWaitMillis="-1"/>

    <Resource name="dbcp_mysql"
              auth="Container"
              type="javax.sql.DataSource"
              maxTotal="100"
              maxIdle="30"
              maxWaitMillis="10000"
              username="lmh"
              password="1234"
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/jspdb?useSSL=false&amp;serverTimezone=Asia/Seoul&amp;characterEncoding=UTF-8"/>
</Context>

👉 out.printout 컴파일 오류 해결
maven repository > tomcat jsp api

<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jsp-api</artifactId>
    <version>10.1.15</version>
</dependency>

pom.xml파일 수정 후 Maven 변경 내용 로드 버튼 클릭

0개의 댓글

관련 채용 정보