Slide 1

Slide 1 text

出出出出出出出出出出出出出出 Spring Boot + Kafka 2026.05.30 出出出出出出出 出出 出出 © Demae - can Co., Ltd. API 出 出出出出出出出

Slide 2

Slide 2 text

出出出出 出出出出 • 出出 出出 (Yuji Nakagawa) • 2016 出 4 出出出出出出出出出出出出出出出 Java / Spring Boot 出出出出出出出出出出出出出出出出 出出出出出出出出出出出出出出 2025 出 7 出出出出 出出出出出出 JOIN 出出出出出出出出出出出出出出 出出出出出出出出出出出出 • 出出出出出出出出出出出出出出出出出出出出出出出 出出出出出出出出出出出出出出出出出出出出出出出 出出出出出出 • 出出出出出出出出出出出出 2 © Demae - can Co., Ltd.

Slide 3

Slide 3 text

出出出出 出出出出出 • 出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 Kafka 出出出出出出出出出出出出出 • 出出出出出 • Java, Spring Boot, Kafka, etc... • 出出出出 • Java, Spring Boot 出出出出出出出出出出出出出出出 • Kafka 出出出出出出出出出出出出出 • etc... 出出出出出出出出出出出出出出出出 3 © Demae - can Co., Ltd.

Slide 4

Slide 4 text

出出 01 出出出出出出出出出出出出出出 02 出出出出出出 03 出出出出出出出出出出出出 04 出出出出出出出出出出出出 05 出出出出出出出出出 06 出出出出 API 出出出出出出出出 4 © Demae - can Co., Ltd.

Slide 5

Slide 5 text

出出出出出出出出出出出出出出出出 出出出 • Web 出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 • 2000 出 10 出出出出出出出出出出出出出 • 2025 出 8 出出出出出出出出出出出出出出 455 出出出出出 6,074 出出出出出 5 © Demae - can Co., Ltd.

Slide 6

Slide 6 text

出出出出出出出出出出出出出出出出 出出出出出出出出出出 出出出出 出出 出出出 出出出出出 出出出出 出出出出出 6 © Demae - can Co., Ltd.

Slide 7

Slide 7 text

出出 01 出出出出出出出出出出出出出出 02 出出出出出出 03 出出出出出出出出出出出出 04 出出出出出出出出出出出出 05 出出出出出出出出出 06 出出出出 API 出出出出出出出出 7 © Demae - can Co., Ltd.

Slide 8

Slide 8 text

出出出出出出 API 出出出出出出出出 8 出出 API 出 Subscriber 1. 出出出出出出出出出出 API 2. 出出出出出出出出出出 API 3. 出出出出出出出出出出出出 API 4. 出出出出出出出出出出出出出出出出 API • 出出出出出出出出出出出出出出出出 Subscriber 5. 出出出出出出出出出出出出出出出出出 API 6. 出出出出出出出出出出出出出 API 7. 出出出出出出出出出出出出出出出 API 8. 出出出出出出出出出出出出出出出 API 8 © Demae - can Co., Ltd.

Slide 9

Slide 9 text

出出出出出出 API 出出出出出出出出 出出 API 出出出出出出出出出出出出出出出出 9 © Demae - can Co., Ltd.

Slide 10

Slide 10 text

出出出出出出 API 出出出出出出出出 出出出出出出出 出出出出出出出 API 出出出出出出出出出出出出出 API 出出出 • 出出出出出出出出出出出出出出出出 14 出 297 出 655 出 89 出 401 出 10 © Demae - can Co., Ltd.

Slide 11

Slide 11 text

出出出出出出 API 出出出出出出出出 出出出出出出出 出出出出出出出 API 出出出出出出出出出出出出出 API 出出出 • 出出出出出出出出出出出出出出出出 • 出出出出出出出出出出出出出出出 • etc... 14 出 297 出 655 出 出出出出出 出出出出出出出出 × 出出出出出出出出出 : 出 56,500 89 出 401 出 11 © Demae - can Co., Ltd.

