GraphQL APIs with Spring Boot · 강의

구독 필터링과 확장

기본적인 구독에서 나아가 서버 측 필터링으로 각 클라이언트가 관심 있는 이벤트만 전달하고, 여러 Spring Boot 인스턴스에서 구독을 확장하세요.

레슨 4/413개 단계

구독 필터링과 확장은(는) CoddyKit의 무료 GraphQL APIs with Spring Boot 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 GraphQL APIs with Spring Boot 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. GraphQL APIs with Spring Boot 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

Not Every Client Wants Everything

A naive subscription pushes every event to every subscriber. But a user watching order #42 does not care about order #99.

Filtering ensures each subscriber only receives the events relevant to them.

Subscription Arguments

Subscriptions can take arguments just like queries. A client passes the ID it cares about, and the server uses it to filter the stream.

type Subscription {
  orderUpdated(orderId: ID!): Order
}

Reactive Streams Recap

Spring for GraphQL represents a subscription as a Reactor Flux, an asynchronous stream of items. Filtering is just stream operations applied to that Flux.

Filtering with filter()

Apply .filter() to the publisher so only matching events flow to the subscriber.

@SubscriptionMapping
public Flux<Order> orderUpdated(@Argument String orderId) {
    return orderPublisher.flux()
        .filter(o -> o.getId().equals(orderId));
}

A Shared Event Sink

Use a Reactor Sinks.Many as a hub. Your service emits events into it, and every subscription builds a filtered view of its stream.

private final Sinks.Many<Order> sink =
    Sinks.many().multicast().onBackpressureBuffer();

Emitting Events

When your business logic changes an order, push it into the sink so all matching subscribers are notified.

public void updateOrder(Order order) {
    repository.save(order);
    sink.tryEmitNext(order);
}

The Scaling Problem

An in-memory sink only knows about events on its own JVM. With multiple Spring Boot instances behind a load balancer, an event emitted on instance A never reaches subscribers connected to instance B.

External Pub/Sub to the Rescue

Route events through an external broker like Redis Pub/Sub or Kafka. Every instance publishes to and subscribes from the broker, so all instances see all events.

Bridging Redis to a Flux

Subscribe to a Redis channel and feed incoming messages into the same Flux your GraphQL subscription exposes, unifying local and remote events.

redisTemplate.listenToChannel("orders")
    .map(msg -> deserialize(msg.getMessage()))
    .subscribe(sink::tryEmitNext);

Backpressure and Cleanup

Slow clients can fall behind. Use a bounded buffer or drop strategy, and ensure resources are released when a client disconnects so memory does not leak.

Sinks.many().multicast().onBackpressureBuffer(1024, false);

Best Practices

Keep subscriptions efficient:

  • Filter on the server, never push everything
  • Use an external broker to scale across instances
  • Handle backpressure for slow consumers
  • Clean up on disconnect to avoid leaks

Quick Check

Test your subscription scaling knowledge.

Recap

You scaled real-time subscriptions:

  • Filter streams with .filter() using subscription arguments
  • Use a Sinks.Many hub to broadcast events
  • Route through Redis or Kafka to scale across instances
  • Manage backpressure and clean up on disconnect

Filtered, distributed subscriptions deliver the right data at scale.

무료로 시작

AI 튜터와 함께 GraphQL APIs with Spring Boot을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
12
레슨
48

자주 묻는 질문

“구독 필터링과 확장” 강의는 무료인가요?

네 — “구독 필터링과 확장” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 GraphQL APIs with Spring Boot 강의 전체를 잠금 해제할 수 있습니다. GraphQL APIs with Spring Boot 강의에는 총 4개의 강의가 포함되어 있습니다.

“구독 필터링과 확장”에서 뭘 배우나요?

기본적인 구독에서 나아가 서버 측 필터링으로 각 클라이언트가 관심 있는 이벤트만 전달하고, 여러 Spring Boot 인스턴스에서 구독을 확장하세요. 브라우저에서 직접 실행하는 실습 코드로 GraphQL APIs with Spring Boot을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

GraphQL APIs with Spring Boot을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 GraphQL APIs with Spring Boot은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“구독 필터링과 확장” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 GraphQL APIs with Spring Boot 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 GraphQL APIs with Spring Boot 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. GraphQL 구독 이해하기
  2. 실시간 업데이트 구현
  3. Spring에 WebSockets 통합하기
  4. 구독 필터링과 확장
← GraphQL APIs with Spring Boot(으)로 돌아가기