작성
·
2.5K
1
공부하다가 의문이 생겼는데요,
낙관적 락
- 충돌 잦으면 락 획득 재시도 로직 때문에 성능 안좋음
비관적 락
- 충돌 잦으면 낙관적 락보다 성능좋음.
분산 락
- 스케일 아웃된 DB 환경에서도 사용 가능
- Redis 라이브러리마다 다른데
Lettuce는 스핀락으로 구현되서 재시도 많으면 불리
Redisson은 pub-sub 기반이라 재시도 많으면 유리
정확하진 않지만 이렇게 알고있습니다.
질문은
1. 잘못 알고 있나요?
2. 제가 공부한게 맞다면, 무조건 비관적 락, 낙관적 락 말고 분산락 + Redis(Lettuce/Redisson) 쓰는게 좋은건가요?
답변 1
4
kevin 님 안녕하세요. 답변이 늦어서 죄송합니다.
분산락은 스케일 아웃된 DB 환경에서 사용하는것이 아닌 여러대의 applictaion (서버) 가 있을 때 사용하는 것이라고 생각하시면 편할 것 같습니다. 그 이외에는 알고계신 것이 맞습니다. jeoningu 님 도움으로 2023.05.29 답변 정정합니다.
분산락은 스케일 아웃된 DB 환경 또는 여러대의 applictaion (서버) 가 있을 때 사용하는 것이라고 생각하시면 편할 것 같습니다.
무조건 redis 가 좋다고 말씀을 드릴수는 없을 것 같습니다. 예를들어 충돌이 1년에 1~2건 일어날정도로 작다면 redis 를 도입하기보다는 낙관적락을 사용하는것이 효율 적일 수 있습니다.
또한 이미 redis 를 사용중인 환경이라면 문제없겠지만 redis 를 사용중이지 않을경우 redis 에 대한 운영비용이 추가로 들게됩니다.
무조건 redis 가 낫다고 볼 수 없으며 상황마다, 환경마다 다르다고 말씀 드릴 수 있을 것 같습니다.
jeoningu 님 답변 감사드립니다.
말씀하신대로 분산된 디비에서는 분산락을 통해 제어해야 합니다.
강의 내용을 토대로 답변을 드리다보니 스케일 아웃DB 보다는 Application Server 를 중점으로 생각했던 것 같습니다.
답변을 정정해주셔서 감사합니다!
분산된 디비에는 낙관적 락 비관적 락으로는 해결할 수 없으니 분산 락으로 동시성 제어 해야되는거 아닌가요?
분산 서버에서는 디비만 하나면 낙관적 락 비관적 락으로 동시성 제어 가능하니 분산 락 안 써도 되고요.