인프런 커뮤니티 질문&답변

kevin님의 프로필 이미지
kevin

작성한 질문수

재고시스템으로 알아보는 동시성이슈 해결방법

Mysql 과 Redis 비교하기

낙관적 락, 비관적 락 말고 항상 분산락을 쓰는게 좋을까요?

작성

·

2.5K

1

공부하다가 의문이 생겼는데요,

낙관적 락

- 충돌 잦으면 락 획득 재시도 로직 때문에 성능 안좋음

비관적 락

- 충돌 잦으면 낙관적 락보다 성능좋음.

분산 락

- 스케일 아웃된 DB 환경에서도 사용 가능

- Redis 라이브러리마다 다른데

Lettuce는 스핀락으로 구현되서 재시도 많으면 불리

Redisson은 pub-sub 기반이라 재시도 많으면 유리

정확하진 않지만 이렇게 알고있습니다.

질문은

1. 잘못 알고 있나요?

2. 제가 공부한게 맞다면, 무조건 비관적 락, 낙관적 락 말고 분산락 + Redis(Lettuce/Redisson) 쓰는게 좋은건가요?

 

답변 1

4

최상용님의 프로필 이미지
최상용
지식공유자

kevin 님 안녕하세요. 답변이 늦어서 죄송합니다.

  1. 분산락은 스케일 아웃된 DB 환경에서 사용하는것이 아닌 여러대의 applictaion (서버) 가 있을 때 사용하는 것이라고 생각하시면 편할 것 같습니다. 그 이외에는 알고계신 것이 맞습니다.
    jeoningu 님 도움으로 2023.05.29 답변 정정합니다.
    분산락은 스케일 아웃된 DB 환경 또는 여러대의 applictaion (서버) 가 있을 때 사용하는 것이라고 생각하시면 편할 것 같습니다.

  2. 무조건 redis 가 좋다고 말씀을 드릴수는 없을 것 같습니다. 예를들어 충돌이 1년에 1~2건 일어날정도로 작다면 redis 를 도입하기보다는 낙관적락을 사용하는것이 효율 적일 수 있습니다.
    또한 이미 redis 를 사용중인 환경이라면 문제없겠지만 redis 를 사용중이지 않을경우 redis 에 대한 운영비용이 추가로 들게됩니다.
    무조건 redis 가 낫다고 볼 수 없으며 상황마다, 환경마다 다르다고 말씀 드릴 수 있을 것 같습니다.

 

분산된 디비에는 낙관적 락 비관적 락으로는 해결할 수 없으니 분산 락으로 동시성 제어 해야되는거 아닌가요?

분산 서버에서는 디비만 하나면 낙관적 락 비관적 락으로 동시성 제어 가능하니 분산 락 안 써도 되고요.

최상용님의 프로필 이미지
최상용
지식공유자

jeoningu 님 답변 감사드립니다.
말씀하신대로 분산된 디비에서는 분산락을 통해 제어해야 합니다.
강의 내용을 토대로 답변을 드리다보니 스케일 아웃DB 보다는 Application Server 를 중점으로 생각했던 것 같습니다.

답변을 정정해주셔서 감사합니다!

kevin님의 프로필 이미지
kevin

작성한 질문수

질문하기