@Transactional 3

스프링 트랜잭션 전파

스프링에서 트랜잭션을 사용중일때 추가로 트랜잭션을 수행하는 경우 어떻게 동작할지를 결정하는 것을 트랜잭션 전파(Propagation)이라고 한다. 트랜잭션  전파에 대한 개념을 알기 전에 외부 트랜잭션과 내부 트랜잭션에 대한 개념을 알아야 한다.  외부 트랜잭션이 수행중이고 아직 끝나지 않았는데 트랜잭션이 추가로 수행되면 이 트랜잭션을 내부 트랜잭션이라고 한다.내부 트랜잭션은 외부에 트랜잭션이 수행되고 있는 도중에 호출되기 때문에 마치 내부에 있는 것 처럼 보여 내부 트랜잭션이라 한다. 스프링에서는 외부 트랜잭션과 내부 트랜잭션을 아래 그림과 같이 하나의 트랜잭션으로 묶어서 만들어준다.   이러한 개념을 바탕으로 스프링은 논리 트랜잭션과 물리 트랜잭션이라는 개념을 사용한다.  이러한 개념을 도입했을때 지..

BackEnd/Database 2025.02.14

Spring 트랜잭션[@Transactional]

스프링에서 트랜잭션을 관리할 때 @Transactional이 거의 필수적으로 사용된다. 따라서 @Transactional에 대해 정확히 알고 사용하는 것이 매우 중요하다! @Transaction은 사용하면 핵심 비즈니스 로직과 공통기능 (로깅, 트랜잭션, 보안 등)을 분리하여 코드 재사용성과 유지보수성을 높이는 AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)를 활용하여 트랜잭션을 자동으로 관리해주는 선언적 트랜잭션 관리 방법이다. @Servicepublic class OrderService { private final EntityManager entityManager; public OrderService(EntityManager entityManager) {..

BackEnd/Database 2025.02.12

DB Test[@Transactional, 임베디드 모드 DB]

테스트에서의 @Transactional 테스트를 할때 테스트 후 데이터가 다시 삭제 되어야 할때가 있다. 이럴때 사용할 수 있는게 @Transactional 이다. 원래 @Transactional은 로직이 정상 수행되면 커밋되어 데이터베이스에 변경사항을 저장하지만, 테스트에서 사용될 경우 모든 로직이 트랜잭션 안에서 수행되고 테스트가 끝나면 롤백을 수행하여 테스트에서 생성되거나 변경된 데이터를 롤백시킨다.  package hello.itemservice.domain;import java.util.List;import static org.assertj.core.api.Assertions.assertThat;@Transactional@SpringBootTestclass ItemRepositoryTest { ..

BackEnd/Database 2025.02.07