kt-event-marketing/test-kafka-integration-results.md
merrycoral 336d811f55 content-service 통합 테스트 완료 및 보고서 작성
- content-service HTTP 통신 테스트 완료 (9개 시나리오 성공)
- Job 관리 메커니즘 검증 (Redis 기반)
- EventId 기반 콘텐츠 조회 및 필터링 테스트
- 이미지 재생성 기능 검증
- Kafka 연동 현황 분석 (Consumer 미구현 확인)
- 통합 테스트 결과 보고서 작성
- 테스트 자동화 스크립트 추가

테스트 성공률: 100% (9/9)
응답 성능: < 150ms

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 01:24:29 +09:00

9.4 KiB

Kafka 통합 테스트 결과 보고서

테스트 일시: 2025-10-30 테스트 담당: Backend Developer 테스트 환경: 개발 환경 (Mock 모드)


1. 테스트 개요

테스트 목적

  • event-service의 Kafka Producer/Consumer 기능 검증
  • Kafka 브로커 연결 상태 확인
  • 서비스 간 메시지 통신 흐름 검증

테스트 범위

  • Kafka 브로커 연결 테스트
  • event-service Producer 테스트 (이미지 생성 Job 발행)
  • event-service Consumer 테스트 (이미지 생성 Job 수신)
  • ⚠️ content-service Consumer 테스트 (미구현으로 인한 제외)

2. 테스트 환경 설정

Kafka 브로커 정보

Cluster ID: DoD3g79BcWYex6Sc43dqFy
Bootstrap Servers:
  - 20.249.182.13:9095
  - 4.217.131.59:9095
Kafka Version: 3.7.0

event-service 설정

spring.kafka:
  bootstrap-servers: 20.249.182.13:9095,4.217.131.59:9095
  producer:
    key-serializer: StringSerializer
    value-serializer: JsonSerializer
  consumer:
    group-id: event-service-consumers
    key-deserializer: StringDeserializer
    value-deserializer: JsonDeserializer
    auto-offset-reset: earliest
    enable-auto-commit: false
  listener:
    ack-mode: manual

app.kafka.topics:
  ai-event-generation-job: ai-event-generation-job
  image-generation-job: image-generation-job
  event-created: event-created

Mock JWT 토큰 생성

# Secret Key
secret = "default-jwt-secret-key-for-development-minimum-32-bytes-required"

# Payload
{
  "sub": "test-user-123",
  "userId": "test-user-123",
  "storeId": "STORE-001",
  "storeName": "테스트 매장",
  "iat": 1761750751,
  "exp": 1761837151
}

# Generated Token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0LXVzZXItMTIzIiwidXNlcklkIjoidGVzdC11c2VyLTEyMyIsInN0b3JlSWQiOiJTVE9SRS0wMDEiLCJzdG9yZU5hbWUiOiJcdWQxNGNcdWMyYTRcdWQyYjggXHViOWU0XHVjN2E1IiwiaWF0IjoxNzYxNzUwNzUxLCJleHAiOjE3NjE4MzcxNTF9.0TC396_Z-Wh45aK23qPvy-u9I8RXrg5OYqdVxqvRI0c

3. 테스트 시나리오 및 결과

3.1 Kafka 브로커 연결 테스트

테스트 절차:

  1. event-service 시작 (포트 8081)
  2. Kafka 연결 로그 확인

테스트 결과: 성공

로그 확인:

2025-10-30 00:09:35 - Kafka version: 3.7.0
2025-10-30 00:09:36 - Cluster ID: DoD3g79BcWYex6Sc43dqFy
2025-10-30 00:09:36 - Discovered group coordinator 4.217.131.59:9095
2025-10-30 00:09:37 - Successfully joined group with generation Generation{
  generationId=58,
  memberId='consumer-event-service-consumers-4-1022b047-d310-4743-a743-6bdd0ccfa380',
  protocol='range'
}
2025-10-30 00:09:37 - Successfully synced group
2025-10-30 00:09:37 - Notifying assignor about the new Assignment(
  partitions=[image-generation-job-0]
)

검증 사항:

  • Kafka 3.7.0 버전 확인
  • 클러스터 ID 확인
  • Consumer Group 가입 성공
  • Partition 할당 성공 (image-generation-job-0)
  • 6개 Consumer 연결 확인

3.2 이벤트 생성 테스트

테스트 절차:

  1. Mock JWT 토큰 생성
  2. POST /api/v1/events API 호출
  3. 이벤트 생성 확인

API 요청:

curl -X POST http://localhost:8081/api/v1/events \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{
    "objective": "NEW_CUSTOMER",
    "storeName": "Test Cafe",
    "storeCategory": "CAFE",
    "storeDescription": "A nice coffee shop for testing"
  }'

테스트 결과: 성공

응답:

{
  "success": true,
  "data": {
    "eventId": "EVT-str_dev_test_001-20251030001311-70eea424",
    "objective": "NEW_CUSTOMER",
    "status": "DRAFT",
    "createdAt": "2025-10-30T00:13:11"
  }
}

생성된 Event ID: EVT-str_dev_test_001-20251030001311-70eea424


3.3 Kafka Producer 테스트 (이미지 생성 요청)

테스트 절차:

  1. POST /api/v1/events/{eventId}/images API 호출
  2. Kafka 메시지 발행 확인

API 요청:

curl -X POST http://localhost:8081/api/v1/events/EVT-str_dev_test_001-20251030001311-70eea424/images \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Modern cafe promotion event poster with coffee cup",
    "styles": ["MODERN"],
    "platforms": ["INSTAGRAM"]
  }'

테스트 결과: 성공

응답:

