스프링 프레임워크를 사용하면서 @Transactional 이라는 어노테이션을 많이 사용했습니다. 트랜잭션이라는 대략적인 개념만 알고 알아서 잘 동작하겠지 라는 마음으로 사용하다가 DB에 데이터를 넣는 과정에서 동시성 문제가 발생했고 이를 해결하면서 트랜잭션이 데이터베이스에서 어떻게 동작하고 @Transactional 은 어떤 기능을 제공해주는지 학습하게 되...
이 글은 쉬운코드 의 영상을 기반으로 작성된 글 입니다. 글로 이해가 잘 안되시면 위 링크로 들어가셔서 보시길 강추합니다!! 여러 트랜잭션들이 동시에 실행될 때 각 트랜잭션에 속한 operation들의 실행 순서를 schedule이라고 합니다. 여기서 operation은 하나의 쿼리문이라고 생각하면 됩니다. 그림의 두 상황의 트랜잭션이 동시에 실행됐다고...
Cycle이라는 엔티티는 CycleDetail과 일대다 관계를 맺고 있습니다. 여기서 increaseProgress() 를 실행하면 다음과 같이 쿼리문이 발생합니다. 위 처럼 쿼리문이 발생하는데 뭔가 이상하지 않나요? 위 메서드는 service에서 트랜잭션이 시작되고 커밋하면서 영속성 컨텍스트를 flush하게 됩니다. flush하면 영속성 컨텍스트의...
데드락이 걸리는 상황 팀 프로젝트를 하다가 특정 트랜잭션에서 데드락이 걸리는 상황을 마주했습니다. 팀의 비즈니스 로직은 이해하기 어려울 것 같아 간단한 예시를 통해 저희 상황과 해결 과정을 설명하겠습니다. 상황 테이블에는 Team , Member 가 있습니다. Team 과 Member 는 일대다 관계로 맺어져있습니다. 이 때 제가 하고 싶은 비즈니스...