SpringDB 5

[Spring] 스프링 데이터베이스(5) - 트랜잭션 전파와 격리 레벨

트랜잭션 전파와 격리 레벨 현재 진행 중인 트랜잭션이 있는 상태에서 새로운 트랜잭션을 시작하고 싶다면 다음과 같이 새로운 커넥션을 가져와 트랜잭션을 시작할 수 있다. Connection conn = getConnection(); conn.setAutoCommit(false); // 중간 생략 ... Connection connNew = getConnection(); connNew.setAutoCommit(false); // 새로운 커넥션으로 트랜잭션 시작 // 중간 생략 ... connNew.commit(); // 새로운 트랜잭션 종료 connNew.close(); // 중간 생략 ... conn.commit(); conn.close(); 스프링은 새로운 트랜잭션을 새로 생성하는 것뿐만 아니라 기존 트랜..

Spring 2022.04.28

[Spring] 스프링 데이터베이스(4) - 트랜잭션

트랜잭션이란 인터넷 서점 사이트에서 도서를 구매할 경우 다음과 같은 순서로 작업이 진행될 것이다. 결제를 수행한다. 결재 내역을 저장한다. 구매 내역을 저장한다. 위의 과정은 도서 구매 시 반드시 모두 성공적으로 이루어져야 한다. 하나라도 실패할 경우 반드시 모든 과정이 취소되어야 한다. 예를 들어, 결제 내역 저장까지는 성공했는데, 구매 내역을 저장하는 과정이 실패했다고 하자. 이때, 전 과정이 취소되지 않는다면 구매자는 결제만 하고 구매는 하지 않는 것처럼 될 것이다. 트랜잭션은 여러 과정을 하나의 행위로 묶을 때 사용된다. 트랜잭션은 트랜잭션 범위 내에 있는 처리 과정 중 한 가지라도 실패할 경우 전체 과정을 취소시킴으로써 데이터의 무결성을 보장한다. 즉 트랜잭션은 모두 반영하거나 모두 반영하지 않..

Spring 2022.04.25

[Spring] 스프링 데이터베이스(3) - DataSource 설정

DataSource 설정 스프링은 다음과 같이 3가지 방식의 DataSource 설정을 지원하고 있다. 커넥션 풀을 이용한 DataSource 설정 JNDI를 이용한 DataSource 설정 DriverManager를 이용한 DataSourcr 설정 (테스트 목적) 커넥션 풀을 이용한 Data Source 설정 스프링은 c3p0와 같은 커넥션 풀 라이브러리를 이용해서 커넥션 풀을 지원하는 DataSoure를 설정할 수 있다. 이를 위해 먼저 다음과 같이 라이브러리를 추가해야 한다. org.springframework spring-context 4.0.4.RELEASE org.springframework spring-jdbc 4.0.4.RELEASE com.mchange c3p0 0.9.2.1 mysql ..

Spring 2022.04.19

[Spring] 스프링 데이터베이스(2) - 익셉션 처리

스프링 익셉션 처리 JDBC 프로그래밍을 할 때 데이터베이스 처리 과정에서 발생하는 에러는 항상 SQLException이다. 예를 들어 다음 코드를 보자. try { conn = getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from guestbook_message"); // 이하 생략 ... } catch (SQLException ex) { // 익셉션 처리 } 위 코드에서 SQLException을 캐치하는 코드는 Connection을 구하는 과정에서 익셉션이 발생했는지, Statement를 생성하는 과정에서 익셉션이 발생했는지, 아니면 SQL 쿼리를 실행하는 과정에서 익셉션이 발생했는지 바로 알 수 없다..

Spring 2022.04.18

[Spring] 스프링 데이터베이스(1) - 템플릿 클래스

스프링 데이터베이스 연동 스프링은 JDBC를 이용한 DAO 클래스를 구현할 수 있도록 다양한 기능을 지원하고 있는데, 그 내용은 다음과 같다. 템플릿 클래스를 통한 데이터 접근 지원 의미 있는 익셉션 타입 트랜잭션 처리 데이터베이스 연동을 위한 템플릿 클래스 데이터에 접근하는 코드는 거의 동일한 코드 구성을 갖는다. 예를 들어, JDBC를 사용할 경우 특정 테이블에서 데이터를 로딩하는 코드는 다음과 같은 구조를 갖는다. Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement("select * from message w..

Spring 2022.04.17