Slide 12

Slide 12 text

出出出出出出 API 出出出出出出出出 出出出出出出出出出出出出出出出 出出出出 … • 出出出出出出出出出出出出出出出出出出出出出 … 12 © Demae - can Co., Ltd.

Slide 13

Slide 13 text

出出出出出出 API 出出出出出出出出 出出出出出出出出出出出出出出出 出出出出 … • 出出出出出出出出出出出出出出出出出出出出出 • A 出出出出出出出出出出出出出出出出 … B 出出出出出出出出 … • etc... 13 © Demae - can Co., Ltd.

Slide 14

Slide 14 text

出出出出出出 API 出出出出出出出出 8 出出 API 出 Subscriber 1. 出出出出出出出出出出 API 2. 出出出出出出出出出出 API 3. 出出出出出出出出出出出出 出出出出出出出出出出出出 API 4. 出出出出出出出出出出出出出出出出 API • 出出出出出出出出出出出出出出出出 Subscriber 5. 出出出出出出出出出出出出出出出出出 6. 出出出出出出出出出出出出出 API API 7. 出出出出出出出出出出出出出出出 API 8. 出出出出出出出出出出出出出出出 API 14 © Demae - can Co., Ltd.

Slide 15

Slide 15 text

出出 01 出出出出出出出出出出出出出出 02 出出出出出出 03 出出出出出出出出出出出出 04 出出出出出出出出出出出出 05 出出出出出出出出出 06 出出出出 API 出出出出出出出出 15 © Demae - can Co., Ltd.

Slide 16

Slide 16 text

出出出出出出出出出出出出 出出出出出出出出出 • 出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 • 出出出出出出出出出出 • 出出出出出出出出出出出出出 1出出出出出出出出出出 • 出出 × 出出出出出出出出出出出出 出出出出出 1出出出出出出出 56,500 出出出出出 出出 • 出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 16 © Demae - can Co., Ltd.

Slide 17

Slide 17 text

出出出出出出出出出出出出 出出出出出出 01 API 出出出 → 出出出 出出出 02 API 出出出 → Kafka + Subscriber 出出出 17 © Demae - can Co., Ltd.

Slide 18

Slide 18 text

出出出出出出出出出出出出 ①出出出出出出出出出出 出出 1出出出 • API 出出出出出出出出出出 × 20 出出 出出出出出出出出出出 + 202 Accepted 出出出出 • 出出出出出出出出出出出出 18 © Demae - can Co., Ltd.

Slide 19

Slide 19 text

出出出出出出出出出出出出 ①出出出出出出出出出出 出出 1出出出 × 20 出出 • API 出出出出出出出出出出 出出出出出出出出出出 + 202 Accepted 出出出出 • 出出出出出出出出出出出出 出出出出出出出出出出出出出出出出 出出出出出出出出出 19 © Demae - can Co., Ltd.

Slide 20

Slide 20 text

出出出出出出出出出出出出 ①出出出出出出出出出出 出出 1出出出 × 20 出出 • API 出出出出出出出出出出 出出出出出出出出出出 + 202 Accepted 出出出出 • 出出出出出出出出出出出出 出出出出出出出出出出出出出出出出 出出出出出出出出出 出出出出出出出出出出出出 20 © Demae - can Co., Ltd.

Slide 21

Slide 21 text

出出出出出出出出出出出出 ②Kafka + Subscriber 出出出出出出出出出出出出出出出出出出出出出出出 • API 出出出出出出出出出出 • 1出出出出出出出 + 202 Accepted 出出出出 Kafka 出出出 • 出出出出出出出出出出 • 出出出出出出出出出出出出出出出出出出出出出 21 © Demae - can Co., Ltd.

Slide 22

Slide 22 text

