코딩/Spring

@Transactional

americanoallday 2025. 3. 31. 19:49
트랜잭션 = 데이터베이스에서 하나의 논리적인 작업 단위

 

✔ 예를 들어 이런 상황:

1. 사용자 계좌에서 10만원 인출  
2. 다른 계좌에 10만원 입금

→ 둘 중 하나라도 실패하면 모두 실패로 되돌려야 함! (rollback)

→ 둘 다 성공해야만 최종 commit되어야 함!

 

이런 걸 트랜잭션으로 묶는 것! 💥

 

✅ @Transactional 동작 원리

@Transactional
public void updateUserInfo() {
    userRepository.save(user);
    historyRepository.save(log);
    // 예외 발생 시 → 둘 다 rollback 됨 ❗
}

✅ 메서드 실행 시작 → 트랜잭션 시작됨

✅ 메서드 정상 종료 → commit()

❌ 예외 발생 → rollback() 자동 처리됨!

 

💡 어떤 경우 rollback 되는지?

Spring은 기본적으로 RuntimeException (unchecked 예외) 발생 시 rollback 해줌.

throw new IllegalArgumentException("실패!");

→ 이럴 땐 자동 rollback 됨!

 

만약 IOException 같은 체크 예외를 rollback 하고 싶으면 설정 추가해야 함:
@Transactional(rollbackFor = Exception.class)

 

붙이는 위치예시

클래스 위 전체 메서드에 트랜잭션 적용
메서드 위 특정 메서드만 트랜잭션 적용

 

✅ 언제 사용하면 좋을까?

상황 @Transactional 추천 여부
여러 DB작업이 함께 일어나는 경우 ✅ 필수!
한 메서드 안에 save, update 등 DB 수정 작업이 섞여 있는 경우 ✅ 무조건!
단순 조회만 하는 경우 ❌ 생략 가능