락 선택 이유와 성능 테스트

개요 이 포스트는 세 가지 동시성 제어 방식의 성능을 비교합니다: 락 없는 트랜잭션, Beta Lock, Redisson 분산락 테스트 환경 DB: H2 (MariaDB 모드) 환경: 로컬 Redis: Embedded 스레드 수: 32 요청 횟수: 각 1회 1. 트랜잭션만 사용한 결과 @Transactional public void notUseLockTest(String lockName, Integer userId) { BeanPay beanPay = getBeanPay(1, Role.USER); final BeanPayDetail beanPayDetail = BeanPayDetail.ofCreate( beanPay, 1, 5000 ); final BeanPayDetail createBeanPayDetail = beanPayDetailRepository.save(beanPayDetail); beanPay.chargeBeanPayDetail(createBeanPayDetail.getAmount()); } 결과 트랜잭션만 사용하면 MySQL의 기본 격리 수준(Repeatable Read)에서 Lost Update 문제가 발생하여 데이터 정합성이 낮아집니다. ...

April 30, 2024 · Lee WooJin

코리아노 BeanPay 고민

빈페이로 결제하게 된 이유 내부 결제 로직과 외부 API 충전 기능을 분리함으로써 외부 API 장애 시 영향을 최소화합니다. 결제를 진행하는 중에는 외부API를 연동하지 않기 때문에 사용자의 경험을 향상시키고 결제 프로세스를 간소화할 수 있습니다. 서비스 자체 포인트인 빈페이 관리 방법 비교 방안 1: 유저 MSA에 beanpay 컬럼 추가 결제 MSA에서 유저 MSA로 API 요청하여 관리. 문제점: 단일 트랜잭션 구현의 어려움 수동 롤백 처리 필요 비관적 락을 사용하거나 분산락을 사용하게 되면 회원의 읽기 성능도 떨어지게 됩니다. 방안 2: 결제 MSA에 관리 (선택) 결제 MSA 내 BeanPay 테이블 및 상세 테이블로 관리. ...

April 17, 2024 · Lee WooJin