DAO란❓
- 로직 중 오직 CRUD 수행만을 목적으로 정의된 객체
- 사용이유 : 재사용성을 위한 CRUD코드의 분리가 목적
Connection Pool 이란❓
- 요청이 없더라도 데이터베이스와의 연결객체를 미리 다수 확보하여 관리하는 기법
- 사용이유 : 웹은 요청 후 응답을 받는 시점에는 접속유지가 불가능하여 ,이때 이 요청에 의해 생성된 Connection도 닫아야 하므로, 접속자가 많을때는 접속객체 생성 소멸이 너무 빈번하게 발생
- 사용법 : 클라이언트의 요청이 있을때 접속객체를 생성하는 게 아니라, 미리 다수 확보된 커넥션 중 하나를 클라이언트에게 할당하고, 요청이 끝날때 다시 커넥션풀로 돌려보냄
Singleton 이란❓
- 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴
- 사용이유 : 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다. 또한 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
Singleton 을 이용한 Connection 사용
<PoolManager.java>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package site0616.model.pool;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
//커넥션을 모아놓고 관리하는 커넥션풀 객체는 메모리에 인스턴스를 오직 1개만 두고 사용하기위해
//싱글턴으로 처리해보자(SingleTon)
public class PoolManager {
InitialContext context;
DataSource ds;
private static PoolManager instance;
private PoolManager() {
try {
context=new InitialContext();
ds=(DataSource)context.lookup("java:comp/env/jndi/oracle");//JNDI로 자원을 검색하여 객체반환
} catch (NamingException e) {
e.printStackTrace();
}
}
//생성자를 아무도 못쓰게 막아놓았으므로, 외부의 클래스들이
//PoolManager의 인스턴스를 반환받아갈 수 있도록 책임을 지자
public static PoolManager getInstance() {
if(instance==null) {
instance=new PoolManager();
}
return instance;
}
//누구든지 쿼리문을 수행하기 위해 Connection이 필요하다면 아래의 메서드를 호출하여 Connection을 가져가기만 하면됨
public Connection getConnection() {
Connection con=null;
try {
con=ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
//Connection 반납
public void release(Connection con) {
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//Connection, PreparedStatement 반납
public void release(Connection con, PreparedStatement pstmt) {
if(pstmt!=null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//Connection, PreparedStatement , ResultSet반납
public void release(Connection con, PreparedStatement pstmt, ResultSet rs) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt!=null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
|
cs |
<DAO.java>
- dao 에서 커넥션을 사용시 아래와 같이 인스턴스와 커넥션을 가져와서 사용한다.
반응형
'개발 > jsp' 카테고리의 다른 글
jsp Google Map api 사용 (0) | 2021.06.28 |
---|---|
jsp javaBean (0) | 2021.06.28 |
jsp 댓글 게시판(MyBatis / Ajax / Maven / Lombok) & 세션관리 (0) | 2021.06.25 |
jsp 파일업로드 (oreilly / apache) (0) | 2021.06.23 |
jsp Servlet / Tomcat / JNDI (0) | 2021.06.17 |
댓글