inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지

패턴 09: 실시간 시스템 알림 - FastAPI와 Pub/Sub 연동

pub/sub의 연결 객체에 대해 질문 드립니다.

22

bluebamus

작성한 질문수 87

0

강의 내용에 보면

  1. 클라이언트 수만큼 pub/sub 연결을 하면 안된다.

  2. redis 구독을 소수의 연결로 유지하고 클라이언트들에게 브로드캐스트 하는 구조로 사용한다.

  3. 애플리케션 시작 시 생성하고 서버 종료될 때 구독을 해제한다.

이렇게 설명을 주시는데 이해가 잘 되지 않아 질문을 드립니다.


  1. 1번 2번에 대해 대부분 채팅과 관련하여 메시지가 소실되도 무방한 구조에서 pub/sub의 브로드캐스팅 방법을 사용하는 것으로 알고 있습니다.
    이전에 언급하신 Redis Lock에서 사용하는 경우는 애초 접근하는 서버가 수십~ 수백대일 가능성이 있습니다.
    채팅의 경우도 유투브 라이브의 경우 수천 수만명의 접속일 가능성이 있습니다.
    서버의 가용 능력에 따라 분산 설계가 있을 수 있겠지만 기본적으로 이러한 요구에서는 1:N이 됩니다.
    어떤 목적과 이유로 1번과 관련하여 말씀을 하신건지 알고 싶습니다. 하나의 pub/sub 연결을 여러 채널이 공유해서 사용하는 것이기에 pool에 대한 이야기는 아닐 것이라 생각 합니다.

    혹시 예제는 스웨거에서 요청할 때마다 pub/sub을 생성해서 사용하는 것이기에 애초에 하나의 pub/sub 연결로 사용하는 방안으로 코드를 설계해야 한다는 의미일까요?

    하지만 그럼에도 클라이언트 수나 구독을 소수로 유지해야 하는 의미는 pool을 의미하시는 건지 서버 자원 때문인지 어떤 이유에서인지에 대한 이해가 잘 되지 않습니다.

    3. 3번에서 하는 말이 하나의 pub/sub 연결을 시작시 생성하여 모든 채널에 대해 공유 사용하고 종료시 구독을 해제하도록 하라는 의미로 보면 될런지요


아키텍처 redis FastAPI

답변 2

0

코딩하는기술사

안녕하세요. 😊

제가 언급한 "클라이언트 수만큼 pub/sub 연결을 하면 안된다."라는 말은 Redis 클라이언트가 아니라 브라우저를 말한 겁니다.

아래와 같은 구조에서

[사용자(브라우저) - 애플리케이션 - Redis]

새로운 사용자(브라우저)가 접속할 때마다, 애플리케이션에서 Redis로 pub/sub 연결을 하기 때문에 문제라고 한 것입니다.

그래서 정상적인 구조는