{
  "success": true,
  "data": {
    "jobId": "JOB-IMG-1761750847428-b88d2f54",
    "eventId": "EVT-str_dev_test_001-20251030001311-70eea424",
    "status": "PENDING",
    "message": "이미지 생성 작업이 시작되었습니다."
  }
}

Kafka Producer 로그:

2025-10-30 00:14:07 - 이미지 생성 작업 메시지 발행 완료
  jobId: JOB-IMG-1761750847428-b88d2f54

2025-10-30 00:14:07 - 이미지 생성 작업 메시지 발행 성공
  Topic: image-generation-job
  JobId: JOB-IMG-1761750847428-b88d2f54
  EventId: EVT-str_dev_test_001-20251030001311-70eea424
  Offset: 0

발행된 메시지 정보:

  • Topic: image-generation-job
  • Partition: 0
  • Offset: 0
  • Key: JOB-IMG-1761750847428-b88d2f54
  • Status: PENDING

3.4 Kafka Consumer 테스트 (메시지 수신)

테스트 절차:

  1. event-service의 ImageJobKafkaConsumer가 메시지 수신 확인
  2. 메시지 파싱 및 처리 확인

테스트 결과: 성공

Kafka Consumer 로그:

2025-10-30 00:14:07 - 이미지 생성 작업 메시지 수신
  Partition: 0, Offset: 0

2025-10-30 00:14:07 - 이미지 작업 메시지 파싱 완료
  JobId: JOB-IMG-1761750847428-b88d2f54
  EventId: EVT-str_dev_test_001-20251030001311-70eea424
  Status: PENDING

검증 사항:

  • 메시지 수신 성공 (Partition 0, Offset 0)
  • JSON 메시지 파싱 성공
  • JobId, EventId, Status 정상 추출
  • Manual Acknowledgment 처리 완료

4. 발견된 문제점

⚠️ content-service Kafka Consumer 미구현

문제 설명:

  • 논리 아키텍처에서는 content-service가 image-generation-job topic을 구독하도록 설계됨
  • 실제 구현에서는 content-service에 Kafka Consumer 코드가 없음
  • content-service의 application.yml에 Kafka 설정이 없음

현재 메시지 흐름:

Event-Service (Producer) → Kafka Topic → Event-Service (Consumer)
                                          ↓
                                   자신이 발행한 메시지를
                                   자신이 소비하고 있음

설계된 메시지 흐름:

Event-Service → Kafka → Content-Service → 이미지 생성 → Kafka → Event-Service
  (Producer)           (Consumer)                      (Producer)  (Consumer)

영향:

  • content-service는 현재 Redis 기반으로만 Job 관리
  • 서비스 간 Kafka 기반 비동기 통신이 불가능
  • 이미지 생성 작업이 content-service에 전달되지 않음

권장 사항:

  1. 옵션 A: content-service에 Kafka Consumer 구현 추가
  2. 옵션 B: 설계 문서 수정 (Redis 기반 통신으로 변경)
  3. 옵션 C: event-service가 content-service REST API 직접 호출

5. 테스트 결과 요약

성공한 테스트 항목

항목 결과 비고
Kafka 브로커 연결 성공 클러스터 ID 확인, Consumer Group 가입
Event 생성 성공 Event ID: EVT-str_dev_test_001-20251030001311-70eea424
Kafka Producer (이미지 생성) 성공 Topic: image-generation-job, Offset: 0
Kafka Consumer (메시지 수신) 성공 메시지 파싱 및 처리 완료
Manual Acknowledgment 성공 수동 커밋 처리 완료

미검증 항목

항목 상태 사유
content-service Kafka Consumer ⚠️ 미구현 Kafka Consumer 코드 없음
AI Service Kafka Consumer ⚠️ 미확인 AI Service 미테스트
Analytics Service Kafka Consumer ⚠️ 미확인 Analytics Service 미테스트
서비스 간 메시지 전달 ⚠️ 불가 content-service Consumer 미구현

6. 테스트 데이터

생성된 테스트 데이터

Mock JWT Token:
  userId: test-user-123
  storeId: STORE-001
  storeName: 테스트 매장

Event:
  eventId: EVT-str_dev_test_001-20251030001311-70eea424
  objective: NEW_CUSTOMER
  storeName: Test Cafe
  storeCategory: CAFE
  status: DRAFT

Image Generation Job:
  jobId: JOB-IMG-1761750847428-b88d2f54
  eventId: EVT-str_dev_test_001-20251030001311-70eea424
  prompt: Modern cafe promotion event poster with coffee cup
  styles: [MODERN]
  platforms: [INSTAGRAM]
  status: PENDING

Kafka Message:
  topic: image-generation-job
  partition: 0
  offset: 0
  key: JOB-IMG-1761750847428-b88d2f54

7. 결론

주요 성과

  1. event-service Kafka 통합 검증 완료

    • Producer: 메시지 발행 성공
    • Consumer: 메시지 수신 및 파싱 성공
    • Kafka 브로커 연결 안정
  2. Manual Acknowledgment 패턴 검증

    • 메시지 처리 후 수동 커밋 정상 작동
    • 장애 시 메시지 재처리 방지 메커니즘 확인
  3. JSON Serialization/Deserialization 검증

    • 메시지 직렬화/역직렬화 정상 작동
    • Type Header 사용하지 않는 방식 확인

다음 단계

  1. content-service Kafka Consumer 구현 여부 결정
  2. AI Service Kafka 통합 테스트
  3. Analytics Service Kafka 통합 테스트
  4. 전체 서비스 간 End-to-End 메시지 흐름 테스트

테스트 담당자: Backend Developer 검토자: System Architect 승인일: 2025-10-30