出出出出出出出出出出出出 出出出出出出出出出 出出出 ①出出出 ②Kafka + Subscriber 出出出出出出出 出出出出出 出 consume 出出出出 出出出出出 × 出出出出出出出 ( 出出 / 出出 1出出出出出出 出出出出出出出出出出出 ) 出 cron 出出出出 &出出出出出出出出出出 出 consume →@Async 出出出出出出出出 出出出出出出 出 Kafka 出出出出出 22 © Demae - can Co., Ltd.

Slide 23

Slide 23 text

出出出出出出出出出出出出 出出出出出出出出出 1. 出出出出出出出出出 2. 出出出出出出出出 produce 3. 出出出出出出出出 consume 4. 出出出出出出出出出 5. Item - service 出出出出出出出 出出 23 © Demae - can Co., Ltd.

Slide 24

Slide 24 text

出出出出出出出出出出出出 出出出出出出出出出 1. 出出出出出出出出出 2. 出出出出出出出出 produce 3. 出出出出出出出出 consume 4. 出出出出出出出出出 5. Item - service 出出出出出出出 出出 24 © Demae - can Co., Ltd.

Slide 25

Slide 25 text

出出 01 出出出出出出出出出出出出出出 02 出出出出出出 03 出出出出出出出出出出出出 04 出出出出出出出出出出出出 05 出出出出出出出出出 06 出出出出 API 出出出出出出出出 25 © Demae - can Co., Ltd.

Slide 26

Slide 26 text

出出出出出出出出出出出出 出出出出出出出出出出出出出出出出 出出出出出出 API 出出 出 26 © Demae - can Co., Ltd.

Slide 27

Slide 27 text

出出出出出出出出出出出出 出出出出出出出出出出出出出出出出 01 event ID 出出出出 02 出出出出出出出出出 03 出出出出出出出出出出出出出 04 Kafka Produce API 出 出出出出出出出出出出 27 © Demae - can Co., Ltd.

Slide 28

Slide 28 text

出出出出出出出出出出出出 出出出出出出出出出出出出出出出出 01 event ID 出出出出 02 出出出出出出出出出 03 出出出出出出出出出出出出出 04 Kafka Produce API 出出出出出出出出出出 出出出出出出出 出 出出出出出出出出出出 28 © Demae - can Co., Ltd.

Slide 29

Slide 29 text

出出出出出出出出出出出出 Kafka Publish – publishMenuEvent - 1. 出出出出出出出出出出出出 • Protobuf 出 MenuEvent 出出 • 出出出出出出 • .proto 出出出出出出出出出 2. Kafka 出出出出出出出出出 • Topic 出出出出出出出出出出出出出 29 © Demae - can Co., Ltd.

Slide 30

Slide 30 text

出出出出出出出出出出出出 Kafka Publish – publishMenuEvent - 1. 出出出出出出出出出出出出 • Protobuf 出 MenuEvent TopicNameProperty.java 出出 • 出出出出出出 • .proto 出出出出出出出出出 2. Kafka 出出出出出出出出出 • Topic 出出出出出出出出出出出出出 • @ ConfigurationProperties 出出出出 application - {env}. yml 出出出出出出出出 application - {env} .yml 30 © Demae - can Co., Ltd.

Slide 31

Slide 31 text

出出出出出出出出出出出出 Kafka Publish – publishMenuEvent - 1. 出出出出出出出出出出出出 • Protobuf 出 MenuEvent • 出出出出出出 • .proto 出出出出出出出出出 出出 出出出 Kafka 出出出出出 出出出出出出出 2. Kafka 出出出出出出出出出 • Topic 出出出出出出出出出出出出出 31 © Demae - can Co., Ltd.

Slide 32

Slide 32 text

出出出出出出出出出出出出 Kafka Publish – sendMessage - • executeInTransaction 出出出 • commit or abort • @ Retryable 出 1出出出 出出出出出出 + 2 出出出出出 32 © Demae - can Co., Ltd.