애플리케이션에서 Redis로의 pub/sub 연결은 이 애플리케이션의 생명 주기 동안 1개만 유지하고, 여러 사용자(여러 브라우저)에게는 애플리케이션 차원에서 큐(Queue)와 클라이언트 목록으로 관리해서 메시지를 나눠주는 방식(Fan-out)을 사용합니다.
(바로 다음 강의 [패턴 09-개선: FastAPI + Pub/Sub 연동 구조 개선] 에서 개선된 샘플을 제공하고 있습니다.

즉, Redis 구독 연결은 애플리케이션(서버 프로세스)당 1개로 고정하고, 그 연결로 받은 메시지를 애플리케이션 메모리 안에서 각 브라우저 연결(Queue)에 전달해주는 거죠. 그래서 브라우저가 100명이든 10,000명이든 Redis 입장에서 보는 구독 연결은 항상 1개입니다.

제가 표현을 단순히 Redis 클라이언트라고만 해서 혼란이 있었나 봅니다. 😊


0

bluebamus

설명의 이해에 오해가 있었던것 같습니다.

사실 이후 코드를 보고 의도를 이해 했지만, 혹시나 다른 의미가 있었나 싶어

질문을 유지했었습니다.

정리하자면 접속 시마다 연결을 생성하고 종료하는 것이 아닌,

하나의 연결을 서비스의 시작과 종료 사이에 유지하여

하나의 서버에서 redis의 커넥션 증가를 막고

설계적으로 하나의 커넥션으로 관리할 수 있는 방법을 제시하는 것으로 이해가 됩니다.

0

코딩하는기술사

네. 맞습니다.

  • 애플리케이션과 Redis Pub/Sub 연결을 최소한으로 유지하고

  • 사용자(브라우저)와 애플리케이션의 연결 수는 Redis 연결과 무관하게 처리한다.

입니다. 😊

0

인프런 AI 인턴

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

질문하신 내용은 Redis Pub/Sub 연결 수와 애플리케이션 서버의 브로드캐스팅 구조에 관한 내용으로, 아래 기존 답변이 가장 유사합니다.

Redis와 Kafca의 Pub/Sub 차이

Redis Pub/Sub은 구독 중인 연결에만 실시간으로 메시지를 전달하며, 연결이 끊겨 있으면 메시지가 유실될 수 있습니다. 따라서 일반적으로는 클라이언트마다 Redis Pub/Sub 연결을 직접 생성하는 방식이 아니라, 애플리케이션 서버가 소수의 Redis 구독 연결을 유지하고 수신한 메시지를 해당 서버에 연결된 클라이언트들에게 브로드캐스트합니다.

구조를 간단히 표현하면 다음과 같습니다.

Redis Publisher
      ↓
애플리케이션 서버의 소수 Redis Subscriber 연결
      ↓
각 서버 내부의 WebSocket/SSE 클라이언트들에게 브로드캐스트

여기서 “소수의 연결”이라는 의미는 전체 서버에서 Redis 연결을 하나만 사용한다는 뜻이 아니라, 애플리케이션 서버 인스턴스마다 필요한 수의 구독 연결을 유지한다는 의미에 가깝습니다.

예를 들어 애플리케이션 서버가 10대라면 각 서버가 Redis Pub/Sub 연결을 하나씩 유지하여 총 10개의 구독 연결을 사용할 수 있습니다. 하나의 Redis 연결에서 여러 채널을 구독하는 것도 가능합니다. 클라이언트가 수천 명이라고 해서 Redis 연결도 수천 개가 되어야 하는 것은 아닙니다.

또한 애플리케이션 시작 시 구독 연결을 생성하고, 서버 종료 시 구독을 해제하는 방식이 적절합니다. Swagger 요청마다 Pub/Sub 연결을 새로 만드는 예제라면, 이는 설명을 위한 단순한 예제일 수 있으며 실제 서비스에서는 연결을 재사용하는 구조로 개선하는 것이 좋습니다.

Redis Lock이나 Redlock에서 사용하는 Redis 연결 수와 Pub/Sub 브로드캐스트 연결 수는 서로 다른 문제입니다. 분산 락은 여러 Redis 노드에 락을 요청하기 위한 연결이 필요할 수 있지만, Pub/Sub은 메시지를 수신하고 애플리케이션 서버 내부의 클라이언트에게 전달하기 위한 별도의 구독 연결 구조로 이해하시면 됩니다.

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

매수 실행 시점 관련

0

6

0

Opus/Sonnet 버전 관련 문의

1

21

2

부하 테스트 시 설정 관련 질문드립니다

1

30

1

섹션2 질문이요

1

21

2

섹션 2

0

17

1

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

0

32

2

섹션1.9 질문입니다!

1

32

3

LLM 서비스의 신뢰성

1

34

1

인기 게시판 목록(Sorted set)

0

78

2

레디스로 재고 관리

0

86

2

Lock 해제 문의 드립니다.

0

85

2

레디스로 대기큐 구현 질문

0

121

2

API LIMIT

0

74

1

캐시 무효화

0

75

2

Redis와 Kafca의 Pub/Sub 차이

0

96

2

너무 흥미진진합니다..

1

97

2

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

0

124

2

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

0

123

2

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

0

102

2

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

0

163

1

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

0

160

2

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

0

144

2

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

0

108

2

Redis Container 해킹

0

150

1