Skip to main content
transaction() 메서드를 사용하면 트랜잭션을 세밀하게 제어할 수 있습니다.

수동 트랜잭션 개요

세밀한 제어

트랜잭션 경계 명확 부분 트랜잭션 가능

조건부 롤백

상황에 따른 롤백 커밋 전 검증

중첩 트랜잭션

Savepoint 사용 부분 롤백 지원

명시적 관리

트랜잭션 흐름 명확 디버깅 용이

기본 사용법

단순 트랜잭션

transaction() 콜백 함수가 성공적으로 완료되면 자동으로 COMMIT됩니다. 에러가 발생하면 자동으로 ROLLBACK됩니다.

트랜잭션 흐름

실전 예제

예제 1: 기본 트랜잭션

예제 2: 조건부 롤백

예제 3: UpsertBuilder와 함께

중첩 트랜잭션 (Savepoint)

기본 중첩

부분 롤백

중첩 트랜잭션의 장점: - 부분 작업의 독립적 롤백 - 복잡한 비즈니스 로직 구조화 - 에러 격리 가능

명시적 롤백

rollback() 호출

rollback() 호출 후에도 코드는 계속 실행됩니다. 명시적으로 return하거나 throw해야 합니다.

트랜잭션 격리 수준

Isolation Level 설정

격리 수준별 특징

격리 수준 선택 가이드: - 일반 조회/수정: READ COMMITTED - 일관성 중요: REPEATABLE READ (기본값) - 금융 거래: SERIALIZABLE

에러 처리

Try-Catch 패턴

트랜잭션 내 에러 처리

트랜잭션 디버깅

로깅

성능 최적화

트랜잭션 최소화

트랜잭션 최적화 원칙: - 트랜잭션은 최대한 짧게 - 외부 API 호출은 트랜잭션 밖에서 - 읽기 전용 조회는 트랜잭션 불필요 - 락 대기 시간 최소화

@transactional vs 수동 트랜잭션

비교

선택 가이드

다음 단계

@transactional

데코레이터로 간편하게

모범 사례

트랜잭션 사용 가이드

UpsertBuilder

트랜잭션 내 데이터 저장

Puri

쿼리 빌더 사용하기