문제 상황
JMeter로 성능 테스트를 실행하는 동안 인벤토리 증가/감소 논리를 비관적 잠금으로 구현할 수 있는지 궁금했습니다.
여러 사용자가 동시에 같은 상품을 주문하거나 취소할 가능성은 매우 희박하다고 생각하여 업비트 잠금장치로 교체하는 것이 좋겠다고 판단했습니다.
성능은 개발에서 정말 중요한 부분입니다.
고메즈에 따르면, 사용자의 40%3초만 기다리면 사이트가 종료됩니다.
Walmart가 페이지 속도를 100ms 향상시키면 매출 1% 증가효과가 있음을 발견합니다.
월마트 페이지스피드 슬라이드
Walmart는 명백한 사실을 증명하고 Devknob은 왜 사람들이 페이지 속도가 중요한지 이해하지 못하는지 궁금해합니다.
이것은 사실이었고 올해 초부터 사실로 알려졌습니다…
www.slideshare.net
준비
먼저 성능 테스트는 JMeter를 통해 수행되었습니다.
성능 테스트 도구 중 JMeter를 사용한 이유는 다음과 같습니다.
1. 오픈 소스: JMeter는 오픈 소스 프로젝트이며 무료로 사용할 수 있습니다.
또한 커뮤니티에서 지원되며 다양한 Plugin을 제공하여 다양한 기능을 확장할 수 있다.
2. 사용자 친화적이고 유연한 사용자 인터페이스: JMeter는 사용자 친화적인 사용자 인터페이스를 제공합니다.
사용자는 UI에서 테스트 계획을 빠르게 구성하고 다양한 구성 요소를 쉽게 추가/수정/삭제할 수 있습니다.
JMeter에는 다른 많은 이점이 있지만 위에 나열된 이점 때문에 도구를 사용했습니다.
사용법은 아래 사이트에 친절하게 설명되어 있으니 잘 보시고 참고하시기 바랍니다.
https://jmeter.apache.org/usermanual/index.html
Apache JMeter 사용 설명서
jmeter.apache.org
다음은 우려의 결과를 구현하는 과정입니다.
이전 결과
먼저 베어링 교체시 성능을 확인합시다.
콘솔 창 쿼리는 업데이트라고 표시되며 조회하면 잠겨 있는 것을 볼 수 있습니다.
다음은 초당 한 번씩 JMeter로 20회 테스트한 결과입니다.
최소 24ms, 최대 90ms가 걸리는 것을 볼 수 있습니다.
괜찮다고 생각할 수도 있지만 속도는 빠를수록 좋기 때문에 개선할 수 있다면 개선하는 것이 맞다고 생각합니다.
개선 후
다음은 낙관적 잠금으로 코드를 변경한 결과입니다.
이전과 달리 콘솔 창에서 업데이트 잠금이 활성화되지 않은 것을 확인할 수 있습니다.
다음은 초당 한 번씩 JMeter로 20회 테스트한 결과입니다.
최소 시간은 2ms, 최대 시간은 40ms 전력이 감소함을 알 수 있다.
최악의 경우 성능이 80% 향상됩니다.
나는 그것을 느꼈다
트랜잭션 충돌이 거의 발생하지 않을 때 낙관적 잠금을 사용하면 성능이 더 좋다는 것을 알게 되었습니다.
그런데 성능 테스트 툴을 통해 직접 눈으로 확인해보니 새로운 느낌이 들어서 성능 개선이 필요한 부분을 확인하는 데 활용할 생각입니다.