구성도
순서
- 유저의 요청을 받는 API 서버와 쿠폰을 실제로 발급하는 쿠폰 서버가 별도로 존재
API SERVER는 유저들의 요청을 처리해서Redis Cache를 통해 발급 대상을 검증한다.- 검증된 대상은 쿠폰 발급 대기열
큐에 대기를 시킨다. - 선착순 쿠폰 발급 성공 여부를 반환한다.
- 대기 큐를
인터페이스로 사용하여 쿠폰을 발급하는 서버로 넘긴다. 쿠폰 발급 서버는 해당 큐를폴링하여 읽어서쿠폰 발급 트랜잭션을Mysql에 처리한다.
- 쿠폰 발급 기능은
비동기로 이루어진다.
부하 테스트
Locust
- Python 스크립트 언어로 구현하는 서버 부하테스트 툴
- 로컬 환경 구축
- 실습 과정 지속적인 부하 테스트
모니터링 시스템 연동
- 부하시스템시 시스템의 Metric 확인
- AWS RDS, AWS Elasticache Metric 확인
- 로컬 환경의 모니터링 대시보드 구축 (Spring Actuator & Prometheus & Grafana)
사용 기술 스택
로컬 환경
- JDK 17
- Spring Boot 3.2.2
- IDE: IntelliJ Ultimate edition
- DBMS: DataGrip
- Docker( Docker-compose, Docker desktop)
배포 환경
- AWS EC2
기술 분류(개발)
- Spring Data JPA & QueryDsl
- Spring Data Redis
- Spring Actuator & Prometheus & Grafana (모니터링)
기술 분류(데이터)
로컬 환경
- Mysql 8
- Redis 7
- H2
배포 환경
- AWS RDS
- AWS Elasticache
성능 테스트
로컬 환경
- Locust
배포 환경
- 네트워크 트래픽 비용
깃허브 주소
https://github.com/vivalahm/coupon-management-system/tree/main