From 39049e98cc98f56579138c6dbe1279cc05690ec9 Mon Sep 17 00:00:00 2001 From: BK202503 <199436087+BK202503@users.noreply.github.com> Date: Thu, 25 Jun 2026 00:17:22 +0900 Subject: [PATCH] Add Spring Cloud AWS section with PR #1640 (GH-1143 IGNORE QueueNotFoundStrategy) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 신규: - contributions/spring-cloud-aws.html — Spring Cloud AWS 기여 개요 페이지 - contributions/spring-cloud-aws/1640.html — GH-1143 IGNORE QueueNotFoundStrategy 소스 코드 PR 상세 (typed signal 설계, 회귀 테스트, FAIL/CREATE/RetryableTopic 무영향) 업데이트: - index.html — nav dropdown에 Spring Cloud AWS 섹션 추가; #contributions에 새 group article (badge "SQS QueueNotFoundStrategy"); meta keywords에 Spring Cloud AWS / awspring / QueueNotFoundStrategy / GH-1143 추가 - contributions/* 17개 페이지 nav dropdown 일괄 갱신 — Spring Cloud AWS 섹션 추가 + 누락돼 있던 Spring Kafka #4512 항목도 같이 보강 - sitemap.xml — 신규 두 URL 등록 (priority 0.8) 체크리스트: - PII grep: 0건 - BK202503/* 레포 4개 모두 public - awspring/spring-cloud-aws upstream public 확인 --- contributions/apache-kafka.html | 4 + contributions/apache-kafka/22533.html | 4 + contributions/apache-kafka/22534.html | 4 + contributions/apache-kafka/22535.html | 4 + contributions/apache-kafka/22536.html | 4 + contributions/infinispan.html | 4 + contributions/infinispan/17624.html | 4 + contributions/mapstruct.html | 4 + contributions/mapstruct/4074.html | 4 + contributions/spring-ai.html | 4 + contributions/spring-ai/6317.html | 4 + contributions/spring-cloud-aws.html | 196 ++++++++++++++++++++++ contributions/spring-cloud-aws/1640.html | 201 +++++++++++++++++++++++ contributions/spring-kafka.html | 3 + contributions/spring-kafka/4469.html | 3 + contributions/spring-kafka/4505.html | 3 + contributions/spring-kafka/4512.html | 3 + contributions/spring-modulith.html | 4 + contributions/spring-modulith/1714.html | 4 + index.html | 27 ++- sitemap.xml | 18 ++ 21 files changed, 505 insertions(+), 1 deletion(-) create mode 100644 contributions/spring-cloud-aws.html create mode 100644 contributions/spring-cloud-aws/1640.html diff --git a/contributions/apache-kafka.html b/contributions/apache-kafka.html index 7cf4fa2..45ccf62 100644 --- a/contributions/apache-kafka.html +++ b/contributions/apache-kafka.html @@ -76,6 +76,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/apache-kafka/22533.html b/contributions/apache-kafka/22533.html index e113b10..dcd46cb 100644 --- a/contributions/apache-kafka/22533.html +++ b/contributions/apache-kafka/22533.html @@ -67,6 +67,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/apache-kafka/22534.html b/contributions/apache-kafka/22534.html index c762185..7774a16 100644 --- a/contributions/apache-kafka/22534.html +++ b/contributions/apache-kafka/22534.html @@ -67,6 +67,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/apache-kafka/22535.html b/contributions/apache-kafka/22535.html index 0158f1a..e3d09ca 100644 --- a/contributions/apache-kafka/22535.html +++ b/contributions/apache-kafka/22535.html @@ -67,6 +67,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/apache-kafka/22536.html b/contributions/apache-kafka/22536.html index 710349e..b6bb31b 100644 --- a/contributions/apache-kafka/22536.html +++ b/contributions/apache-kafka/22536.html @@ -67,6 +67,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/infinispan.html b/contributions/infinispan.html index 5844e54..e85eeae 100644 --- a/contributions/infinispan.html +++ b/contributions/infinispan.html @@ -75,6 +75,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/infinispan/17624.html b/contributions/infinispan/17624.html index 44bf8d8..0b5b1aa 100644 --- a/contributions/infinispan/17624.html +++ b/contributions/infinispan/17624.html @@ -67,6 +67,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/mapstruct.html b/contributions/mapstruct.html index 9a0335e..27e65ac 100644 --- a/contributions/mapstruct.html +++ b/contributions/mapstruct.html @@ -75,6 +75,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/mapstruct/4074.html b/contributions/mapstruct/4074.html index 9f357ae..146b282 100644 --- a/contributions/mapstruct/4074.html +++ b/contributions/mapstruct/4074.html @@ -76,6 +76,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/spring-ai.html b/contributions/spring-ai.html index bc6043c..dccdf11 100644 --- a/contributions/spring-ai.html +++ b/contributions/spring-ai.html @@ -75,6 +75,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/spring-ai/6317.html b/contributions/spring-ai/6317.html index e534bea..3f1645c 100644 --- a/contributions/spring-ai/6317.html +++ b/contributions/spring-ai/6317.html @@ -67,6 +67,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/spring-cloud-aws.html b/contributions/spring-cloud-aws.html new file mode 100644 index 0000000..c4083e4 --- /dev/null +++ b/contributions/spring-cloud-aws.html @@ -0,0 +1,196 @@ + + + + + + + Spring Cloud AWS 기여 — SQS IGNORE QueueNotFoundStrategy | 김빌 (Bill Kim) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+

