Spring/JPA

· Spring/JPA
오늘 인프런의 재고시스템으로 알아보는 동시성이슈 해결방법이란 강의 중 synchronized를 사용하여 동시성이슈를 해결하는데에서 궁금한 점이 발생했다. 참고로 이 강의에선 springboot, jpa와 함께 mysql을 연결하여 사용한다. // StockService 내 decrease 메서드, 여기서 동시성 이슈 발생 @Transactional public synchronized void decrease(Long id, Long quantity) { Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stockRepository.saveAndFlush(stock); } @Test public void 동..
· Spring/JPA
@Transactional 어노테이션을 붙이면 프록시 패턴을 사용하는 스프링 AOP를 사용하고 DB connection pool에서 connection을 하나 가져오고 setAutoCommit 값을 false로 초기화하고 트랜잭션 종료 시에 다음 2가지로 동작한다. 정상 작동 시 commit(동시에 flush) 에러 발생 시 rollback 트랜잭션이 종료될 때 다시 setAutoCommit 값을 True로 초기화해 준다. 위 DataSourceTransactionManager Class에서 볼 수 있듯이 JDBC커넥션을 DataSource로부터 현재 쓰레드에 바인딩하고, 이는 잠재적으로 DataSource당 하나의 쓰레드를 바인딩한다는 것으로 하나의 트랜잭션은 단일 쓰레드에서 동작한다.
dawn9
'Spring/JPA' 카테고리의 글 목록