프로젝트가 끝난 후 Lock 종류별 성능 테스트를 진행했다.

우리의 예상은 DB Level의 Lock 보다 Cache를 사용하는 Lock의 성능이 뛰어날 것으로 예상하고 Cache Level의 Lock을 구현해서 프로젝트에 적용했다.

부하가 절대 수가 적은 1개의 ID로 1000번 구매하는 경우 아무래도 DB 수준의 Lock이 Cache 수준의 Lock보다 성능이 좋게 나와서 처음에는 의문을 가졌었으나, 부하를 더 세게 걸면 걸수록 DB 수준의 Lock의 성능이 안 좋아지는 속도가 Cache 수준의 Lock보다 더 빨라서 측정한 최종 결과를 보면, 비관적 락으로 구현했을 경우 100개의 상품을 1000번 요청 보냈을 때 1번 째에는 18045ms 가 나와서 다른 Cache Lock보다 성능이 좋게 나왔지만 요청이 전부 끝나고 다시 요청을 보낸 경우 25887ms 가 나오는 것으로 보아 한 번 그렇게 다량의 요청을 보내면 DB가 부하를 먹어 처리 속도가 늦어지는 것으로 예상된다. 반면 Cache 수준의 Lock들의 경우에는 1번째 시도는 비관적 락 보다 성능이 좋지 않게 나왔지만, 2, 3번째 시도에도 비슷한 성능을 보여주는 것을 확인할 수 있었다.

락 별 성능 테스트

동일한 ID의 상품을 구매하는 경우(1000개)

DB 수준의 락

낙관적 락 484ms 첫 시도

Untitled

1696ms 2번째 시

Untitled

880ms 3번째 시도