2024. 12. 10. 22:34ㆍ데이터 분석/데이터 베이스 프로그래밍
• Transaction의 필요성, 관련 API 사용 방법
• DBCP 개념, 필요성
트랜잭션의 주요 속성 중 "데이터의 무결성과 일관성을 보장하기 위해 트랜잭션 실행 전후의 상태가 변함이 없어야 한다"는 속성은 무엇인가?
a) Atomicity
b) Consistency
c) Isolation
d) Durability
다음 중 JDBC의 commit() 메서드에 대한 설명으로 올바른 것은?
a) 트랜잭션 중간에 특정 시점으로 돌아가는 메서드이다.
b) 트랜잭션의 모든 작업을 정상적으로 완료하고 결과를 영구 저장한다.
c) 모든 트랜잭션을 취소하고 초기 상태로 되돌린다.
d) 트랜잭션을 자동으로 실행하도록 설정한다.
DBCP(Database Connection Pool)의 주요 기능으로 올바르지 않은 것은?
a) 미리 생성된 커넥션을 재사용하여 성능을 개선한다.
b) 사용하지 않는 커넥션을 자동으로 종료한다.
c) 각 요청마다 새로운 DB 커넥션을 생성한다.
d) 최대 커넥션 수를 제한하여 자원을 효율적으로 관리한다.
다음 코드에서 트랜잭션이 올바르게 처리되려면 빈칸에 들어가야 할 메서드로 알맞은 것은?
try {
conn.setAutoCommit(false); // Auto-commit 해제
// SQL 작업 실행
____________; // 트랜잭션 완료
} catch (SQLException e) {
____________; // 트랜잭션 취소
}
a) rollback(), commit()
b) commit(), rollback()
c) setAutoCommit(true), rollback()
d) rollback(), setAutoCommit(true)
트랜잭션이란 무엇이며, 왜 필요한지 설명하시오.
답: 트랜잭션(Transaction)은 데이터베이스 작업의 논리적인 작업 단위로, 하나 이상의 DML 문장을 묶어 "All or Nothing" 방식으로 처리합니다. 이는 작업이 전부 성공하거나, 실패 시 전체를 취소하여 데이터 무결성을 보장합니다. 예를 들어, 계좌 이체와 같은 작업에서 중간 오류로 인해 데이터 불일치가 발생하는 것을 방지하기 위해 필요합니다.
ㅡ>
데이터 무결성 보장
다음 코드에서 발생할 수 있는 문제점과 해결 방법을 서술하시오.
public static void transfer(int senderAccNo, int receiverAccNo, int amount) {
try {
String sql1 = "UPDATE account SET balance = balance - ? WHERE accNo = ?";
PreparedStatement stmt1 = conn.prepareStatement(sql1);
stmt1.setInt(1, amount);
stmt1.setInt(2, senderAccNo);
stmt1.executeUpdate();
String sql2 = "UPDATE account SET balance = balance + ? WHERE accNo = ?";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
stmt2.setInt(1, amount);
stmt2.setInt(2, receiverAccNo);
stmt2.executeUpdate();
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
답:
- 문제점: 예외 발생 시 conn.rollback()이 호출되지 않으므로, 데이터 무결성이 손상될 가능성이 있습니다.
- 해결 방법: 예외 처리 블록에서 conn.rollback()을 호출해야 하며, Auto-commit 모드를 해제해야 합니다.
conn.setAutoCommit(false); // Auto-commit 해제
try {
// SQL 작업 실행
conn.commit();
} catch (SQLException e) {
conn.rollback(); // 롤백 처리
}
DBCP의 주요 장점과 활용 사례를 설명하시오.
답: DBCP(Database Connection Pool)는 DBMS 연결을 미리 생성하고 재사용하여 시스템 성능을 개선합니다. 자원을 효율적으로 사용하며, 새로운 커넥션 생성의 비용을 절감합니다. 활용 사례로는 웹 애플리케이션의 대량 요청 처리, API 서버의 데이터베이스 액세스 등이 있습니다.
오류/문제점 찾기 문제
- 다음 코드에서 발생할 수 있는 문제점을 찾고 수정하시오.
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/testdb");
ds.setUsername("user");
ds.setPassword("password");
ds.setMaxTotal(0); // 최대 커넥션 수 설정
답: setMaxTotal(0)은 커넥션 풀에서 최대 커넥션 수를 0으로 설정하므로, 어떠한 커넥션도 생성되지 않습니다. setMaxTotal() 값을 10과 같이 양의 정수로 설정해야 합니다.
ds.setMaxTotal(10); // 최대 커넥션 수 수정
빈칸 완성 문제
- 다음 코드에서 JDBC 트랜잭션 처리 과정의 빈칸을 채우시오.
conn = DriverManager.getConnection(DB_URL, USER, PASS);
conn.___________; // Auto-commit 해제
try {
// SQL 실행
conn.___________; // 트랜잭션 완료
} catch (SQLException e) {
conn.___________; // 트랜잭션 취소
} finally {
conn.___________; // Auto-commit 재설정
}
conn.setAutoCommit(false); // Auto-commit 해제
conn.commit(); // 트랜잭션 완료
conn.rollback(); // 트랜잭션 취소
conn.setAutoCommit(true); // Auto-commit 재설정
DBCP의 주요 구성 요소를 설명하는 빈칸을 채우시오.
DBCP는 미리 생성된 커넥션을 ()로 관리하며, 사용 후에는 다시 ()으로 반환됩니다.
'데이터 분석 > 데이터 베이스 프로그래밍' 카테고리의 다른 글
[주요 내용] 데이터 베이스 프로그래밍 (0) | 2024.12.11 |
---|---|
JDBC Programming (0) | 2024.11.03 |
[주요 내용] 문제 형식 (0) | 2024.10.20 |