Slide 33

Slide 33 text

出出出出出出出出出出出出 Kafka Publish – sendMessage - • executeInTransaction 出出出 • commit or abort • @ Retryable 出 1出出出 出出出出出出 + 2 出出出出出 • + eventId 出出出 Subscriber at - least - once 出 出出 出出出出出出出出出出 • exactly - once 出出出出出出出出出出出出出出出 33 © Demae - can Co., Ltd.

Slide 34

Slide 34 text

出出出出出出出出出出出出 Kafka Publish – sendMessage - • executeInTransaction 出出出 • commit or abort • @ Retryable 出 1出出出 出出出出出出 + 2 出出出出出 出出出 KafkaTemplate Config 出出出出出出出出出出 出 34 © Demae - can Co., Ltd.

Slide 35

Slide 35 text

出出出出出出出出出出出出 Kafka Config – producer 出 - • @Bean 出出出出出出出 • 出出出 Factory/Configs 出 private 出出出 • Bean 出 : menuKafkaTemplate • Publisher 出出出出出出出出出出出出出出出出出出出 DI 35 © Demae - can Co., Ltd.

Slide 36

Slide 36 text

出出出出出出出出出出出出 Kafka Config – producer 出 - • transactionIdPrefix • 出出出出出出出出 executeInTransaction 出出出出出 36 © Demae - can Co., Ltd.

Slide 37

Slide 37 text

出出出出出出出出出出出出 Kafka Config – producer • 出出出 出 - AWS_MSK_IAM 37 © Demae - can Co., Ltd.

Slide 38

Slide 38 text

出出出出出出出出出出出出 Kafka Config Producer 出出出出出出出 01 3 出出出出出出出出 ( Configs/Factory/Template + Bean 出出出出出出出 DI 02 Transactional 03 出出出 出出 ) transactionIdPrefix AWS_MSK_IAM 出出出 出 secret 出出出出出出 38 © Demae - can Co., Ltd.

Slide 39

Slide 39 text

出出出出出出出出出出出出 Kafka Config – consumer 出 - • Producer 出 Config 出出出 • @Bean 出出出出出出出 • 出出出 Factory/Configs 出 private 出出出 • Bean 出 : menuKafkaContainerFactory • @ KafkaListener 出出出出出出出出 出 containerFactory DI 出出 39 © Demae - can Co., Ltd.

Slide 40

Slide 40 text

出出出出出出出出出出出出 Kafka Config – consumer • FixedBackOff • 出出出出出出出出出出出出 出出出出出出出 出 出出出出出 recoverer 出 → 出出 • AuthExceptionRetryInterval 出出出出出出出出 • 出出出出出出出出出出出出出出出出出 出出出出出出出出出出出出 40 © Demae - can Co., Ltd.

Slide 41

Slide 41 text

出出出出出出出出出出出出 Kafka Config – consumer 出 - • ISOLATION_LEVEL_CONFIG • read_committed 出出出出出出出出出出出出出出出出 • AUTO_OFFSET_RESET_CONFIG • 出出出出出出出出出出出出出出出 earliest 出出出出出出出出出出出 41 © Demae - can Co., Ltd.

Slide 42

Slide 42 text

出出出出出出出出出出出出 Kafka Config Consumer 出出出出出出出 01 3 出出出出出出出出 ( Configs/Factory/ + Bean 出出 DI 02 AuthExceptionRetryInterval 03 ISOLATION_LEVEL = Producer Tx 出出出出出出出 ContainerFactory ) 出出出 read_committed 出 42 © Demae - can Co., Ltd.

Slide 43

Slide 43 text

出出出出出出出出出出出出 出出出出出出出出出 - 出出出出 1. 出出出出出出出出出 2. 出出出出出出出出 produce 3. 出出出出出出出出 consume 4. 出出出出出出出出出 5. Item - service 出出出出出出出 出出 出出出出出出出 43 © Demae - can Co., Ltd.