Contribution · Spring Cloud AWS · AWS SDK v2

+

Spring Cloud AWS — SQS IGNORE QueueNotFoundStrategy

+

+ Spring Cloud AWS 3.x의 SQS 컨테이너에 IGNORE QueueNotFoundStrategy를 추가해, 큐가 없을 때 listener를 조용히 skip하고 application context 부팅을 차단하지 않도록 복원했습니다. spring-cloud-starter-aws-messaging (2.x) 의 기본 동작이었으나 3.x로 넘어오면서 사라져 다수의 사용자가 v2→v3 migration pain으로 보고한 항목입니다. +

+
+
+ +
+
+

문제 — GH-1143

+

+ 3.x의 기존 두 전략은 FAIL (큐 없으면 throw, application startup 차단)과 CREATE (큐 없으면 CreateQueue 호출, sqs:CreateQueue IAM 필요 + 외부 관리 큐 설정과 충돌 가능). 둘 다 안 맞는 케이스가 흔함 — optional feature queue, multi-region rollout에서 일부 region에만 queue가 만들어진 상태, deployment마다 queue 존재 여부가 다른 케이스. 이 때 listener는 그냥 skip하고 앱은 정상 부팅돼야 함. 2.x의 spring-cloud-starter-aws-messaging는 이게 기본 동작이었음. +

+ +

수정 — typed signal 도입

+

+ 메인테이너(@tomazfernandes)가 명시한 우려: "graciously handle the error thrown by the QueueAttributesResolver and interrupting container startup". 해결은 새 exception 타입을 신호로 사용해 source가 distinguish할 수 있게 하는 방향: +

+
    +
  • QueueNotFoundException 클래스 (QueueAttributesResolvingException의 subtype) 도입. 기존 catch 사이트는 parent 타입으로 그대로 잡힘.
  • +
  • QueueAttributesResolver.handleException: QueueDoesNotExistException + IGNORE일 때만 새 exception으로 failed future. CREATE / FAIL 경로 unchanged.
  • +
  • QueueAttributesResolver.wrapException: 새 exception만 unwrap 통과 (generic 재포장 방지).
  • +
  • AbstractSqsMessageSource.doStart: CompletionException cause가 새 exception이면 skipped 플래그 + warning + early return.
  • +
  • AbstractSqsMessageSource.doPollForMessages: skipped면 empty future 즉시 반환.
  • +
+ +

회귀 테스트

+

+ QueueAttributesResolverIntegrationTests#shouldIgnoreQueueWhenStrategyIsIgnore 추가. LocalStack에 존재하지 않는 큐 + IGNORE 전략 → QueueNotFoundException (cause = QueueDoesNotExistException) surface 검증. 같은 클래스의 FAIL/CREATE 기존 6개 테스트 모두 그대로 통과 — RetryableTopic 시나리오 무영향. +

