본문 바로가기

isolation2

[Delivery] 여러 명의 Rider가 동시에 동일한 주문 배달을 접수할 때 이슈 Delivery 프로젝트의 배달 주문의 프로세스를 간략히 표현하면 위의 그림과 같습니다. 1. User는 장바구니에 담아 놓은 메뉴로 주문을 요청합니다. 2. Owner는 주문 요청을 승인합니다. 3. Rider는 승인된 주문을 배달 접수를 합니다. 4~5. 다른 Rider가 동일한 주문에 배달을 접수하면 예외를 발생합니다. 언뜻 보기에 문제가 없어 보이지만 그렇지 않았습니다. 여러 명의 Rider가 동시에 동일한 주문에 배달 접수할 때, 모든 Rider가 접수가 되는 문제가 생길 수 있습니다. DB엔 어떤 Rider가 저장될지는 아무도 모릅니다. 마치 멀티스레드 환경에 공유자원을 사용해 문제가 발생하는 이슈와 같습니다. 빨간색 부분은 주문의 상태를 보고 이미 다른 Rider가 배달 접수를 했다면 예외를.. 2022. 1. 7.
Spring의 @Transactional Transaction 이란 여러 쿼리를 논리적으로 하나의 작업 단위로 묶는 것을 의미한다. 예로 계좌 이체가 있다. 적어도 보내는 사람과 받는 사람의 계좌는 업데이트가 되어야 한다. 이 두 번의 DB 작업을 논리적으로 하나의 작업으로 묶는 것이다. Transaction 성질 원자성 : 트랜잭션의 쿼리 결과들이 모두 반영되거나, 모두 반영되지 않아야 한다. 일관성 : 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다. 격리성 : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야 한다. 지속성 : 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다. Spring의 @Transactional Mybatis, hiberbate, jdbcTemplate 디비 접근 기술에 따라 트랜잭션을 적용.. 2021. 12. 15.