목록2024/07/06 (3)
개발놀이터
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/O8E5X/btsIpamAGQl/YIZTMvKXyBKmrRxuD2ekPK/img.png)
기존 프로젝트에서 동시성 문제가 발생하였고 이를 JPA의 비관적 락으로 해결하였습니다. 하지만 비관적락이 RDBMS로 하여금 락킹 매커니즘을 관리하기위해 커넥션을 생성하고 이때문에 RDBMS에 부하가 발생한다는 문제가 발생했습니다. 해결방법으로 Redis의 라이브러리인 Redisson을 이용해 분산 락을 구현했습니다. 기존에 사용하던 Lettuce는 스핀락의 개념으로 Redis에 lock을 지속적으로 확인해야 하기 때문에 RDBMS의 부하가 그대로 Redis로 몰린다는 단점이 있었습니다. 때문에 Redisson을 사용하게 되었습니다. wrk2로 부하 테스트를 진행하였고 docker로 컨테이너를 모니터링 하여 테스트를 진행했습니다. 특징RDBMS는 MySQL을 사용하였습니다. 스레드는 8개, 동시 커..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/OC3sy/btsIqSYUyWL/WnlKa4AapHjsTUoXcPvn9k/img.png)
사이드 프로젝트인 온라인 쇼핑몰에 Redis를 이용해 Client Side Caching을 적용했습니다. Redis 6에 추가된 RESP3 프로토콜을 사용했고 Redis Client인 Spring Boot에서 CacheFront 를 이용해 클라이언트 사이드 캐싱을 구현할 수 있었습니다. wrk2를 이용해 API 테스트를 진행했습니다. 스레드 개수 : 8개동시 연결 : 50개지속 시간 : 60초초당 요청 수 : 1000개 성능 개선동일한 기준에서 테스트를 진행했을 때 Redis를 순수하게 이용했을 때와 local caching을 이용했고, 이로인해 Latency는 평균 80% 최대 130% 개선하였고, throughput은 평균 4% 최대 250% 개선하였습니다. 이로 인해 얻은 것기존 프로젝트에서..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/brIcO2/btsIqNQNe8o/O09hfGQiufS87eD1sOpze0/img.png)
일단 포스팅은 아래의 링크를 참고하였습니다. https://helloworld.kurly.com/blog/distributed-redisson-lock/ 풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson어노테이션 기반으로 분산락을 사용하는 방법에 대해 소개합니다.helloworld.kurly.com 컬리에서 다양한 동시성 문제를 앓았다고 합니다. 1. 동시에 요청하는 사용자2. Kafka에서 동시에 보내는 메세지등등 이런 상황에서 다양한 동시성 문제가 있었고 이를 처음엔 RDBMS의 분산락으로 해결했다고 하더군요. 하지만 락킹 매커니즘을 RDBMS가 담당해야 하기 때문에 데이터베이스에 부하가 심하게 걸린다는 사실을 알아내셨습니다. 때문에 Redis의 분산락을 이용하기..