본문 바로가기

트랜잭션3

[Spring] Transaction 추상화, 동기화 스프링은 트랜잭션을 시작(가져오기)하고, 커밋하고, 롤백하는 기능을 추상화하였습니다. 추상화 덕분에 우리는 스프링 트랜잭션을 쉽게 관리할 수 있는데요. 오늘은 스프링 트랜잭션 추상화에 대해 간단히 알아보겠습니다. public interface PlatformTransactionManager extends TransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) thr.. 2022. 4. 27.
[Spring] Spring Boot에서 트랜잭션 사용하기 일반적으로 하나의 비즈니스는 한 트랜잭션 내부에서 다룹니다. 비즈니스로직이 실행되는 도중 어떠한 이유로 메서드 실행이 중단된다면 지금껏 처리한 모든 쿼리가 롤백되어야 합니다. 체스 미션을 예시로 간단히 설명해보겠습니다. a2 포지션의 폰을 a4 포지션으로 옮기려면 a2 포지션은 blank로 a4 포지션은 폰으로 변경해야 합니다. 만약 위 비즈니스 로직이 다른 트랜잭션에서 작동하다 a2 포지션을 blank로 바꾼 후 에러가 발생하면 어떻게 될까요? 그렇다면 a2, a4 모두 blank를 갖게되고 폰은 어디론가 증발하게 될 것입니다. 이러한 문제를 해결하기 위해 주로 비즈니스 로직이 존재하는 Service 레이어에서 트랜잭션을 관리하게 됩니다. 트랜잭션을 완벽하게 이해하기 위해서는 dataSource가 co.. 2022. 4. 20.
[레벨 1 돌아보기] dao 테스트 중 lock wait? 레벨 1에서의 학습목표와는 조금 동떨어진 이야기지만.. Dao를 테스트 하는 과정에서 어떤 에러를 만났습니다. com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction 에러를 확인해보니 락을 획득하기 위한 시간이 초과되어 트랜잭션을 다시 시작하라 라고 말합니다. 어떤 상황이기에 이 에러가 발생했고, 이 문제를 어떻게 해결하는지 적어보고자 합니다. 락 발생 db의 커밋 모드 설정을 수동 커밋 모드로 전환하면 특정 쿼리가 실행되는 순간 해당 세션에서 트랜잭션이 열립니다. 이를 트랜잭션 a라고 칭하겠습니다. 트랜잭션 a는 다른 트랜잭션으로 부터 격리하고 트.. 2022. 4. 15.