어떤 락이 가장 소요시간이 적을지 궁금해 락마다 걸리는 소요시간을 테스트 해보았습니다.
모든 테스트는 단일 서버에서 1000개씩 5번 반복 요청하여 속도를 측정하였습니다.
- Synchronized
- Optimisitc Lock (낙관적 락)
- Pessimistic Lock (비관적 락)
- Lettuce
- Redisson
결론적으로 배웠던 점
- 위와 같은 테스트는 컴퓨터 환경에 따라 결과가 달라질 수 있어 좋은 테스트라고 말할 수 없습니다…
- 위에서 테스트했던 코드와 같이 로직이 간단하거나, 트래픽이 많지 않을 경우는 DB에 비관적 락을 거는것이 처리속도가 더 빠를 수 있으나 비관적 락은 로직이 복잡해지고, 여러 테이블의 데이터를 접근할 때 데드락이 발생할 수 있는 위험도 가지게 됩니다.
- 스케일 아웃된 DB 환경 또는 여러대의 applictaion (서버) 가 있을 때는 redis를 활용한 분산락을 사용해야 합니다.
- 모든 상황에서 redis 락이 좋은것은 아닙니다. 실제로 충돌이 매우 적게 일어나는 서비스라면 redis로 락을 구현하지 않고 낙관적 락을 사용해서 구현하는것이 추가적인 서버 비용도 줄이고 더 효율적일 수 있습니다.
- 이번에 진행했던 프로젝트는 DB를 여러대로 분산하여 사용하지 않았기 때문에 비관적 락을 적용했다면 성능이 더 좋게 나왔을 수도 있었겠다 하는 생각이 들었습니다.
- redis 분산락이라고 항상 좋은것은 아니며, 락은 상황마다 적합한것을 찾아 적용해야 합니다.
추가
다른 팀원분이 같은 코드로 테스트를 진행하여 주셨었는데