Tiny Star

Redis 5

[뉴스 요약] 요청 제한 + 로그 기록 (Redis + Kafka)

뉴스 요약 기능을 혼자 만들면서, 나중에 사용자에게 공개했을 때를 대비해 OpenAI API 호출에 제한을 둘 필요가 있다고 판단했다. 처음에는 프론트엔드에서 쿠키 기반으로 하루 5회 제한을 두는 식으로 간단하게 처리했지만, 브라우저나 기기를 바꾸면 무력화되는 구조라 한계가 뚜렷했다.그래서 이번에 요청 제한을 백엔드 Redis로 이전하고, 동시에 요청 이력을 Kafka를 통해 비동기로 DB에 저장하는 구조를 추가했다. 아직 나 혼자만 사용하는 서비스이긴 하지만, 구조를 미리 잘 설계해두면 나중에 트래픽이 생겼을 때 대응하기 수월할 것 같았다. 전체 구조요청이 들어오면 Redis에서 하루 5회 제한을 검사하고, 통과한 경우 GPT 요약 처리를 진행한다. 요약 결과는 DB에 저장하고, 동시에 요청 이력을..

[쿠폰] 쿠폰 발급 (Redis Stream, CustomDbWorker)

쿠폰 발급에 관한 상세사항은 [Git Issues] 참고 흐름[1] 발급 요청 수신 ↓[2] Redis 재고 조회 ↓[3] 재고 DECR - 재고 부족이면 → 발급 실패 ↓[4] 발급 성공 - 재고 DECR 상태 유지큰 흐름은 위와 같다.다만 여기에서는 Redis에 해당 Key가 만료되어 사라지거나 다른 문제로 없어졌다면 어떻게 해야할지와DECR만 할 뿐 발급 내역을 따로 저장하는 로직이 포함되어 있지 않아서 추가했다. [1] 발급 요청 수신 ↓[2] Redis 재고 조회 - 없으면 → DB 조회 → Redis 복구 ↓[3] 재고 DECR - 재고 부족이면 → 발급 실패 ↓[4] 발급 성공 - 발급 성공 이력을 Kafka/Redis Stream 등에 publish ..

프로젝트/쿠폰 2025.04.29

[쿠폰] 쿠폰 조회 (Redis 예외처리)

couponId에 따른 재고 조회하는 API (자세한 내용 Git Issue 참고) 1. 요구사항1. 목적Redis에 coupon:{couponId}:stock 형식으로 재고를 등록한다. 2. 작업 내용POST /api/admin/coupons요청 파라미터:couponId (Long, 필수) : 쿠폰 IDquantity (int, 필수) : 초기 재고 수량ttlSeconds (int, 선택) : 재고 만료시간(초 단위), 미지정시 무제한 유지 3. 요청/응답 예시요청POST /api/admin/coupon{ "couponId": 123, "quantity": 100, "ttlSeconds": 86400} 응답{ "couponId":13, "stock":100} 2. 작업 내용//..

프로젝트/쿠폰 2025.04.28

[쿠폰] 쿠폰 생성 (@Transactional, CustomException)

쿠폰 정보를 받아서 DB에 저장하고 Redis에도 올리는 작업을 했다. (자세한 내용은 Git Issue 참고) 1. 요구사항1. 목적쿠폰 등록 시 DB와 Redis를 일관성 있게 관리하기 위해 등록 흐름을 명확히 분리한다.쿠폰 정보를 먼저 DB에 저장하고, 생성된 coupon_id를 기반으로 Redis에 재고를 등록하는 프로세스를 구현한다. 2. 작업 내용쿠폰 종류 등록 API 구현POST /api/admin/coupons API 생성쿠폰 이름(name), 총 수량(total_quantity) 등을 받아 DB에 저장저장 후 생성된 coupon_id를 반환쿠폰 재고 Redis 등록반환된 coupon_id를 사용하여 Redis에 coupon:{coupon_id}:stock으로 재고 등록필요 시 TTL(만..

프로젝트/쿠폰 2025.04.28

Redis란?

공고보면 기술 스택에 Redis가 있는 경우를 왕왕 봤다.전 실무에서는 대용량데이터를 넣고 통계돌리는 일이 과반수였기 때문에 Redis를 사용할 일이 없었다.그래서 개인 프로젝트하면서 사용할건데, 막상 Redis 에 대해 자세히 알지 못해서 찾아서 정리해보려고 한다. 1. Redis 란?Remote Dictionary Server의 약자로 메모리 기반의 Key-Value 저장소이다.대표적인 In-Memory DataStructure Store로 데이터가 RAM에 저장되어 매우 빠른 읽기/쓰기 속도를 제공한다.RAM 사용으로 인한 단점은 없을까?- 비용 문제: 디스크에 비해 비싸기 때문에 대용량 데이터를 저장하려면 비용이 많이 든다.- 용량 한계: 디스크보다 훨씬 작기 때문에, 너무 많은 데이터를 넣..

IT 2025.04.28
top