#데드락

질문 1
해시태그 없이 키워드만 일치하는 질문은 개수에 포함되지 않아요.

9달 전 · 익명 님의 질문

동시성+데드락 제어를 위한 비관적 락 잠금 질문

안녕하세요 글쓰기 커뮤니티 프로젝트를 개발하는 중입니다 회원이 소설을 찜하는 기능(좋아요)을 구현 중에 있는데요 찜 객체는 아래 첨부한 코드와 같이 memberId와 novelId를 외래키로 갖습니다 동시성 이슈를 다뤄보고자 500명의 사용자가 동시에 novelId가 1인 소설을 찜하는 요청을 보낸다는 가정 하에 jmeter로 테스트를 돌려보니 동시성 이슈가 아니라 데드락 문제가 발생해서요 favoriteJDBCRepository.save(memberId, novelId); 시 novelId가 외래키라 외래키 정합성 검사 때문에 db 내부적으로 novelId가 1인 레코드에 read lock이 걸리는 것 같습니다 favorite 객체 save 시 트랜잭션 A가 novelId가 1인 레코드에 대해 read lock을 얻고, novelId가 3인 novel의 favoriteCount(찜 개수)를 +1하고자 write lock 요청 -> favorite 객체 save 시 다른 트랜잭션 B도 novelId가 1인 레코드에 대해 readlock을 얻고, novelId가 1인 novel의 favoriteCount(찜 개수)를 +1하고자 write lock 요청 -> write lock은 read lock이 전부 해제되어야 얻을 수 있음. 트랜잭션 A는 B가 read lock을 release하기를 대기하고 B도 A가 read lock을 release하기를 대기하면서 데드락 발생 일단 novelId로 novel을 비관적 락을 사용해 조회해서 favorite 객체를 생성한 뒤에 저장하는 방식으로 데드락+동시성 이슈 둘 다 해결이 되는데요(chooseFavoriteV2) 이 방법 말고도 더 좋은 대안은 없을까요??

개발자

#비관적락

#데드락

#동시성

#데이터베이스

#백엔드

답변 0

댓글 0

추천해요 1

조회 50

2년 전 · 우지철 님의 새로운 답변

파이썬의 GIL은 왜 있는건가요?

면접을 봤는데 대답을 제대로 못했던 질문이 생각이 나서 글 올려봅니다. Python에는 Global Interpreter Lock (GIL)이라는게 있는데, 이게 있는 이유가 뭔가요? 사실 면접때는 이 개념을 잘 몰라서 데드락을 방지하기 위함이다? 같은 애매모호한 답변을 했던 것 같습니다. 정확히는 CPython에 GIL은 왜 있는 것인지 궁금합니다. 미리 답변 감사드립니다!!

개발자

#python

#gil

답변 2

댓글 0

조회 240

3년 전 · 익명 님의 새로운 댓글

DB 저장 시 중복 체크 어떻게 하시나요?

Spring에 mssql을 사용한 사이트를 운영중인데 고객이 회원가입 할 때 가끔씩 요청이 중복되어 들어와서 중복 저장 되는 경우가 생깁니다. Insert 쿼리 전에 select 쿼리로 조회해서 동일한 아이디가 있으면 가입을 막는 코드는 넣어 두었는데 거의 동시에 요청이 들어오면 select 쿼리에서 걸러지지 않았습니다. DB의 회원 테이블 아이디 컬럼에 유니크 제약 조건을 걸어볼까 했는데 탈퇴한 회원의 경우 로우를 남겨놓고 탈퇴 여부 컬럼만 변경하는 구조라서 아이디 값이 유일하지는 않아 제약조건도 걸지 못하고 있습니다. select 쿼리와 insert 쿼리를 트랜젝션으로 묶어볼까 했는데 insert시에 키 생성(identity)하는 부분 때문인지 테이블 락이 걸려서 데드락이 발생하는 것 같아 묶지 못하였습니다. 보통 이런 식으로 DB에 특정 조건에서 중복을 막아야 하는 경우는 어떻게 처리하시나요?

개발자

#백엔드

답변 2

댓글 3

추천해요 3

조회 896