REDIS 6

[트러블슈팅] 분산락 걸었는데도 부하테스트 결과가 이상하다 : JPA 갱신 유실 트러블슈팅

필자는 MSA 기반 대규모 트래픽 처리 예약구매 이커머스 서비스를 개발중이었다. 깃허브 주소 프로젝트의 핵심 기능 중 하나가 예약구매였다. 한정된 재고에 대해 여러 사용자가 동시에 주문을 넣는 구조라 동시성 문제가 필연적으로 따라오는 기능이었다. 재고에 대한 동시성 문제(Race condition)는 Redis 분산락으로 테스트코드를 통해 해결됐음을 확인했다! (자세한 분산락 핸들링 기록은 아래 분산락 포스팅 참고) [프로젝트/기술적 의사결정] Redis 분산락으로 재고 감소 동시성 이슈 해결하기 (1/2)필자는 MSA 기반 이커머스 프로젝트에서 상품/재고/예약구매 도메인을 맡아 진행중이다. 지난 프로젝트에서 쿠폰 도메인을 맡아 개발했을 때 Race condition 문제를 예상치 못하게 겪고 (..) ..

[프로젝트/구현] Redis Replication 마스터-슬레이브 구조를 통한 분산 처리 적용 과정

이전 글2025.05.01 - [Project/대용량 트래픽 프로젝트] - [기술적 의사결정] MSA 환경에서 배송 정보 임시 저장소로 Redis를 사용한 이유 [기술적 의사결정] MSA 환경에서 배송 정보 임시 저장소로 Redis를 사용한 이유💡문제 상황우리 프로젝트에서는 주문을 생성할 때 배송 정보도 함께 입력받는 구조를 채택하고 있다. 현재 주문 처리 흐름은주문 ➡️ 재고 확인 ➡️ 결제 ➡️ 재고 차감 ➡️ 배송 ➡️ 주developer-jinnie.tistory.com 이전 글에서는 배송 데이터 임시 저장소로 Redis를 선택해 사용하게 된 기술적 의사결정 과정을 기술해보았다. 이번 글에서는 해당 구조에서 오는 문제점을 인지하고 해결하는 과정을 공유해보려 한다. 💡문제 상황현재 개발 중인 서..

[프로젝트/구현] Redis 분산락으로 재고 감소 동시성 이슈 해결하기 (2/2) (feat. Facade 패턴)

이전 글 [프로젝트/기술적 의사결정] Redis 분산락으로 재고 감소 동시성 이슈 해결하기 (1/2)필자는 MSA 기반 이커머스 프로젝트에서 상품/재고/예약구매 도메인을 맡아 진행중이다. 지난 프로젝트에서 쿠폰 도메인을 맡아 개발했을 때 Race condition 문제를 예상치 못하게 겪고 (..) 이번 프developer-jinnie.tistory.com 이전 글에서 redisson 라이브러리를 사용해 분산락을 구현하기로 결정했었다. 이번 글에선 분산락으로 재고 감소 동시성 이슈를 해결하는 과정을 기술해보려 한다. 1. Redis 및 Redisson 의존성 추가 // Redis implementation 'org.springframework.boot:spring-boot-starter-dat..

[트러블슈팅] '선착순 쿠폰 발급' 로직 - Redis를 통한 동시성 문제 해결 (2/2)

[트러블슈팅] '선착순 쿠폰 발급' 로직 - 동시성 문제 발생 (w/ Race Condition) (1/2)일반 쿠폰 발급 로직 설계를 마치고, 선착순 쿠폰 발급 로직 개발에 들어왔다가 동시성 문제에 맞닥뜨렸다. 드디어 여태 들어만 봤던 동시성 문제를 해결할 기회가 왔다. 맞다이로 드루와 개요developer-jinnie.tistory.com이전 글에서는 로직 설계를 하면서 맞닥뜨린 동시성 문제와, 이 문제에 대한 분석 및 해결 방안 등을 찾아보고 비교해봤다. 이번 글에서는 지난 글을 통해 도출해낸 해결 방법을 내 로직에 적용해보며 동시성 문제를 해결해보는 과정을 담아보려 한다. 문제 해결 과정먼저 Redis를 설치해주어야 하지만 필자의 환경에서는 전에 레디스를 통한 캐싱 작업을 해 본 경험이 있어 Re..

[트러블슈팅] '선착순 쿠폰 발급' 로직 - 동시성 문제 발생 (w/ Race Condition) (1/2)

일반 쿠폰 발급 로직 설계를 마치고, 선착순 쿠폰 발급 로직 개발에 들어왔다가 동시성 문제에 맞닥뜨렸다. 드디어 여태 들어만 봤던 동시성 문제를 해결할 기회가 왔다. 맞다이로 드루와 개요일단 서비스 및 컨트롤러, 레포 코드를 작성한 후 테스트 케이스를 작성하고 돌려봤을 땐 pass가 떴다. 그 후 postman으로 1차 기능 테스트 까지는 성공.서비스 레이어 코드123456789101112131415161718192021222324252627282930    /**     * 선착순 쿠폰 발급     */    @Transactional    public CouponIssuedResponseDto issueFirstComeCoupon(CouponIssuedRequestDto request) {      ..

[TIL] 캐시와 Redis (Redis 특징과 장점, 사용 시 주의할 점)

프로젝트에서 성능 개선을 위해 캐시를 이용해야 할 일이 생겼다. 프로젝트 적용에 앞서 캐시란 뭔지, 왜 써야하는지 등 캐시에 대한 것들과 Redis의 간결한 특징을 정리해보려 한다. 📌캐시(Cache)란?캐시란, 데이터를 빠르게 읽고 처리하기 위해 (속도가 빠른 메모리를 활용하여) 미리 데이터를 저장해두는 임시 장소이다. 계산된 값을 임시로 저장해두고, 동일한 계산 / 요청 발생 시 다시 계산하지 않고 저장된 값을 바로 사용한다고 생각하면 된다. 이 때 사용하는 임시 저장소를 '캐시'라 하고, 이런 기술을 '캐싱'이라고 한다. 📌캐시의 활용캐시는 컴퓨터 공학 전반의 매우 다양한 곳에서 쓰이는데, BE 개발자에게 익숙한 것 두 가지를 뽑아보면 DP와 JPA를 예로 들 수 있을 것 같다.Dynamic P..

Computer Science 2024.05.28