DB 관련 이슈
1. 커넥션 : 앱(프로그램)과 DB의 연결 -> DB에 접속하고 종료하는 일련의 동작 과정
다수의 연결이나 정확하지 않은 연결, 해제가 없는 연결 => 시스템 부하 => 비용 손실
최대 연결 커넥션 초과로 DB 접속이 불가능해짐 (셧다운)
해결방안) 클라이언트 <-> DB데이터 <-- 서버 DB
데이터 일치를 위한 알고리즘, 보안, .. (동기화 작업 필요)
2. 트랜잭션 : 여러 작업을 하나의 작업처럼 단위화 (작업 단위)
DBCP
일정한 개수의 커넥션을 미리 확보하여 클라이언트 요청 시 확보한 커넥션을 앱에 제공하는 서비스
=> 시스템 부하 해결 -> DB 연결 성능 향상
클라이언트 -> 웹 -> JNDI -> 커넥션 풀(CP) -> DB
(지금까지는 클라이언트 -> 웹 -> JDBC -> DB 방식이었지만 이제는 위의 방식으로 접근)
이용 순서
1) 웹 어플리케이션 서버(톰캣)가 시작되면 커넥션을 미리 생성 == DBCP
2) 요청이 들어오면 JNDI를 이용하여 커넥션 객체를 전달
*JNDI(Java Naming and Directory Interface) : 어떤 과정이나 절차, 알고리즘 등을 캡슐화하여 처리
*네이밍 서비스(Naming Service) : 자바 객체(*), 서비스 파일, 서버 등을 가상의 이름과 연결해줌
3) 사용하지 않는 커넥션은 종료되고, 최소한의 커넥션을 유지 (모두 종료 X)
=> 클라이언트가 요청하면 바로 연결 가능 -> 성능 향상
커넥션 풀 이용 시
톰캣에 DBCP 내장되어 있기 때문에 별도의 설치가 필요하지 않음
DBCP : JDBC에서 제공하는 DataSource 인터페이스를 활용
-> JNDI를 통해 DataSource 인터페이스를 제공받을 수 있음
★설정 과정
1. 톰캣 서버에 DataSource 등록
2. server.xml OR context.xml : xml 파일에 DBCP 자원 등록 설정
(*.xml -> "설정"파일) - server.xml은 (웬만하면) 건들지 말 것!
<Resource maxIdle="5" maxActive="10" username="kim" password="1234" url="jdbc:oracle:thin:@localhost:1521:xe" auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" name="jdbc/orcl" type="javax.sql.DaraSource" />
3. JNDI 연결 시 필요한 각종 설정 추가
web.xml 파일에 웹 어플리케이션에서 참조하는 각종 서버 리소스에 대한 설정 변경 필요!
DBCP 연결 확인 예제)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DBCP 확인</title>
</head>
<body>
<!-- dataSource값은 web.xml에 작성된 <res-ref-name>jdbc/orcl</res-ref-name> -->
<sql:query var="rs" dataSource="jdbc/orcl">
select * from member
<!-- sql구문에 ;은 붙이지 않을 것! -->
</sql:query>
<h2>DBCP 연결 테스트</h2>
<c:forEach var="v" items="${rs.rows}">
${v.id} / ${v.name} <br>
</c:forEach>
</body>
</html>
[결과]
'개발 공부 > JAVA' 카테고리의 다른 글
[JAVA] SSH 접속 및 실행 (0) | 2024.03.02 |
---|---|
[JAVA] 어노테이션 (Annotation) (0) | 2021.09.07 |
[JAVA] 롤 챔피언 순위 크롤링 (0) | 2021.08.02 |
[JAVA] PreparedStatement를 이용한 트랜잭션(Transaction) 처리 (0) | 2021.07.29 |
[JAVA] JDBC / VO / DAO (0) | 2021.07.29 |