T_era

@Transactional에 대하여 본문

Programing/Spring

@Transactional에 대하여

블스뜸 2025. 5. 13. 17:48

@Transactional 어노테이션 정리

주요 목적:

  • 하나의 논리적인 작업 단위 (Unit of Work) 정의
  • 해당 작업 단위 내의 여러 데이터 접근 작업을 원자적으로 (Atomically) 관리
  • 성공 시 커밋 (Commit): 모든 작업 성공 시 데이터베이스에 변경 사항 반영
  • 실패 시 롤백 (Rollback): 하나라도 실패 시 모든 변경 사항 이전 상태로 복구 (데이터 일관성 유지)

예시:

  • @Transactional 적용 메서드 내 2개 이상 DB 연산 시, 전체 성공 시 커밋, 하나라도 실패 시 전체 롤백

적용 위치:

  • Service 계층 (일반적): 여러 데이터 접근 로직을 묶어 트랜잭션 관리 (예: 스케줄 생성 시 스케줄 저장 + 사용자 정보 업데이트)

핵심 원리:

  • 원자성 (Atomicity): DB 연산을 불가분한 하나의 작업 단위로 취급
  • 성공 아니면 실패 (All or Nothing): 모든 DB 변경 성공 시 커밋, 중간 실패 시 전체 롤백

단일 SQL 작업 시 사용 여부:

  • 일반적으로 불필요: DB는 단일 SQL 쿼리에 대해 기본적인 원자성 보장

단일 SQL 작업 시 고려 사항 (사용할 수 있는 경우):

  • 예외 처리 일관성: Spring의 데이터 접근 예외 변환 활용
  • AOP 기반 공통 로직 적용: 로깅, 성능 측정 등
  • 격리 수준 제어: 기본 격리 수준 외 다른 수준 설정 (@Transactional(isolation = Isolation.SERIALIZABLE))
  • 읽기 전용 힌트: 조회 작업 성능 최적화 (@Transactional(readOnly = true))