본문 바로가기
Back-End/Spring Boot

트랜잭션 전파

by 코젼 2024. 7. 26.
728x90
반응형

목차

    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by FernFlower decompiler)
    //
    
    package org.springframework.transaction.annotation;
    
    public enum Propagation {
        REQUIRED(0),
        SUPPORTS(1),
        MANDATORY(2),
        REQUIRES_NEW(3),
        NOT_SUPPORTED(4),
        NEVER(5),
        NESTED(6);
    
        private final int value;
    
        private Propagation(int value) {
            this.value = value;
        }
    
        public int value() {
            return this.value;
        }
    }
    

     

    REQUIRED (기본값)

     

    설명: 현재 트랜잭션이 있으면 해당 트랜잭션을 사용하고, 현재 트랜잭션이 없으면 새로운 트랜잭션을 생성합니다.

    예시: @Transactional(propagation = Propagation.REQUIRED)

    용도: 대부분의 경우 기본 전파 방식으로 사용됩니다. 메서드가 트랜잭션이 없으면 새로 시작하고, 있으면 그 트랜잭션을 사용합니다.

     

    SUPPORTS

     

     설명: 현재 트랜잭션이 있으면 그 트랜잭션을 사용하고, 현재 트랜잭션이 없으면 트랜잭션 없이 실행합니다.

     예시: @Transactional(propagation = Propagation.SUPPORTS)

     용도: 메서드가 현재 트랜잭션에 참여할 수도 있고 참여하지 않을 수도 있을 때 사용합니다. 트랜잭션이 있으면 사용하고, 없으면 비트랜잭션으로 동작합니다.

     

    MANDATORY

     

     설명: 현재 트랜잭션이 없으면 예외를 발생시킵니다. 이미 트랜잭션이 있을 경우 그 트랜잭션을 사용합니다.

     예시: @Transactional(propagation = Propagation.MANDATORY)

     용도: 메서드가 반드시 기존 트랜잭션 내에서 실행되어야 할 때 사용합니다. 트랜잭션이 없으면 예외가 발생합니다.

     

     

    REQUIRES_NEW

     

    설명: 항상 새로운 트랜잭션을 시작하고, 기존 트랜잭션이 있을 경우에는 그 트랜잭션을 일시 중지합니다.

    예시: @Transactional(propagation = Propagation.REQUIRES_NEW)

    용도: 메서드가 실행될 때마다 새로운 트랜잭션을 생성해야 할 때 사용합니다. 기존 트랜잭션이 롤백되더라도 새로운 트랜잭션은 독립적으로 커밋됩니다.

     

    NOT_SUPPORTED

     

     설명: 항상 트랜잭션 없이 실행합니다. 현재 트랜잭션이 있으면 일시 중지합니다.

     예시: @Transactional(propagation = Propagation.NOT_SUPPORTED)

     용도: 트랜잭션을 시작하지 않고 메서드를 실행할 때 사용합니다. 트랜잭션을 일시 중지하고 메서드가 완료되면 트랜잭션이 재개됩니다.

     

    NEVER

     

     설명: 항상 트랜잭션 없이 실행합니다. 현재 트랜잭션이 있으면 예외를 발생시킵니다.

     예시: @Transactional(propagation = Propagation.NEVER)

     용도: 메서드가 트랜잭션 없이 실행되어야 하며, 현재 트랜잭션이 있으면 예외를 발생시키고 싶을 때 사용합니다.

     

    NESTED

     

    설명: 현재 트랜잭션이 있으면 중첩 트랜잭션을 시작합니다. 이 중첩 트랜잭션은 부모 트랜잭션이 커밋될 때 커밋되거나 롤백될 수 있습니다.

    예시: @Transactional(propagation = Propagation.NESTED)

    용도: 부모 트랜잭션이 롤백될 경우 중첩 트랜잭션만 롤백되도록 하고 싶을 때 사용합니다. 예를 들어, 메서드 내에서 서브 트랜잭션을 필요로 할 때 유용합니다.

     

     

     

     

     

    728x90
    반응형

    댓글