동시성

데이터베이스

동시성) 싱글벙글 게시글 좋아요 유니크 제약 조건을 이용하여 동시성 이슈 해결하기

문제 상황 이전에 낙관적 락을 이용하여 동시성 이슈를 해결하려고 했습니다. 저희 서비스는 낙관적 락을 이용하면 데드락(Deadlock)이 발생합니다. 그리고 여러 계정이 동시 요청이 왔을 때 성능 저하가 뚜렷합니다. 해결 방법 Like 엔티티 동시성 이슈 해결 Like 엔티티에 유니크 제약 조건을 걸어 Like 엔티티에 값이 중복되어 들어가는 것을 방지하겠습니다. LikeEntity @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(uniqueConstraints = { @UniqueConstraint( name = "user_board_post_unique", columnNames = { "user_id", "board_post_id"..

데이터베이스

동시성) 싱글벙글 게시글 좋아요 Lock을 이용하여 동시성 이슈, 데드락 해결하기

배경게시글 좋아요 로직에 문제가 발생했습니다. 텀을 두고 좋아요를 눌렀을 때 좋아요, 좋아요 취소에는 전혀 문제가 발생하지 않습니다. 동시에 많은 작업이 있을 때 동시성 문제가 발생합니다.좋아요 개수 문제, LikeEntity 중복값 저장 2가지 문제에 대해 다루겠습니다.제가 처음 작성한 로직은 게시글 좋아요 버튼을 누르면 Like Entity save 메서드가 실행이 되고, Like Entity에 값이 존재하면 delete가 되는 로직입니다. 원인 분석 먼저 하겠습니다.원인 분석MySQL 8.0 (innoDB)이며, 트랜잭션 격리 레벨은 디폴트값인 Repeatable Read입니다.게시글A를 찾는 SELECT 과정은 Lock을 얻는 과정이 발생하지 않기 때문에 두 트랜잭션 모두 같은 게시글A에 접근합니..

초보병일이
'동시성' 태그의 글 목록