데이터베이스(9)
-
[트랜잭션 #1] @Transactional 프록시 생략으로 인한 Rollback 실패 사례
트랜잭션(Transaction) 실패 경험을 통한 내용 정리1.. 예외처리로인한 Transaction Proxy 실패2. self Call로 인한 @Transactional 실패 트랜잭션(Transaction) 개요스프링 프레임워크에서 트랜잭션은 ACID(원자성·일관성·격리성·지속성) 규칙을 따르며,하나의 처리 흐름이 모두 성공해야 커밋되고, 중간에 문제가 발생하면 전부 롤백되도록 보장주로 @Transactional 애노테이션을 통해 스프링 AOP 프록시가 트랜잭션 경계를 관리원자성(Atomicity): 작업 전체가 성공하거나, 하나라도 실패하면 모두 롤백일관성(Consistency): 트랜잭션 전후에 데이터베이스 일관성이 유지격리성(Isolation): 동시성 제어를 통해 트랜잭션 간 간섭을 방지지..
2025.04.30 -
[JDBC #6] JDBC Template을 활용한 JDBC 편리하게 이용하기
JDBC Template 사용 이유 Spring에서는 반복적인 JDBC 코드를 간소화하기 위해 JdbcTemplate을 제공한다. JdbcTemplate은 SQL 실행, 파라미터 바인딩, 예외 처리, 리소스 정리 등을 자동으로 처리해주므로, 개발자는 비즈니스 로직에만 집중할 수 있다. JDBC Template 선언 방법 1) DataSource 주입 방법public class Test { private final JdbcTemplate template; public Test(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); }} 2) @Autowired 사용@Componentpublic clas..
2024.11.06 -
[@Transactional] 스프링이 제공해주는 트랜잭션 이해하기
@Transactional과 트랜잭션 프록시 구조Spring에서는 서비스 계층에서 트랜잭션을 분리하고 비즈니스 로직에만 집중할 수 있도록 트랜잭션 프록시 기반의 구조를 제공한다. 이는 내부적으로 AOP(Aspect-Oriented Programming)를 사용 (프록시 구조) 하여 구현된다 1. 기존 방식) 트랜잭션을 직접 작성한 경우TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());try { // 비즈니스 로직 수행 logic(); transactionManager.commit(status);} catch (Exception e) { transactionMa..
2024.11.06 -
[JDBC #5] Transaction Template을 활용한 간단한 트랜잭션 적용
Transaction Template 도식화 Transaction Template 사용Spring에서는 TransactionTemplate을 사용하여 트랜잭션 제어를 더 간단하게 작성할 수 있다. 내부적으로는 PlatformTransactionManager를 사용하되, 템플릿 방식으로 트랜잭션 경계를 감싸준다.트랜잭션 템플릿의 장점try-catch-finally 반복 없이 코드가 간결해진다.트랜잭션 범위를 람다 표현식 또는 콜백 메서드로 명확하게 구분할 수 있다.선언적 트랜잭션(@Transactional)을 사용하지 않고 명시적으로 경계를 설정하고 싶을 때 유용하다. Transaction Template 설정 예시 (JDBC 기준)@Configurationpublic static class Conf..
2024.11.06 -
[JDBC #4] PlatformTransactionManager을 통한 트랜잭션 관리
애플리케이션 구조프레젠테이션 계층 (Controller) └─ UI와 요청 응답 처리, 사용자 요청 검증 서비스 계층 (Service) └─ 비즈니스 로직 수행, 트랜잭션 제어데이터 접근 계층 (Repository) └─ 실제 DB 접근 및 SQL 실행 순수 JDBC 트랜잭션 문제점public void func(String param1, String param2, int param3) throws SQLException { Connection con = dataSource.getConnection(); try { con.setAutoCommit(false); // 트랜잭션 시작 bizLogic(con, param1, param2, param3); con..
2024.11.05 -
[JDBC #3] 순수 JDBC와 트랜잭션 이해하기
1. 트랜잭션 ACID2. 트랜잭션 격리 수준3. DB 세션 이해하기4. 순수 JDBC 트랜잭션 사용기 트랜잭션 ACID원자성 (Atomicity)트랜잭션 내에서 실행한 작업들은 모두 성공하거나 모두 실패일관성 (Consistency)일관성 있는 데이터베이스 상태 유지 (무결성 제약 조건을 항상 만족)격리성 (Isolation)동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않아야함지속성 (Durability)트랜잭션을 성공적으로 끝내면 그결과가 항상 기록되어야함 트랜잭션 격리 수준READ UNCOMMITED (커밋되지 않은 읽기)READ COMMITTED (커밋된 읽기)REPEATABLE READ (반복 가능한 읽기)SERIALIZABLE (직렬화 가능)일반적으로, READ COMMITED(커밋된..
2024.11.05