Back-end/TroubldShooting

Spring Data JPA 사용 중 unique 제약조건이 있는 데이터를 삭제한 뒤 추가하는 경우 duplicate entry 에러가 발생했다. 🫠 나는 데이터를 삭제했는데 왜 에러가 나지?1. 영속성 컨텍스트의 쓰기 지연 성질로 @Transactional 내부의 쿼리문들은 마지막에 한 번에 실행2. Hibernate의 쿼리 실행 인터페이스(AbstractFlushingEventListener)의 구현 메서드(performExecutions)는 동작하는 SQL 순서가 정해져 있다. 따라서 delete 코드를 먼저 작성했더라도 insert 쿼리를 먼저 실행한 후에 delete를 실행한다. 엔티티 매니저는 트랜잭션을 커밋하기 직전까지 DB에 쿼리를 날리지 않고 내부 쿼리 저장소에 모아둔 후 트랜잭션을 ..
이전에 썼던 상품 좋아요 생성 API를 구현하면서 "상품 좋아요 수"의 동시성 문제에 대해 고민하게 되었다. 👍 상품 좋아요 수회원이 상품 좋아요를 생성하면 해당 상품은 좋아요 개수가 1 증가한다.트래픽이 많아지고 동시에 요청하게 될 경우 동시성 문제가 발생할 것이다. 🧐 DB 락을 사용해 볼까?🔓 Optimistic Lock(낙관적 락)대부분의 트랜잭션이 충돌이 발생하지 않을 것이라고 낙관적으로 가정하는 방법이다. 따라서 데이터베이스가 제공하는 락 기능을 사용하지 않고, 엔티티의 버전을 통해 동시성을 제어한다. 즉, DB Transaction을 이용하는 것이 아닌 애플리케이션 레벨에서 지원하는 락이다.낙관적락은 version 등의 구분 컬럼을 이용해서 충돌을 예방한다. (version 뿐 아니라..
서채리
'Back-end/TroubldShooting' 카테고리의 글 목록 (2 Page)