트랜잭션

    Transaction_3(트랜잭션 전파)

    기존의 트랜잭션이 진행 중이고, 추가로 또 다른 트랜잭션이 시작된다고 가정해보자. 이 때 추가되는 트랜잭션은 기존 트랜잭션에 합류하여 진행되어야할까? 아니면 별도의 트랜잭션으로 진행되어야할까? 이런 상황에서 트랜잭션의 동작을 결정하는 것을 트랜잭션 전파(propagation)라고 한다. 트랜잭션 전파의 옵션으로는 REQUIERD, REQUIRES_NEW가 주로 사용된다. REQUIRED가 기본 값이기 때문에 우선 REQUIRED에 기반하여 설명한 후, REQUIRES_NEW에 대한 설명을 이어가겠다. 트랜잭션 전파 기본 개념 트랜잭션 전파를 설명하기 위해 사용되는 용어들을 먼저 정의하려고 한다. 외부 트랜잭션과 내부 트랜잭션 외부 트랜잭션 외부 트랜잭션은 처음에 시작된 트랜잭션을 의미한다. 다음에 시작되..

    Transaction_2(트랜잭션 추상화 및 동기화, 트랜잭션 AOP, 예외와 커밋 또는 롤백)

    이전글 2023.02.22 - [스프링/DB] - JDBC, ConnectionPool, DataSource 2023.02.25 - [스프링/DB] - Transaction_1 트랜잭션 추상화, 동기화 Transaction_1에서 구현한 코드를 살펴보자. 현재 서비스 계층은 트랜잭션을 사용하기 위해 JDBC 기술에 의존하고 있다. JDBC, JPA 등 데이터 접근 기술에 따라 트랜잭션을 사용하는 방법이 다른데, 만약 JDBC에서 JPA로 기술을 변경하게 되면 어떻게 될까? 우리는 서비스 계층에서 트랜잭션과 관련된 코드를 모두 변경해야할 것이다. 이러한 문제를 해결하기 위해서는 트랜잭션 추상화, 트랜잭션 동기화를 하면 된다. 트랜잭션 추상화 트랜잭션 추상화는 트랜잭션 매니저의 기능을 인터페이스로 정의하고,..

    Transaction_1

    관련 게시글 2023.02.22 - [스프링/DB] - JDBC, ConnectionPool, DataSource Transaction 어플리케이션에서 데이터를 단순 파일이 아닌 데이터베이스에 저장하는 이유는 데이터베이스가 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션은 데이터베이스 조작이 포함된 하나의 로직 단위를 의미한다. 그리고 데이터베이스는 하나의 트랜잭션 내에서 데이터 조작의 안전성을 보장한다. 예를들어 계좌이체라는 로직이 있다고 가정하자. 해당 로직에서는 A의 잔고 감소, B의 잔고 증가라는 동작이 포함되어있다. 해당 로직이 안전하게 처리되기 위해서는 A의 잔고가 감소하는 데이터 변경이 정상 처리되어야 하며, B의 잔고가 증가하는 데이터 변경 또한 정상 처리되어야한다. 만약 A의 잔고가 감..