class_34.sql
class_jdbc --> src --> ch05
class_34.sql
0.00MB
BatchExample.java
0.00MB
2. 배치 처리
배치 처리(Batch Processing)는 데이터를 일괄적으로 모아서 한 번에 처리하는 방법을 말합니다.
배치 처리는 대량의 데이터를 처리하거나 주기적으로 실행되는 작업을 자동화하는 데 사용됩니다.
일반적으로 대화형 사용자 입력 없이 실행되며, 백그라운드에서 작업이 수행됩니다.
ex) 새벽4시에 스케줄러를 사용해 그 시간만 되면 데이터를 일괄적으로 처리하여 데이터베이스에 데이터를 저장한다.
- 배치 처리(Batch Processing)는 여러 SQL 문을 한 번에 실행하여 성능을 향상시키는 방법입니다.
- 여러 SQL 문을 하나의 배치로 묶어서 데이터베이스에 전송하고 실행합니다.
- Statement 및 PreparedStatement를 이용한 배치 처리가 존재합니다.
특징
- 자동화: 주기적으로 실행되며, 인간의 개입 없이도 일정한 시간에 자동으로 수행됩니다.
- 대량 처리: 대량의 데이터를 한 번에 처리할 수 있습니다.
- 비실시간: 실시간으로 사용자와 상호작용하지 않고, 정해진 시간에 실행됩니다.
- 신뢰성: 정해진 규칙에 따라 안정적으로 데이터를 처리합니다.
사용 예시
- 급여 계산: 회사의 모든 직원에 대한 월급을 한 번에 계산하고 지급하는 작업.
- 데이터 마이그레이션: 한 시스템에서 다른 시스템으로 대량의 데이터를 이전하는 작업.
- 로그 분석: 서버 로그 파일을 모아서 주기적으로 분석하고 보고서를 생성하는 작업.
package ch05;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class BatchExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/demo3?serverTimezone=Asia/Seoul";
String user = "root";
String password = "asd123";
Connection conn = null;
try {
// MySQL 드라이버 로드
Class.forName("com.mysql.cj.jdbc.Driver");
// 자바 표준 API
conn = DriverManager.getConnection(url, user, password);
// 트랜잭션 처리
conn.setAutoCommit(false); // 수동 커밋으로 변경합니다.
String sql = " INSERT INTO user(name, email) VALUES(?, ?) ";
// 배치 처리 --> User 테이블에 한번 사용자를 3명을 넣어보자.
PreparedStatement pstmt = conn.prepareStatement(sql);
// 1번 사용자 처리
pstmt.setString(1, "유저1");
pstmt.setString(2, "유저1@nate.com");
// pstmt.executeUpdate();
// 배치처리 하기위해 호출할 메서드가 필요
pstmt.addBatch();
// 2번 사용자 처리
pstmt.setString(1, "유저2");
pstmt.setString(2, "유저2@nate.com");
pstmt.addBatch(); // <--
// 3번 사용자 처리
pstmt.setString(1, "유저3");
pstmt.setString(2, "유저3@nate.com");
pstmt.addBatch(); // <--
int[] rowCounts = pstmt.executeBatch();
conn.commit(); // 물리적인 저장 장치에 영구히 반영하겠다.
System.out.println("배치 처리 완료 : " +rowCounts.length);
} catch (Exception e) {
e.printStackTrace();
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
} finally {
try {
if(conn != null) {
conn.close();
}
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
} // end of main
} // end of class
'Java' 카테고리의 다른 글
| 2024.06.17 Data Structure(자료구조) JDBC 성능 최적화 (0) | 2024.06.17 |
|---|---|
| 2024.06.14 Data Structure(자료구조) JDBC를 활용한 CRUD 와 SOLID 원칙 - 7 (0) | 2024.06.14 |
| 2024.06.12 Data Structure(자료구조) JDBC 트랜잭션 관리와 배치 처리 (0) | 2024.06.12 |
| 2024.06.12 Java 유용한 클래스 래퍼 클래스 (Wrapper class) (0) | 2024.06.12 |
| 2024.06.11 Data Structure(자료구조) JDBC 데이터 기본 조작(CRUD) (0) | 2024.06.11 |