- MySQL의 네임드 락은 일반적인 데이터 락(레코드 락, 테이블 락)과는 다른 개념
- 레코드 단위가 아닌, “특정한 문자열(KEY)“에 대해 락을 설정하는 방식
- 즉, MySQL 내부에서 “이름을 가진 임의의 리소스”에 대해 락을 설정하는 방식
- 특정한 작업을 동기화 하거나, 분산 환경에서 동시 실행 방지 가능
- 예를 들면
- 유저당 이벤트는 최대 3번까지만 참여 가능하다라는 조건 존재 가정
- 이 문제는 일반적인 행 락, 테이블 락으로 해결 어려움
- 왜냐하면, 새로운 콘서트 참가 신청(INSERT) 시, “기존 데이터 개수”를 먼저 확인해야하기 때문
- 즉, INSERT 문 자체에 락 못거니까 “참여 가능 여부 확인 과정”전체를 보호해야됨
- user 1이 참여하는 행위 자체를 “user_1_event” 라는 이름으로 락 설정
- 이때, 네임드 락 써서 특정 유저의 “참여 검증 및 삽입 과정”을 동기화 가능!
- 흠; 잘 이해가 안감
- Redis 분산락을 잘씀. 이 방식 부하가 커서
- 분산 환겨에서도 사용 가능
- X,S Lock은 특정 레코드 단위로 잠금 가능, 하지만 네임드 락은 “유저의 주문”, “유저의 입금”처럼 행위에 대해서도 가능해서 용도가 다름
- 장점
- 분산 환경에서도 사용 가능
- 디비 레벨 락 제공
- 특정 리로스 관한 락 관리 용이
- 단점
- 별도 락 테이블/세션 관리 필요
- 락 획득/해제 명식적 관리 필요