집돌이 공대남 IT

JPA 프로그래밍 마스터하기: 중급부터 전문가까지 실습을 통한 학습(8) 본문

IT/웹개발

JPA 프로그래밍 마스터하기: 중급부터 전문가까지 실습을 통한 학습(8)

집공이 2023. 9. 5. 12:00

 

JPA 트랜잭션 관리: 더 깊이 알아보기

안녕하세요, 공대남입니다.

이번 포스트에서는 JPA에서의 트랜잭션 관리에 대해 더 깊이 들어가겠습니다.

트랜잭션을 제대로 이해하고 활용하는 것은 데이터 일관성과 성능에 큰 영향을 미칩니다.

 

트랜잭션의 개념 재정립

먼저 트랜잭션이 무엇인지 간단히 복습해봅시다. 트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행되는 작업 단위입니다. 이 작업 단위 내에서의 모든 동작은 원자적(Atomic)입니다, 즉, 작업이 중간에 실패하면 처음부터 롤백이 됩니다.

@Transactional 어노테이션 속성

@Transactional 어노테이션은 다양한 속성을 제공합니다:

  • propagation: 트랜잭션 전파 방식을 설정합니다. 예를 들어, Propagation.REQUIRES_NEW은 새로운 트랜잭션을 시작합니다.
  • isolation: 트랜잭션 격리 수준을 설정합니다. 이는 동시에 여러 트랜잭션이 실행될 때 어떻게 격리될 것인지 결정합니다.
  • timeout: 트랜잭션이 실행되는 최대 시간을 설정합니다.
@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, timeout = 100)
    public void addUser(User user) {
        userRepository.save(user);
    }
}

예외와 트랜잭션 롤백

@Transactional 어노테이션은 rollbackFornoRollbackFor 속성을 통해 예외가 발생했을 때 트랜잭션이 어떻게 처리될지 정의할 수 있습니다.

@Transactional(rollbackFor = {CustomException1.class, CustomException2.class})
public void addBookWithCustomExceptions(Book book) {
    try {
        bookRepository.save(book);
        // Do something that might throw an exception
    } catch (CustomException1 | CustomException2 e) {
        // Handle the exception
    }
}

이 예제에서는 CustomException1 또는 CustomException2가 발생하면 트랜잭션이 롤백되도록 설정되어 있습니다.

트랜잭션 로그 확인

트랜잭션의 로그를 확인하는 것은 디버깅에 아주 유용합니다. Spring Boot에서는 다음과 같이 속성을 설정하여 SQL 로그를 출력할 수 있습니다.

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

이상으로 JPA의 트랜잭션 관리에 대해 더 깊이 알아보았습니다. 다음 포스트에서는 쿼리 최적화와 캐싱에 대해 알아보도록 하겠습니다.

 

이로써 더 깊은 이해를 위한 실습과 설명을 마치게 되었습니다. 다음 포스트를 기대해주세요!