반응형

Spring 16

Mysql 기반 선착순 쿠폰 발급 기능 개발 (2)

쿠폰 엔터티 발급 기능 이제부터 본격적으로 coupon 엔터티에 기능을 추가해보자. 서비스에 기능을 추가할 수 있지만, DDD 관점에서 설정을 한다면 도메인과 관련된 기능은 도메인에 넣어주는 것이 좋다. Coupon // mycouponcore/model/Coupon.java package com.example.mycouponcore.model; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Entity @Builder @NoArgsConst..

Mysql 기반 선착순 쿠폰 발급 기능 개발 (1)

mysql, redis 설정 먼저 mysql과 redis를 도커 컨테이너로 띄우기 위해 docker-compose를 작성해 주자. //docker-compose.yml version: '3.7' services: redis: container_name: coupon-redis image: redis:7.2-alpine command: redis-server --port 6380 labels: - "name=redis" - "mode=standalone" ports: - 6380:6380 mysql: container_name: coupon-mysql image: ubuntu/mysql:edge command: mysqld --character-set-server=utf8mb4 --collation-ser..

2. 프로젝트 환경 설정

멀티모듈 구성 좀 더 효율적인 관리를 위해 멀티모듈로 구성해 볼 예정이다. dependecy는 필요할 때 그때 추가하기로 한다. create를 누르면 다음과 같이 프로젝트가 생성될 것이다. 제일 바깥의 디렉토리는 src 폴더가 필요없으니 삭제해주도록 하자. 루트 디렉토리(mycoupon)에서 우클릭 > new > Module… 선택하면 새로운 모듈을 만들 수 있다. 위의 타이틀에 New Module을 꼭 확인하자!! 아까와 동일하게 dependency를 나중에 넣어줄 예정이기에 그냥 바로 craete를 해주자. 총 3가지 모듈로 구성될 것이다. mycoupon-api mycoupon-consumer mycoupon-core 보통 멀티모듈로 구성할 때는 공통으로 가져다 쓰는 모듈을 core로 두고, 나머지..

1. 요구사항 분석 및 도메인 설계

선착순 쿠폰 발급 시스템이란? 한정된 수량의 쿠폰을 먼저 신청한 사용자에게 제공하는 시스템을 말합니다. 선착순 쿠폰 이벤트 요구사항 특정 기간(ex) 2024-04-01 오후 3시 ~ 2024-04-07 오후 8시)에 발급해야 한다. 한 유저당 한번의 쿠폰이 발급되어야 한다. 선착순 쿠폰의 최대 발급 수량이 정해져 있다. 기능 정의서 쿠폰 발급 기능 쿠폰 발급 기간 검증 쿠폰 발급 수량 검증 쿠폰 전체 발급 수량 중복 발급 요청 검증 쿠폰 발급 쿠폰 발급 수량 증가 쿠폰 발급 기록 저장 coupon_id user_id 구현 목표 정확한 발급 수량을 제어합니다.(동시성 이슈 처리) 많은 트레픽이 들어와도 안정적으로 높은 처리량 도메인 크게 2가지 도메인이 있다. 쿠폰 쿠폰 발행 로직에 집중하기 위해 핵심 ..

반응형