Files
document-haness/docs/clean-architecture-backend-template/final/evidence/raw/a19-f006-messaging-cloudevents.txt
T
DongHyeonkaandClaude Opus 5 b2963105a8 docs(keycloak-session-store): import the session-storage lab as a new project
The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.

Follows the import procedure in README.md.

  source/     the originating repository verbatim — 78 documents, 28 SVGs,
              8 manifests, plus .source-revision recording the commit
  final/      the SSOT
    document.md   729 lines written from the 29 experiment documents, not
                  concatenated: what was predicted, what was measured, and
                  where the measurement itself was wrong
    evidence/raw    125 outputs, flattened to <experiment>__<file> because
                    the originals collided (01-baseline.txt appeared three
                    times) and the audit only globs the top level
    evidence/meta   one per raw file; command and exitCode are null and the
                    README says why rather than inventing them
    evidence/browser  22 captures
    assets/       three diagrams through techviz
    .techviz/     their VizSpecs

A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.

Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.

verify-pipeline.py passes. audit-records.py reports no issues.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 22:51:59 +09:00

76 lines
5.8 KiB
Plaintext

# 이 leaf 가 담은 파일과 줄 수
main CloudEventExtensions.java 24 줄
main CloudEventMapper.java 33 줄
main DefaultCloudEventMapper.java 171 줄
test CloudEventMappingTest.java 162 줄
# 출하 산출물에 들어간다는 것을 무엇이 말하는가
modules.json runtime_memberships=['app-bootstrap']
messaging-spring-boot-starter/build.gradle:24 // Wired by the auto-configurations and never named in an adopter's source.
messaging-spring-boot-starter/build.gradle:25 implementation project(':messaging:messaging-schema-json')
messaging-spring-boot-starter/build.gradle:26 implementation project(':messaging:messaging-cloudevents')
app-bootstrap/build/architecture/runtime-project-closure.txt:18:messaging-cloudevents
app-bootstrap/gradle.lockfile:101:io.cloudevents:cloudevents-api:4.0.1=productionRuntimeClasspath,runtimeClasspath,sampleOffTestRuntimeClasspath,testRuntimeClasspath
app-bootstrap/gradle.lockfile:102:io.cloudevents:cloudevents-core:4.0.1=productionRuntimeClasspath,runtimeClasspath,sampleOffTestRuntimeClasspath,testRuntimeClasspath
# DefaultCloudEventMapper 를 만드는 자리, 그리고 계약 타입을 참조하는 main 파일
test · CloudEventMappingTest.java:30 private final DefaultCloudEventMapper mapper = new DefaultCloudEventMapper();
messaging/messaging-cloudevents/src/main/java/dev/caskeleton/messaging/cloudevents/CloudEventExtensions.java
messaging/messaging-cloudevents/src/main/java/dev/caskeleton/messaging/cloudevents/CloudEventMapper.java
messaging/messaging-cloudevents/src/main/java/dev/caskeleton/messaging/cloudevents/DefaultCloudEventMapper.java
# CloudEvent 라는 이름을 main 자바 소스 전체에서 찾으면
messaging/messaging-cloudevents/src/main/java/dev/caskeleton/messaging/cloudevents/CloudEventExtensions.java
messaging/messaging-cloudevents/src/main/java/dev/caskeleton/messaging/cloudevents/CloudEventMapper.java
messaging/messaging-cloudevents/src/main/java/dev/caskeleton/messaging/cloudevents/DefaultCloudEventMapper.java
설정 클래스 계수 :
이름이 *AutoConfiguration.java 인 main 클래스 : 36
@Configuration 을 단 main 클래스 : 176
AutoConfiguration.imports 등재 클래스 : 14
그 어느 집합에서도 CloudEvent 를 언급하는 것 : 0 (위 main 전수 목록이 leaf 세 파일뿐이므로)
META-INF/services 파일 수 : 0
# 원문이 28 로 적은 수의 출처
starter autoconfigure 패키지 파일 수 : 28
그중 이름이 *AutoConfiguration 인 것 : 6
# 매핑의 반대편 — CanonicalEnvelopeHeaders 를 쓰는 main 코드와 그 성격
main · KafkaHeaderMapper.java:90 if (CanonicalEnvelopeHeaders.restatesEnvelopeField(name.value())) {
main · KafkaHeaderMapper.java:141 if (CanonicalEnvelopeHeaders.restatesEnvelopeField(header.key())) {
main · RabbitHeaderMapper.java:102 if (CanonicalEnvelopeHeaders.restatesEnvelopeField(name.value())) {
main · RabbitHeaderMapper.java:158 if (value != null && !CanonicalEnvelopeHeaders.restatesEnvelopeField(name)) {
그 넷은 값을 싣는 곳이 아니라 거절·건너뛰기 판정이다 :
KafkaHeaderMapper.java:88 .forEach(
KafkaHeaderMapper.java:89 (name, value) -> {
KafkaHeaderMapper.java:90 if (CanonicalEnvelopeHeaders.restatesEnvelopeField(name.value())) {
KafkaHeaderMapper.java:91 throw new dev.caskeleton.messaging.api.error.MessagingConfigurationException(
KafkaHeaderMapper.java:92 "RESERVED_HEADER_FORGED",
실제로 헤더를 싣는 줄은 따로 있다 :
KafkaHeaderMapper.java:36 put(headers, ReservedHeaders.MESSAGE_ID, envelope.messageId().value().toString());
KafkaHeaderMapper.java:37 put(headers, ReservedHeaders.MESSAGE_TYPE, envelope.messageType().value());
KafkaHeaderMapper.java:42 put(headers, ReservedHeaders.PRODUCER, envelope.producer().value());
KafkaHeaderMapper.java:43 put(headers, ReservedHeaders.PRODUCED_AT, envelope.producedAt().toString());
KafkaHeaderMapper.java:44 put(headers, ReservedHeaders.CONTENT_TYPE, envelope.contentType().value());
# 그 네 호출 중 조립되는 경로에 있는 것
main · KafkaDeliveryMapper.java:42 this(new KafkaHeaderMapper());
main · KafkaPublishMapper.java:34 this(new KafkaHeaderMapper());
test · KafkaEnvelopeRoundTripTest.java:39 private final KafkaHeaderMapper headerMapper = new KafkaHeaderMapper();
test · KafkaHeaderMapperTest.java:27 private final KafkaHeaderMapper mapper = new KafkaHeaderMapper();
test · ReservedHeaderForgeryTest.java:36 private final KafkaHeaderMapper mapper = new KafkaHeaderMapper();
main · RabbitDeliveryMapper.java:41 this(new RabbitHeaderMapper());
main · RabbitPublishMapper.java:22 this(new RabbitHeaderMapper());
test · RabbitEnvelopeRoundTripTest.java:43 private final RabbitHeaderMapper headerMapper = new RabbitHeaderMapper();
test · RabbitRuntimeTest.java:126 RabbitHeaderMapper headers = new RabbitHeaderMapper();
test · RabbitRuntimeTest.java:140 RabbitHeaderMapper headers = new RabbitHeaderMapper();
test · RabbitRuntimeTest.java:231 new RabbitHeaderMapper().toProperties(envelope(new byte[] {1})));
그 위의 transport 를 만드는 main 코드 :
main · KafkaMessagingAutoConfiguration.java:168 return new dev.caskeleton.messaging.kafka.KafkaMessagingTransport("kafka", 1L, producer);
RabbitMessagingTransport : main 생성 0 건
# 상호운용을 약속한 문서와, 약속이 없는 문서
35:| CloudEvents | Domain·Integration Event에 선택 가능한 1.0.2 compatible profile을 제공한다. |
756:## 15. CloudEvents Profile
docs/messaging/support-matrix.md CloudEvents 언급 0 건
docs/messaging/configuration-reference.md CloudEvents 언급 0 건