Slide 44

Slide 44 text

出出出出出出出出出出出出 Menu Subscriber Subscriber 出出出出出出出出出出出 01 出出出出出出出出 02 出出出出出出出出出出出出 03 出出出出出出出出出出出出出 Subscribe ( 出出出出出 ) 44 © Demae - can Co., Ltd.

Slide 45

Slide 45 text

出出出出出出出出出出出出 Menu Subscriber – consumerMenuEvent - • @ KafkaListener • Kafka Consumer 出出出出出 • 出 Trace(dispatcher = true) • 出出出出出出出出出出出出出出出出出 • @Payload • @Payload 出 produce 出出出出出出出出 byte[] 出 45 © Demae - can Co., Ltd.

Slide 46

Slide 46 text

出出出出出出出出出出出出 Menu Subscriber – processMenuEvent - • 出 Trace(async = true) • 出出出出出出出出出出出出出出出出出出出出出出 • Subscribe • @Async(“ 出出出出出出出出出出出 menuEvent ”) • 出出出出出出出出出出出出 46 © Demae - can Co., Ltd.

Slide 47

Slide 47 text

出出出出出出出出出出出出 Menu Subscriber – processMenuEvent - 01 出出出出出出出出 & 出出出出出出出 02 出出出出出出出出出 03 item - service 出出出出出出出 04 item - service 出出出出出出 API 出出 05 item - service 出出出出出出 API 出出 06 出出出出出出出出出 ( 出出出出 ) 47 © Demae - can Co., Ltd.

Slide 48

Slide 48 text

出出出出出出出出出出出出 Menu Subscriber – processMenuEvent 出出出出出出 01 出出出出出出出出 & 出出出出出出出 02 出出出出出出出出出 03 item - service 出出出出出出出 04 item - service 出出出出出出 API 出出 05 item - service 出出出出出出 API 出出 06 出出出出出出出出出 ( 出出出出 ) 48 © Demae - can Co., Ltd.

Slide 49

Slide 49 text

出出出出出出出出出出出出 Menu Subscriber – processMenuEvent - 01 出出出出出出出出 & 出出出出出出出 02 出出出出出出出出出 03 item - service 出出出出出出出 04 item - service 出出出出出出 API 出出 05 item - service 出出出出出出 API 出出 06 出出出出出出出出出 出出出出出 ( 出出出出 … ) 49 © Demae - can Co., Ltd.

Slide 50

Slide 50 text

出出 01 出出出出出出出出出出出出出出 02 出出出出出出 03 出出出出出出出出出出出出 04 出出出出出出出出出出出出 05 出出出出出出出出出 06 出出出出 API 出出出出出出出出 50 © Demae - can Co., Ltd.

Slide 51

Slide 51 text

出出出出出出出出出出出出 processMenuEvent – registerImages • 出出出出出 - URL 出出出出出出出出出出出出 • 出出出出出出出出出出出出出出出出出 • 出出出出出 1出出出出 5MB 出出 • 出出出 3000 〜 5000ms 出出出出出出出出出出出出出 出出出出出出出出出 出出出出出 … 51 © Demae - can Co., Ltd.

Slide 52

Slide 52 text

出出出出出出出出出出出出 processMenuEvent – registerImages • 出出出出出 - URL 出出出出出出出出出出出出 • 出出出出出出出出出出出出出出出出出 • 出出出出出 1出出出出 5MB 出出 • 出出出 3000 〜 5000ms 出出出出出出出出出出出出出 出出出出出出出出出 出出出出出 … • 出出出出出出出出出出出出出出出出 • 出出出出出出出 52 © Demae - can Co., Ltd.

Slide 53

Slide 53 text

