Moait
홈인기 피드모든 블로그모든 태그
홈인기 피드모든 블로그모든 태그
데드락을 해결하려다, 락을 줄이게 된 이야기 섬네일

데드락을 해결하려다, 락을 줄이게 된 이야기

여기어때 favicon여기어때·Backend·
MySQLApache KafkaDeadlockInnoDBPessimistic Lock
2026년 08월 20일0

AI 요약

이 글은 AI가 요약했어요. 정확한 내용은 꼭 원문을 확인해 주세요!

핵심 요약

여기어때가 유저 혜택 이벤트 처리의 데드락 문제를 DB 트랜잭션 설계와 락 관리로 크게 완화한 사례를 공유한다.

주요 경험

  • 초기 FOR UPDATE로 직렬 처리하려다 데드락이 발생했다(중복은 ON DUPLICATE KEY UPDATE로 처리).
  • INSERT IGNORE로 중복 무시했지만 S-Lock과 FOR UPDATE 충돌로 ABBA 패턴 데드락이 생겼다.
  • 카운터 제거와 상태 변경 최소화로 구조를 바꾸고, 생성은 INSERT IGNORE, 상태 변경은 재소비 안전하게 분리했다. 락 순서는 rookie_reward → rookie_reward_step으로 통일했다.

얻은 인사이트

  • 데드락의 주된 원인은 락 추가가 아니라 필요성/순서의 재설계에서 나온다.
  • idempotent 설계로 재소비 안전성을 확보하는 것이 중요하다.

연관 피드

%가 높을수록 이 글과 비슷할 가능성이 높아요!
락(Lock)을 걸었는데 왜 오버부킹이 날까? — JPA 1차 캐시의 함정 탈출기 섬네일
68%

락(Lock)을 걸었는데 왜 오버부킹이 날까? — JPA 1차 캐시의 함정 탈출기

반려생활 favicon반려생활·2026년 04월 30일
전체 데이터를 브라우저에 두는 광고 대시보드 만들기 섬네일
66%

전체 데이터를 브라우저에 두는 광고 대시보드 만들기

토스 favicon토스·2026년 08월 20일
No Image
65%

스마트스토어센터 Oracle에서 MySQL로의 무중단 전환기

NAVER D2 faviconNAVER D2·2026년 01월 21일