서론
이번에 Quartz로 Crawler 스케줄러를 만들면서 수집한 데이터를 저장하고 이력을 관리하기위한 저장소가 필요했다. Oracle, MariaDB, MongoDB 등 다양한 선택지가 있었지만, 필요할 때마다 서버를 실행해야하는 번거로움이 있었다. 그래서, Serverless의 SQLite를 써보기로 하였다.
SQLite란?
경량 RDBMS 라이브러리이며, 별도로 설치할 필요가 없고 프로그램 내에 자체포함되어 서버가 필요한 MySQL, PostgreSQL와는 달리 서버가 필요 없다. 또한, 기본적으로는 DB가 파일로 생성되지만, DB를 메모리에 생성하여 작업을 매우 빠르게 처리할 수 있다.
개발환경
1. JAVA 버전
- jdk-11.0.5
2. pom.xml
1
2
3
4
5
6
7
|
<!-- JDBC Drivers -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.27.2.1</version>
</dependency>
<!-- JDBC Drivers -->
|
cs |
소스코드
1. SQLiteManager.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
|
package com.dochi.db.ex;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
public class SQLiteManager {
// 상수 설정
// - Database 변수
private static final String SQLITE_JDBC_DRIVER = "org.sqlite.JDBC";
private static final String SQLITE_FILE_DB_URL = "jdbc:sqlite:quartz.db";
private static final String SQLITE_MEMORY_DB_URL = "jdbc:sqlite::memory";
// - Database 옵션 변수
private static final boolean OPT_AUTO_COMMIT = false;
private static final int OPT_VALID_TIMEOUT = 500;
// 변수 설정
// - Database 접속 정보 변수
private Connection conn = null;
private String driver = null;
private String url = null;
// 생성자
public SQLiteManager(){
this(SQLITE_FILE_DB_URL);
}
public SQLiteManager(String url) {
// JDBC Driver 설정
this.driver = SQLITE_JDBC_DRIVER;
this.url = url;
}
// DB 연결 함수
public Connection createConnection() {
try {
// JDBC Driver Class 로드
Class.forName(this.driver);
// DB 연결 객체 생성
this.conn = DriverManager.getConnection(this.url);
// 로그 출력
System.out.println("CONNECTED");
// 옵션 설정
// - 자동 커밋
this.conn.setAutoCommit(OPT_AUTO_COMMIT);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return this.conn;
}
// DB 연결 종료 함수
public void closeConnection() {
try {
if( this.conn != null ) {
this.conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.conn = null;
// 로그 출력
System.out.println("CLOSED");
}
}
// DB 재연결 함수
public Connection ensureConnection() {
try {
if( this.conn == null || this.conn.isValid(OPT_VALID_TIMEOUT) ) {
closeConnection(); // 연결 종료
createConnection(); // 연결
}
} catch (SQLException e) {
e.printStackTrace();
}
return this.conn;
}
// DB 연결 객체 가져오기
public Connection getConnection() {
return this.conn;
}
}
|
cs |
2. App.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package com.dochi.db.ex;
import java.sql.SQLException;
import com.dochi.db.ex.DDLService;
import com.dochi.db.ex.DDLService.ResultType;
public class App {
public static void main(String[] args) throws SQLException {
SQLiteManager manager = new SQLiteManager();
manager.createConnection(); // 연결
manager.closeConnection(); // 연결 해제
manager.ensureConnection(); // 재연결
}
}
|
cs |
실행결과
마치며
확실히 다른 RDBMS를 쓸 때보다 가볍고, 사용하기 편했다. 앞으로는 간단하게 DB를 써야할 일이 있으면 SQLite를 사용해봐야겠다. 다음 포스트에서는 테이블을 생성하고 삭제하는 방법에 대해서 알아보도록 하겠다.
'Back-end > JAVA' 카테고리의 다른 글
[JAVA] SQLite 무작정 시작하기 (3) - INSERT (0) | 2020.11.15 |
---|---|
[JAVA] SQLite 무작정 시작하기 (2) - TABLE 생성/삭제 (0) | 2020.11.15 |
[JAVA] Quartz 스케줄러 만들기 (5) - Crawler Job (0) | 2020.11.12 |
[JAVA] Quartz 스케줄러 만들기 (4) - Step By Step (0) | 2020.11.11 |
[JAVA] Quartz 스케줄러 만들기 (3) - Job 강제 종료 (0) | 2020.11.11 |
댓글