@Transactional

YOOYEON.DEV·2024년 5월 16일
0

비즈니스 로직마다 트랜잭션 관련 코드를 작성하게 되면 중복 코드 발생, 책임과 원리 분리 못함, 가독성 떨어짐 등의 문제가 있다.

@Transactional은 스프링에서 제공하는 어노테이션으로, AOP 형태로 트랜잭션을 처리할 수 있도록 돕는다.

트랜잭션이 적용되려면 항상 프록시를 거쳐서 호출이 되어야한다. 프록시를 활용하면 실행하려는 비즈니스 로직 전, 후로 추가로 로직을 넣을 수 있다.

@Transactional
    public CreateRecipeResponseDto create(CreateRecipeRequestDto dto) {
    logic();
    }

create(CreateRecipeRequestDto dto) 메서드를 처리하는 동안 예외가 발생하지 않으면 커밋되고, 발생하면 롤백이 된다.

하지만 주의할 점이 있다.


    public CreateRecipeResponseDto create(CreateRecipeRequestDto dto) {
    	logic();
    }
    
    @Transactional
    public void logic(){
      // 비즈니스 로직 처리
      // 수정, 삭제 등
    }

@Transactional이 걸리지 않은 메서드의 내부에서 @Transactional 걸린 메서드를 호출하면 프록시를 통해 호출되지 않는다.

profile
백엔드 개발자 입니다

0개의 댓글