728x90
1. 트랜잭션 기본 개념
- JPA에서 모든 데이터 변경 작업(CREATE, UPDATE, DELETE) 은 반드시 트랜잭션 안에서 이루어져야 해.
- 트랜잭션 생명주기
- 시작: tx.begin();
- 작업 수행: persist, find, remove, 등.
- 성공 시 커밋: tx.commit();
- 오류 시 롤백: tx.rollback();
2. 매번 트랜잭션을 직접 만드는 방식 (지금처럼)
- EntityManager 를 사용할 때 매 작업마다 트랜잭션을 시작하고 종료해야 해.
- 이 방식은 단순한 자바 SE 환경 (Spring 없이 순수 JPA) 에서 많이 씀.
예시:
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
// 작업
em.persist(...);
tx.commit();
} catch (Exception e) {
tx.rollback();
}
3. 트랜잭션을 매번 만드는 이유
- JPA에서는 트랜잭션이 없으면 DB에 아무 작업도 적용되지 않음.
- 트랜잭션 단위 = 하나의 비즈니스 로직을 처리하는 단위로 보는 게 좋아.
- 예: 회원가입, 주문 처리, 게시글 작성 등.
4. Spring에서는 더 편하게 관리 가능
- Spring 프레임워크에서는 @Transactional 을 사용해서 자동으로 트랜잭션을 관리할 수 있어.
- 이 경우 직접 tx.begin() / tx.commit() 안 해도 돼.
예시 (Spring)
@Service
public class MemberService {
@Transactional // 이 메서드 실행 시 트랜잭션 시작 → 끝나면 자동 커밋/롤백
public void join(Member member) {
em.persist(member);
}
}
- 메서드 단위로 트랜잭션을 묶을 수 있어서 편리하고 실수도 줄어듦.
5. 상황 별 정리
상황 | 트랜잭션 관리 방식 |
순수 JPA (Java SE) | 직접 tx.begin() / tx.commit() |
Spring 사용 | @Transactional 으로 자동 관리 |
6. 정리
- 순수 JPA에서는 작업마다 트랜잭션 수동 관리.
- Spring에서는 @Transactional로 선언적 트랜잭션 관리.
- 단일 트랜잭션 = 하나의 비즈니스 작업 단위.
- 읽기만 하는 작업에도 트랜잭션 권장 (읽기 일관성 보장).
728x90
'JPA' 카테고리의 다른 글
데이터 중심 설계와 객체 중심 설계의 차이 – JPA 예제로 쉽게 이해하기 (2) | 2025.04.28 |
---|---|
JPA에서 플러시(Flush)와 커밋(Commit)의 차이 + 트랜잭션 관리 완벽 정리 (0) | 2025.04.27 |
JPA 기본키 매핑 전략 완벽 정리 (2) | 2025.04.26 |
JPA 영속성과 캐시의 관계 – 캐시처럼 동작하는 영속성 컨텍스트 (0) | 2025.04.24 |
JPA 영속성 컨텍스트란? 쉽게 이해하는 JPA 핵심 개념 (1) | 2025.04.24 |