+ +

PR 목록

+ + +

관련 자료

+ +
+
+ +
+ + + + + + + diff --git a/contributions/spring-cloud-aws/1640.html b/contributions/spring-cloud-aws/1640.html new file mode 100644 index 0000000..1ae3f17 --- /dev/null +++ b/contributions/spring-cloud-aws/1640.html @@ -0,0 +1,201 @@ + + + + + + + Spring Cloud AWS PR #1640 — GH-1143 Add IGNORE QueueNotFoundStrategy (open) | 김빌 (Bill Kim) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+

Spring Cloud AWS · open

+

PR #1640 — GH-1143: Add IGNORE QueueNotFoundStrategy option for SQS

+

+ Spring Cloud AWS 3.x의 QueueNotFoundStrategy에 세 번째 옵션 IGNORE를 추가. SQS 큐가 startup 시점에 없을 때 warning 로그 + listener container의 source를 조용히 skip해 application context 부팅을 막지 않음. 2.x spring-cloud-starter-aws-messaging의 기본 동작을 3.x에 복원하는 패치. 4명 이상이 v2→v3 migration pain으로 보고한 이슈 #1143, 메인테이너 직접 "PRs welcome" 표명. +

+ +
+
+ +
+
+

맥락

+

+ Spring Cloud AWS 3.x의 QueueNotFoundStrategy는 두 가지 — FAIL (큐 없으면 throw, application startup 차단) 또는 CREATE (큐 없으면 CreateQueue 호출, sqs:CreateQueue IAM 필요 + 외부 관리 큐 설정과 충돌 가능). 둘 다 안 맞는 사용 케이스가 있음 — 예: optional feature queue, multi-region rollout에서 큐가 아직 안 만들어진 상태, deployment마다 queue 존재 여부가 다른 경우. 이런 경우 listener는 그냥 skip하고 앱은 정상 부팅돼야 함. 2.x의 spring-cloud-starter-aws-messaging는 이게 기본 동작이었는데 3.x에서 사라지면서 migration pain이 생김 (이슈에 v2→v3 사용자 4명+ 보고). +

+ +

설계 — typed signal로 분리

+

+ 메인테이너 (@tomazfernandes) 의 우려: "graciously handle the error thrown by the QueueAttributesResolver and interrupting container startup". 핵심은 IGNORE 신호를 generic resolver 에러와 어떻게 분리해서 source가 catch할 수 있게 만드느냐. 답은 dedicated exception 타입: +

+
    +
  • 새 클래스 QueueNotFoundExceptionQueueAttributesResolvingException의 subtype. 기존 catch 사이트는 그대로 동작 (parent 타입으로 잡힘), source는 subtype으로 distinguish 가능.
  • +
  • QueueAttributesResolver.handleException: QueueDoesNotExistException + IGNORE일 때 QueueNotFoundException으로 failed future 반환. CREATE path는 unchanged.
  • +
  • QueueAttributesResolver.wrapException: QueueNotFoundException만 unwrap 통과 (generic 재포장 방지). 다른 모든 exception은 종전 그대로 QueueAttributesResolvingException으로 wrap.
  • +
  • AbstractSqsMessageSource.doStart: CompletionException cause가 QueueNotFoundException이면 skipped 플래그 set + warning + early return (queueAttributes/queueUrl 안 set, conversion context 안 설정).
  • +
  • AbstractSqsMessageSource.doPollForMessages: skipped면 즉시 CompletableFuture.completedFuture(emptyList()) — polling loop은 source 라이프타임 동안 no-op.
  • +
+ +

FAIL / CREATE / RetryableTopic은 손 안 댐

+

+ 새 IGNORE constant만 새 branch를 탐. wrapExceptionQueueNotFoundException 분기는 IGNORE에서만 생성되므로 다른 strategy / 다른 exception 경로에서는 종전과 동일한 QueueAttributesResolvingException이 떨어짐. 기존 회귀 테스트 6개 모두 동일 exception 타입을 그대로 받음을 LocalStack 통합 테스트로 확인. +

