개인 공부 (23.07~

@Transactional 무엇인가

Song쏭 2023. 8. 30. 02:04

@Transactional이란?

이 어노테이션은 Spring Framework에서 트랜잭션 관리를 쉽게 도와주는 도구이다.

메서드나 클래스에 적용하면 해당 메서드 또는 클래스에서 실행되는 데이터베이스 작업이 하나의 트랜잭션으로 관리된다.

 

transaction이란?

데이터베이스에서 일련의 작업을 묶어 하나의 단위로 처리하는 것이다.

트랜잭션은 여러 개의 연산을 포함할 수 있는데, 

이 모든 연산이 성공해야 트랜잭션도 성공한 것으로 간주된다.

만약 하나라도 실패한다면 전체 트랜잭션을 취소(롤백)한다.

 

게시판을 예시
1) 게시판 사용자는 게시글을 작성하고, 올리기 버튼을 누른다.
2) 그러면 글 올리기가 처리되고 자동으로 다시 게시판에 돌아오게 된다.
3) 게시판에서 자신의 글이 포함된 업데이트된 게시글들을 볼 수 있다.
여기서 작업의 단위는 insert문과 select문 둘다 를 합친것이다.
이러한 작업단위를 하나의 트랜잭션이라 한다.
관리자나 개발자가 하나의 트랜잭션 설계를 잘하는 것이 데이터를 다루는 것에 많은 이점이 있다.

 

transaction 사용 이유

여러 작업이 하나의 단위로 묶여 실행되므로, 중간에 어떤 작업이 실패하면 이전에 성공한 작업도 취소된다.

이를 통해 데이터의 일관성을 유지할 수 있다. (원자성)

복잡한 트랜잭션 로직을 직접 작성할 필요 없이, 어노테이션 하나로 간편하게 트랜잭션을 관리할 수 있다. (간편성) 

 

어노테이션 사용예시

@Service
public class MyService {

  private final MyRepository myRepository;

  @Transactional  // 이 메서드는 트랜잭션으로 관리된다.
  public void doSomething() {
    myRepository.method1();  // 첫 번째 DB 작업
    myRepository.method2();  // 두 번째 DB 작업

    // 만약 method2()에서 실패하면 method1()의 변경 사항도 롤백된다.
  }
}

이렇게 @Transactional 어노테이션을 사용하면

메서드 내의 모든 데이터베이스 작업이 하나의 트랜잭션으로 묶이게 된다.