배경 및 목표
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 큐의 데이터가 비워지나요?
대량 요청 시 병목은 없나요?
테스트를 통해 검증된 내용은 무엇인가요?
Related Posts
Search