Search

[Applicaion]12.비동기 구조: 쿠폰 발급 처리 시스템(coupon-consumer)

Publish Date
2024/11/20
Tags
Status
Done
1 more property
coupon-consumer
쿠폰 발급 요청을 Redis에서 주기적으로 조회하여 MySQL에 트랜잭션으로 저장하는 비동기 처리 서버를 구현하는 것이 목표이다.

배경 및 목표

Redis를 기반으로 비동기 구조를 결정하였으며, 쿠폰 발급 트랜잭션 서버 coupon-consumer를 구현한다. Redis 큐에서 발급 요청 데이터를 주기적으로 조회하여 MySQL에 안전하게 저장하는 트랜잭션 시스템을 구축한다.

coupon-consumer

구조 및 구현

kakaoshop-BE └── src/main/ ├── resource │ └── application-consumer.yml ├── java/com/example/couponconsumer/ │ └── listener/ │ └── CouponIssueListener.java └── test/java/ └── com/example/couponconsumer/listener/ └── CouponIssueListenerTest.java
Java
복사
파일명
내용
CouponIssueListener.java
Redis에서 데이터를 조회하고, MySQL로 발급 트랜잭션 수행
CouponIssueListenerTest.java
발급 요청 처리 로직의 정상 동작 여부를 검증하는 테스트

소스코드

applicaion-consumer.yml
CouponIssueListener.java
CouponIssueListenerTest.java

결론

coupon-consumer를 통해 Redis 큐에 적재된 쿠폰 발급 요청 데이터는 스케줄링을 통해 MySQL로 안전하게 트랜잭션이 처리된다. 이를 통해 비동기 구조가 구현되었고, Redis 큐의 데이터는 비워지며 MySQL에 데이터가 누적된다.
coupon-consumer 실행 후 Redis 큐의 데이터가 스케줄링에 의해 MySQL로 이동
Redis 큐 비워짐. ( 0.issue.request : 1500건 → 0건)
MySQL에 트랜잭션 완료된 데이터 저장 (issued_quantity: 0건 → 1500건)

Q&A

쿠폰 발급 요청은 어떤 구조로 처리되나요?
발급 순서는 어떻게 보장하나요?
Redis 큐의 데이터가 비워지나요?
대량 요청 시 병목은 없나요?
테스트를 통해 검증된 내용은 무엇인가요?
Search
Main PageCategoryTagskkogggokkAbout MeContact