12월 12일 -트랜잭션 경계 설정

Yullgiii·2023년 12월 12일
0
post-thumbnail

트랜잭션 경계 설정

트랜잭션은 데이터베이스 작업의 단위로, 하나의 트랜잭션 내에서 발생하는 모든 변경은 원자성을 가지며, 이는 모든 변경이 완전히 적용되거나 아무 것도 적용되지 않아야 함을 의미한다. 이렇게 트랜잭션을 통해 데이터의 무결성을 보장할 수 있다.

트랜잭션 경계 설정은 트랜잭션의 시작과 끝을 명확하게 정의하는 것이다. 이는 트랜잭션의 원자성을 보장하는 데 중요하다. 예를 들어, 하나의 비즈니스 작업을 수행하는 데 필요한 여러 데이터베이스 변경 작업들이 각각 다른 트랜잭션으로 처리되면, 일부 변경만 적용되는 상황이 발생할 수 있다. 이는 데이터의 무결성을 위반하게 된다.

예를 들어, 아래와 같은 트랜잭션이 있다고 가정해보자.

@Transactional
public void process() {
    step1();
    step2();
}

public void step1() {
    // Do something
}

public void step2() {
    // Do something
}

위와 같은 경우, process() 메소드 전체가 하나의 트랜잭션으로 처리된다. 즉, step1()과 step2() 메소드에서 발생하는 모든 데이터베이스 변경 작업은 하나의 트랜잭션 내에서 이루어진다. 이 경우, step1()과 step2() 메소드의 작업이 모두 성공적으로 완료되어야만 데이터베이스에 변경이 반영된다.

하지만, step1()과 step2()가 각각 다른 트랜잭션으로 처리되어야 하는 경우, @Transactional 애노테이션을 각각의 메소드에 적용해야 한다.

public void process() {
    step1();
    step2();
}

@Transactional
public void step1() {
    // Do something
}

@Transactional
public void step2() {
    // Do something
}

위의 코드는 step1()과 step2() 메소드 각각을 별도의 트랜잭션으로 처리한다. 이 경우, 각 메소드에서 발생하는 데이터베이스 변경 작업은 각자의 트랜잭션 내에서 이루어진다. 따라서, step1()의 작업이 실패하더라도 step2()의 작업은 계속 진행될 수 있다.

이처럼 트랜잭션의 경계를 명확하게 설정하는 것은 데이터의 무결성을 보장하는 데 중요하다. 따라서, 트랜잭션을 사용할 때는 항상 트랜잭션의 경계를 명확하게 설정해야 한다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글