出出出出出出出出出 processMenuEvent – url_hash 出出出出出出出出 - • 出出出出出出出 • url_hash • Last - Modified • image_asset_id 出出 DL URL 出 SHA - 256 出出出出出出出出出出出出出出 ItemService 出出出出出出出出 ID 53 © Demae - can Co., Ltd.

Slide 54

Slide 54 text

出出出出出出出出出 processMenuEvent – url_hash 出出出出出出出出 - • 出出出出出出出 • url_hash • Last - Modified • image_asset_id 出出 DL URL 出 SHA - 256 出出出出出出出出出出出出出出 ItemService 出出出出出出出出 ID • DL 出出出出出出出出 Last - Modified 出出出出出 出出出出出出出出出出出出出出出出出出出 54 © Demae - can Co., Ltd.

Slide 55

Slide 55 text

出出出出出出出出出 processMenuEvent – 出出出出出出出出出出 – • 出出出出出出出 • 出出出出出出出出出出出出出出 • 出出出出出出出 URL 出 Last - Modified 出出出 • 出出出出出出出 • 出出出出出 出 Last - Modified 出出 55 © Demae - can Co., Ltd.

Slide 56

Slide 56 text

出出出出出出出出出 processMenuEvent – 出出出出出出出出出 - • 出出出出出出出出出出出出出出出出出 • 出出 URL 出出出出出出出出出出出出出出出 • 出出出出出出出出出出出 56 © Demae - can Co., Ltd.

Slide 57

Slide 57 text

出出出出出出出出出 processMenuEvent – 出出出出出出出出出 - • CompletableFuture.runAsync 出出出出 • CompletableFuture.allOf(...) 出 出出出 出出 57 © Demae - can Co., Ltd.

Slide 58

Slide 58 text

出出出出出出出出出 processMenuEvent – 出出出出出出出 • 出出出出 failedItemCodes 出出出出 • 出出出出出出出出 • 出 1出出出出出出出出出出出出出出出 • 出出出出出出出出出出出出出 API 出出出出 58 © Demae - can Co., Ltd.

Slide 59

Slide 59 text

出出 01 出出出出出出出出出出出出出出 02 出出出出出出 03 出出出出出出出出出出出出 04 出出出出出出出出出出出出 05 出出出出出出出出出 06 出出出出 API 出出出出出出出出 59 © Demae - can Co., Ltd.

Slide 60

Slide 60 text

出出出出 出出出出出出出出出 - 出出出出 出出出出出出出出出 1. 出出出出出出出出出 2. 出出出出出出出出 produce 3. 出出出出出出出出 consume 4. 出出出出出出出出出 5. Item - service 出出出出出出出 出出 60 © Demae - can Co., Ltd.

Slide 61

Slide 61 text

出出出出 出出出出出出出 Kafka + Subscriber 出出出出出出出出出 出出出出出出出出出出 + @ Retryable 出出出出出出 Spring 1出出 + eventId 出出出出出出出出 at - least - once SLA 出出出出 出出出出出出出出出出出出出出出出出出出出出 61 © Demae - can Co., Ltd.

Slide 62

Slide 62 text

出出出出 出出出出出出出出出 • DLQ 出出出 • 出出出 Subscribe 出出出出出出出出出出出出出出出出出出出出出出出 • 出出出出出出出出出出出 • HEAD 出出出出出出 Last - Modified 出出出出出 DL 出出出出出 / 出出出出出出出出出出 • 出出出出出出出出出出 • Consumer Lag / 出出出出出出出出出 / 出出出出出出出出出出出出出出出 62 © Demae - can Co., Ltd.

Slide 63

Slide 63 text

出出出出 出出出出出出 • 出出出出出出出 • https:// x.gd /e6vlY URL 出 QR 出出出 • 出出出出出出出出出出 • https://x.gd/SETKa 63 © Demae - can Co., Ltd.

Slide 64

Slide 64 text

THANK YOU. THANK YOU. • 出出出出出出出出出出出出出出出出出出出 64 © Demae - can Co., Ltd.