inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Năm 2026! Hướng dẫn thực hành Redis dành cho nhà phát triển Backend: Từ cơ bản đến các mô hình thực tế

레디스로 재고 관리

8

goyangee

25 câu hỏi đã được viết

0

안녕하세요.

최근 수백만 동시 접속을 처리하는 예매 시스템 아키텍처 관련 강의와 유튜브 영상을 참고하면서, 작은 프로젝트로 선착순 쿠폰 발급 시스템을 직접 구현해보며 학습하고 있습니다.

현재는 Redis를 활용해 선착순 쿠폰 발급을 구현하는 구조를 고민하고 있는데, 몇 가지 아키텍처 설계에 대해 궁금한 점이 있어 질문드립니다.


1. Redis + DB 원자성 관련

Redis에서 쿠폰 발급 가능 수량을 감소시키고, 동시에 DB에도 반드시 반영(쿠폰 발급 및 사용자 할당 기록)해야 하는 상황을 가정하고 있습니다.

이 경우 Redis의 재고 감소와 DB 반영을 하나의 트랜잭션처럼 원자적으로 묶어야 할 것 같은데, 현실적으로는 분산 환경 특성상 이를 직접적으로 묶는 것이 어렵다고 이해하고 있습니다.

그래서 일반적으로는

을 원자적으로 수행하고,

으로 설계하는 것이 맞는지 궁금합니다.


2. 메시지 큐(Kafka 등) 사용 시 구조

또한 쿠폰 발급 결과를 Kafka 같은 메시지 큐로 전달하는 방식도 있을 것 같은데,

이 경우에도 동일하게

과 같은 구조로 가져가는 것이 일반적인지 궁금합니다.

아키텍처 redis FastAPI

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 김재연님.

선착순 쿠폰 발급 시스템을 구현하시면서 Redis를 거쳐 데이터베이스에 반영하는 단계적인 구조를 고민 중이시군요. Redis와 데이터베이스 사이에서의 원자성 문제와 시스템 아키텍처에 대한 두 가지 주요 질문을 해주셨습니다. 다음은 각각의 질문에 대한 설명입니다.

1. Redis와 DB 간의 원자성 문제

Redis와 데이터베이스는 각각 다른 시스템으로, 직접적인 트랜잭션으로 묶을 수는 없습니다. 다만, 트랜잭션과 비슷한 성격을 구현할 수 있도록 여러 가지 방법이 존재합니다. 제안하신 내용처럼, Redis 내의 Lua 스크립트를 활용하여 재고 감소와 중복 처리를 원자적으로 수행하고, 그 결과를 Redis Stream에 기록하는 패턴은 좋은 방법입니다. 이후, Worker 프로세스가 Stream이나 Queue을 읽어 DB에 해당 정보를 기록하도록 설계하는 것은 실제 실무에서도 많이 활용되는 패턴입니다. 이는 일관성과 성능 두 가지 측면에서 매우 효과적입니다.

2. 메시지 큐 활용 방안

Kafka 같은 메시지 큐를 사용하는 경우, Redis Stream에서 이벤트를 처리하고 Kafka로 전송하는 방식은 분산 데이터 처리에서 유용합니다. Kafka를 사용하여 각 이벤트를 확실히 전달하고, 이후 Consumer가 이를 처리하여 DB에 반영하는 것은 일관성을 유지할 수 있는 좋은 방법입니다. 특히, 이벤트의 영속성과 복구 가능성을 제공하기 때문에 대규모 시스템에 적합합니다.

요약

  • Lua Script 및 Redis Stream: Redis 내부에서 가능한 작업은 Lua Script를 통해 원자적으로 관리하고, 결과 이벤트를 Stream에 저장합니다.

  • Worker 또는 스케줄러 사용: Redis Stream의 이벤트를 읽어 데이터베이스에 반영하도록 합니다.

  • Kafka 활용: 필요 시 Kafka를 사용하여 확장성과 안정성을 높이고, 메시지 전달의 신뢰성을 보장하게 됩니다.

이 접근 방식들은 다양한 아키텍처 설계에서 일반적으로 사용되며, 실시간 성능과 데이터 안정성 두 가지를 적절히 보장할 수 있게 합니다. 이와 관련한 추가적인 예시와 설명은 아래의 관련 질문 링크에서도 참고하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이제 인프런에서 강의 더 안산다. 후져....

0

18

0

소스코드 어디서 다운받아요?

0

30

5

Lock 해제 문의 드립니다.

0

27

2

답을언제쯤받아볼수있나요

0

27

2

프로젝트가 없어요..

0

44

2

강의 일정 및 수업 자료 공유 관련 문의드립니다!

0

29

1

레디스로 대기큐 구현 질문

0

64

2

API LIMIT

0

47

1

캐시 무효화

0

37

2

Redis와 Kafca의 Pub/Sub 차이

0

52

2

27강 슬랙 테스트 부분도 누락된 것 같네요

1

55

2

22강 케글 연동 강의내용 누락된듯해요

1

52

2

한국투자증권 미국 주식 매매 수수료와 환전 수수료가 높은 경우 자동매매 베개투자법을 적용해도 괜찮을까요?

0

69

2

스크립트를 한번에 복사하고 싶습니다.

0

43

2

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

45

1

너무 흥미진진합니다..

1

55

2

순위가 동률일 때의 처리에 대해 질문드립니다.

0

67

2

Redlock 알고리즘 관해 궁금한게 있습니다!

0

88

2

좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.

0

64

2

백엔드 서버 코드 변경에서 프론트엔드 서버가 값을 파싱하지 못하는 문제

0

111

1

강사님 GETDEL 관련해서 질문 있습니다

0

120

2

비밀번호를 걸고 실행된 레디스 서버에 lua 스크립트를 등록하는 경우

0

100

2

보안 설정을 한 수강생들은 Connection Settings에 비밀번호를 넣어야 추가되네요

0

80

2

Redis Container 해킹

0

133

1