반응형
선착순 쿠폰 발급 시스템이란?
한정된 수량의 쿠폰을 먼저 신청한 사용자에게 제공하는 시스템을 말합니다.
선착순 쿠폰 이벤트 요구사항
- 특정 기간(ex) 2024-04-01 오후 3시 ~ 2024-04-07 오후 8시)에 발급해야 한다.
- 한 유저당 한번의 쿠폰이 발급되어야 한다.
- 선착순 쿠폰의 최대 발급 수량이 정해져 있다.
기능 정의서
- 쿠폰 발급 기능
- 쿠폰 발급 기간 검증
- 쿠폰 발급 수량 검증
- 쿠폰 전체 발급 수량
- 중복 발급 요청 검증
- 쿠폰 발급
- 쿠폰 발급 수량 증가
- 쿠폰 발급 기록 저장
- coupon_id
- user_id
구현 목표
- 정확한 발급 수량을 제어합니다.(동시성 이슈 처리)
- 많은 트레픽이 들어와도 안정적으로 높은 처리량
도메인
크게 2가지 도메인이 있다.
- 쿠폰
- 쿠폰 발행
로직에 집중하기 위해 핵심 도메인과 컬럼만으로 설계하였다.
craete_ddl
김영한님의 강의를 보면 create ddl의 경우에는 직접 쿼리를 작성하는 것이 좋다고 한다.
덤으로 첫 데이터 insert 문까지 넣어놨다.
CREATE TABLE `coupon`.`coupons`
(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL COMMENT '쿠폰명',
`coupon_type` VARCHAR(255) NOT NULL COMMENT '쿠폰 타입 (선착순 쿠폰, ..)',
`total_quantity` INT NULL COMMENT '쿠폰 발급 최대 수량',
`issued_quantity` INT NOT NULL COMMENT '발급된 쿠폰 수량',
`discount_amount` INT NOT NULL COMMENT '할인 금액',
`min_available_amount` INT NOT NULL COMMENT '최소 사용 금액',
`date_issue_start` datetime(6) NOT NULL COMMENT '발급 시작 일시',
`date_issue_end` datetime(6) NOT NULL COMMENT '발급 종료 일시',
`date_created` datetime(6) NOT NULL COMMENT '생성 일시',
`date_updated` datetime(6) NOT NULL COMMENT '수정 일시',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT '쿠폰 정책';
CREATE TABLE `coupon`.`coupon_issues`
(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`coupon_id` BIGINT(20) NOT NULL COMMENT '쿠폰 ID',
`user_id` BIGINT(20) NOT NULL COMMENT '유저 ID',
`date_issued` datetime(6) NOT NULL COMMENT '발급 일시',
`date_used` datetime(6) NULL COMMENT '사용 일시',
`date_created` datetime(6) NOT NULL COMMENT '생성 일시',
`date_updated` datetime(6) NOT NULL COMMENT '수정 일시',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT '쿠폰 발급 내역';
insert into coupons (title, coupon_type, total_quantity, issued_quantity, discount_amount, min_available_amount,
date_issue_start, date_issue_end, date_created, date_updated)
values ('선착순 쿠폰 이벤트','FIRST_COME_FIRST_SERVED',500,0,100000,10000,now(),now(),now(),now());
참조
반응형
'토이프로젝트 > 선착순 이벤트 쿠폰 시스템' 카테고리의 다른 글
Mysql 기반 선착순 쿠폰 발급 기능 개발 (4) (0) | 2024.04.30 |
---|---|
Mysql 기반 선착순 쿠폰 발급 기능 개발 (3) (0) | 2024.04.18 |
Mysql 기반 선착순 쿠폰 발급 기능 개발 (2) (0) | 2024.04.16 |
Mysql 기반 선착순 쿠폰 발급 기능 개발 (1) (0) | 2024.04.08 |
2. 프로젝트 환경 설정 (0) | 2024.04.06 |