반응형
오늘은 JDBC(Java Database Connectivity)에서 배치 처리(Batch Processing)를 활용하여 성능을 최적화하는 방법에 대해 학습합니다. 배치 처리는 대량의 데이터를 한 번에 처리하는 경우 매우 유용하며, 특히 반복적인 SQL 실행에서 성능을 크게 향상시킬 수 있습니다.
1. JDBC 배치 처리란?
배치 처리는 여러 SQL 명령을 하나의 단위로 묶어서 데이터베이스에 전송하여 실행하는 기법입니다. 이를 통해 네트워크 왕복 횟수를 줄이고 성능을 최적화할 수 있습니다.
2. JDBC 배치 처리의 기본 원리
배치 처리는 다음 단계를 따릅니다:
- PreparedStatement 생성: SQL 문을 준비합니다.
- 데이터 바인딩 및 추가: 반복적으로 데이터를 바인딩하고 addBatch() 메서드를 사용해 명령을 배치에 추가합니다.
- 배치 실행: executeBatch() 메서드로 한꺼번에 실행합니다.
- 결과 확인: 반환된 결과를 확인하여 성공 여부를 처리합니다.
3. JDBC 배치 처리 예제
예제: 대량의 사용자 데이터를 삽입
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class BatchProcessingExample {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "your_username";
String password = "your_password";
String insertSQL = "INSERT INTO Users (id, name, email) VALUES (?, ?, ?)";
Connection conn = null;
try {
// 데이터베이스 연결
conn = DriverManager.getConnection(url, user, password);
// 자동 커밋 비활성화
conn.setAutoCommit(false);
try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
// 대량 데이터 삽입
for (int i = 1; i <= 1000; i++) {
pstmt.setInt(1, i); // ID 설정
pstmt.setString(2, "User" + i); // 이름 설정
pstmt.setString(3, "user" + i + "@example.com"); // 이메일 설정
// 배치에 추가
pstmt.addBatch();
// 일정량마다 실행
if (i % 100 == 0) {
pstmt.executeBatch();
pstmt.clearBatch();
}
}
// 남아있는 배치 실행
pstmt.executeBatch();
conn.commit();
System.out.println("배치 처리가 완료되었습니다.");
} catch (SQLException e) {
// 오류 시 롤백
conn.rollback();
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException closeEx) {
closeEx.printStackTrace();
}
}
}
}
4. 주요 코드 설명
- addBatch(): SQL 명령을 배치에 추가합니다.
- executeBatch(): 배치에 추가된 모든 SQL 명령을 한 번에 실행합니다.
- clearBatch(): 배치를 초기화하여 메모리 누수를 방지합니다.
- setAutoCommit(false): 배치 실행 후 수동으로 커밋하거나 롤백합니다.
5. 배치 처리의 장점과 한계
장점
- 성능 향상: 네트워크 트래픽 감소로 실행 시간이 단축됩니다.
- 코드 간결화: 반복적인 SQL 실행을 줄일 수 있습니다.
한계
- 에러 처리의 복잡성: 실행 중 하나의 SQL 명령이 실패하면 전체 배치를 롤백하거나 개별적으로 재처리해야 합니다.
- 메모리 관리: 대규모 데이터 처리 시 메모리 사용량을 주의해야 합니다.
6. 배치 처리에서 성능 최적화 팁
- 적절한 배치 크기 설정
- 배치 크기는 시스템에 따라 다르지만, 일반적으로 100~500건이 적당합니다.
- 너무 큰 배치 크기는 메모리 부담을 증가시키며, 너무 작으면 성능 향상이 미미합니다.
- 데이터베이스 연결 풀 사용
- HikariCP와 같은 연결 풀을 사용하면 데이터베이스 연결을 효율적으로 관리할 수 있습니다.
- 에러 발생 시 개별 처리
- executeBatch()는 실행된 SQL 명령 수를 배열로 반환합니다. 이를 통해 오류 발생 시 어떤 작업이 실패했는지 추적할 수 있습니다.
7. 대규모 프로젝트에서 배치 처리 활용
배치 처리는 다음과 같은 작업에 유용합니다:
- 로그 데이터 삽입
- 대량의 데이터 마이그레이션
- 보고서 생성 시 필요한 임시 데이터 삽입
Spring Batch 또는 Quartz Scheduler와 결합하면 더욱 강력한 배치 작업 환경을 구성할 수 있습니다.
반응형
'개발 > 전자정부프레임워크' 카테고리의 다른 글
파일 업로드와 다운로드 기능 구현 (1) | 2025.01.03 |
---|---|
RESTful API와 Pagination 구현 (0) | 2025.01.03 |
JDBC를 사용한 트랜잭션 처리 심화 학습 (0) | 2025.01.02 |
MyBatis 캐싱(Cache) 사용하기 (0) | 2025.01.02 |
MyBatis에서 1:N 관계 매핑 (3) | 2025.01.01 |