+ +

회귀 테스트

+

+ QueueAttributesResolverIntegrationTests#shouldIgnoreQueueWhenStrategyIsIgnore 추가. 기존 #shouldNotCreateQueue 패턴 그대로 사용, LocalStack에 존재하지 않는 큐에 IGNORE 전략을 적용했을 때 QueueNotFoundException (cause = QueueDoesNotExistException)이 surface됨을 검증. 같은 클래스의 7개 테스트(FAIL/CREATE 케이스 포함) 모두 통과. +

+ +

속성 바인딩

+

+ SqsProperties에서 QueueNotFoundStrategy enum을 직접 노출하고 있어 코드 변경 없이 spring.cloud.aws.sqs.queue-not-found-strategy=IGNORE로 바로 설정 가능. sqs.adoc 표 항목에 IGNORE 동작 설명 한 줄 추가. +

+ +

관련 자료

+ +
+
+ +
+ + + + + + + diff --git a/contributions/spring-kafka.html b/contributions/spring-kafka.html index ab4b8fa..dcf3a4b 100644 --- a/contributions/spring-kafka.html +++ b/contributions/spring-kafka.html @@ -77,6 +77,9 @@ PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/spring-kafka/4469.html b/contributions/spring-kafka/4469.html index 4a2adac..190ad62 100644 --- a/contributions/spring-kafka/4469.html +++ b/contributions/spring-kafka/4469.html @@ -77,6 +77,9 @@ PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/spring-kafka/4505.html b/contributions/spring-kafka/4505.html index 978161c..47e6a4b 100644 --- a/contributions/spring-kafka/4505.html +++ b/contributions/spring-kafka/4505.html @@ -76,6 +76,9 @@ PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/spring-kafka/4512.html b/contributions/spring-kafka/4512.html index 5224957..57d8892 100644 --- a/contributions/spring-kafka/4512.html +++ b/contributions/spring-kafka/4512.html @@ -76,6 +76,9 @@ PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/spring-modulith.html b/contributions/spring-modulith.html index 28d1a74..18327b1 100644 --- a/contributions/spring-modulith.html +++ b/contributions/spring-modulith.html @@ -75,6 +75,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/contributions/spring-modulith/1714.html b/contributions/spring-modulith/1714.html index 42510ca..40b1bda 100644 --- a/contributions/spring-modulith/1714.html +++ b/contributions/spring-modulith/1714.html @@ -67,6 +67,10 @@ Spring Kafka — overview PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 + PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 diff --git a/index.html b/index.html index 9321ebe..b7f1ff0 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,7 @@ 김빌 (Bill Kim) | Open Source Developer - + @@ -147,6 +147,9 @@ PR #4469 · GH-4465 (merged) PR #4505 · GH-4504 PR #4512 · GH-4504 (amplification) + + Spring Cloud AWS — overview + PR #1640 · GH-1143 Spring Modulith — PR #1714 Spring AI — PR #6317 @@ -308,6 +311,28 @@

Spring Kafka

+
+
+

Spring Cloud AWS

+ SQS QueueNotFoundStrategy +
+

+ Spring Cloud AWS 3.x SQS 컨테이너에 IGNORE QueueNotFoundStrategy를 추가해, 큐가 없을 때 listener를 조용히 skip하고 application context 부팅을 차단하지 않도록 복원했습니다. 2.x spring-cloud-starter-aws-messaging의 기본 동작을 typed exception을 도입해 FAIL / CREATE / RetryableTopic 경로를 손대지 않고 분리해 적용했습니다. +

+

자세히 보기 →

+ +
+

Spring Modulith

diff --git a/sitemap.xml b/sitemap.xml index 87b789e..ce61d11 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -128,6 +128,24 @@ + + https://bk202503.github.io/contributions/spring-cloud-aws.html + monthly + 0.8 + + + + + + + https://bk202503.github.io/contributions/spring-cloud-aws/1640.html + monthly + 0.8 + + + + + https://bk202503.github.io/contributions/spring-modulith.html monthly