728x90

2024/12 7

쿠폰 선착순 발급 이벤트 회고록

1. 프로젝트 개요프로젝트명: 쿠폰 선착순 발급이벤트 이벤트 기간내에 발급이 가능하다.유저당 1번의 쿠폰 발급만 가능하다.기간: 2024.11.27 ~ 2024.12.10목표멀티 모듈에 대한 이해도를 높인다.대용량 트래픽에 대비해 RPS를 상승시킨다.MySql기반 쿠폰 발급 기능을 개발한다.Redis 기반 쿠폰 발급 기능을 개발한다.부하 테스트를 진행한다.AWS에 서버를 배포한다.팀원: 본인 기술 스택InfraAws EC2, Aws RDS, Aws Elastic CacheLanguageJava 17Framework Spring Boot 3ORM JPALibrary QueryDslDatabaseMySql, Redis, H2MonitoringAWS Cloud Watch, Prometheus, GrafanaT..

회고록 2024.12.10

쿠폰 선착순 발급 이벤트 - 서버 배포

AWS 의 RDS, Elastic Cache, EC2를 세팅할것이다.  Elastic cache - 시작하기 - redis 설정 configuration - design your own cachecreation mode - Cluster modecluster mode - disablecluster info - name: coupon  next - next - create 생성.RDS rds - db instance - create dababaseengine option: MySqlTemplates - Free tierSetting - db instance identifier: coupon( 맘대로 설정)Master password: admin1234public access - YEScreate datab..

클라우드 2024.12.09

AWS: local 환경에 rds 연결중 DBMS: MySQL (no ver.)에러, Failed to connect to your instance, Failed to connect to your instance

aws에 세팅한 환경을 local 에 연결하려고 test connectio 을 해보니DBMS: MySQL (no ver.)Case sensitivity: plain=mixed, delimited=exactConnection timed out: connect.에러가 났다.security group 인바운드 규칙을 추가해주지 않아서 그런것.RDS - Databases - 해당 db - connectivity&Security - VPC Security group - edit inbound rules - everywhere IP4, enerywhere IP6를 추가해준다.ec2 instance connect 를 하니Failed to connect to your instance EC2 Instance Connec..

JAVA/에러 2024.12.09

쿠폰 선착순 발급 이벤트 -프로메테우스, 그라파나를 사용해 모니터링 환경 구축

프로메테우스를 통해 메트릭을 수집하고, 그라파나를 사용해 시각화, 대시보드를 설정한다. build.gradle.kts 의존성 추가 implementation("org.springframework.boot:spring-boot-starter-actuator")implementation("io.micrometer:micrometer-registry-prometheus") yml 파일 설정 core.yml---spring: config: activate: on-profile: prod datasource: hikari: jdbc-url: jdbc:mysql://PROD_URL:3306/coupon driver-class-name: com.mysql.cj.jdbc.Dri..

JAVA/프로젝트 2024.12.09

쿠폰 선착순 발급 이벤트 - redis 분산락 쿠폰 발급 문제점.

redis 분산락을 적용 사용해 쿠폰 발급 처리하는 로직을 작성했는데, RPS 가 낮다.  public void issue(long couponId, long userId) { //쿠폰 캐시를 통한 유효성 검증을 캐시 처리. 엔티티 필드를 가져오는 부분을 캐시 처리 CouponRedisEntity coupon = couponCacheService.getCouponCache(couponId); //캐시로 날짜 유효성 검사 coupon.checkIssuableCoupon(); Integer totalQuantity = coupon.totalQuantity(); //동시성 제어를 위한 락 distributeLockExecutor.execute("lock_%s".format..

JAVA/프로젝트 2024.12.05

쿠폰 선착순 발급 이벤트 - 쿠폰 발급 서버 구조 학습, 적절한 redis 데이터 구조 결정.

쿠폰 API 서버 구조 1. 유저가 api 서버로 요청을 보낸다2. API 서버에서 요청을 처리한다.3. 요청을 처리하는 과정에서 데이터베이스를 사용해 트랜잭션을 처리한다.쿠폰 조회쿠폰 발급 내역 조회쿠폰 수량 증가 & 쿠폰 발급우리는 N개의 요청을 처리 하길 바라는데 이것이 가능한가?-> DB는 감당하지 못함.고로, 유저 트래픽을 감당할 수 있는 구조로 변경해야한다.  쿠폰 API 서버 구조 개선  유저 트래픽 처리1. N명의 유저가 요청을 보낸다.2. API 서버에서는 N개의 요청을 처리한다.3. redis 에서 요청을 처리하고 쿠폰 발급 대상을 저장한다.4. 쿠폰 발급 처리 기능에서 redis 에 쿠폰 발급 대상을 조회해 발급 처리한다.  redis를 인터페이스로 해서, 발급 서버를 분리하였다. a..

JAVA/프로젝트 2024.12.02

redis 데이터 구조 학습

docker desktop - container - redis - exec - open in external terminal접속 후 redis-cli -p [설정한 포트번호] 혹은 cmd 창에서C:\Users>docker exec -it redis redis-cli -h localhost -p [설정한 포트 번호]Redis 데이터 구조: String 타입의 데이터 구조, 텍스트, 직렬화된 객체 등을 저장하는 용도로 자주 사용된다.SET:127.0.0.1:6379> set coupon:1 coupon_test //set key value 저장OK127.0.0.1:6379> get coupon:1 //get key 조회"coupon_test"List데이터 삽입 순서에 따라 정렬된 문자열 컬렉션 형태 데이터..

기타 2024.12.02
728x90
반응형