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

mirr님의 프로필 이미지
mirr

작성한 질문수

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

redis lock과 mysql lock 성능 질문입니다.

작성

·

924

0

강의를 보면 redis의 redisson과 mysql db lock 중 redisson을 이용한 방식이 더 성능이 좋다고 설명 해주셨는데요.

강의의 테스트 코드 수행시간을 보면 mysql의 비관락이 약 2초, redisson을 이용한 방식이 약 5초 정도 걸리는 것을 보아 비관락의 성능이 더 빠른 것처럼 보이는데..

이럼에도 불구하고 redisson의 성능이 더 좋다고 하시는 이유가 궁금합니다.

답변 1

0

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

mirr 님 안녕하세요.

우선 intellij 를 통한 테스트코드의 수행시간은 컴퓨터환경같이 외부환경에 따라 달라질 수 있기때문에 테스트코드의 수행시간으로 비교하면 안될것 같습니다.

redisson 과 mysql 의 db lock 을 비교하기보다는 redis 와 mysql 을 비교하는 것이 조금 더 나을 것 같습니다.

redis 의 경우 inmemory database 이기때문에 굉장히 빠르게 동작하기때문에 mysql 보다 성능이 좋다고 말씀을 드렸습니다.
또한 mysql 의 비관적락을 사용하게 된다면 독점 사용을 위해 레코드에 lock 을 걸게되고 이는 비용이 비싼 작업입니다.
예제와 같이 로직이 간단할 때는 괜찮을 수 있겠으나, 여러 테이블의 데이터를 접근할 때 데드락이 발생할 수 있는 위험도 가지게 됩니다.

하지만, 모든 상황에서 redis 가 성능이 좋을수는 없습니다.
예를들어 충돌이 빈번하지 않은 (예를들어 1년에 1번) 경우에는 lock 을 사용하는것이 낭비일 수 있습니다.
이런 경우에는 낙관적락을 사용하는것이 조금 더 성능이 좋을 수 있습니다.

감사합니다.

mirr님의 프로필 이미지
mirr
질문자

답변 감사합니다.

컴퓨터환경에 따라 수행시간이 변동될 수 있으나, 같은 컴퓨터 환경에서 테스트 코드를 수행했기때문에 테스트 코드의 속도가 성능의 지표가 될 수 있을 거라고 생각하였습니다. 혹시 이 생각이 틀린 걸까요?

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

개인적인 의견으로는 강의에서 만든 테스트코드의 속도가 성능의 지표가 될수는 없을 것 같습니다.

테스트데이터가 적기때문에 제대로 된 테스트라고 할 수 없기때문입니다.

정확한 테스트는 데이터를 적재한 후 성능테스트를 수행하는것이 좋아보입니다.

감사합니다 :)

mirr님의 프로필 이미지
mirr

작성한 질문수

질문하기