# 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 브로커 정보 ```yaml Cluster ID: DoD3g79BcWYex6Sc43dqFy Bootstrap Servers: - 20.249.182.13:9095 - 4.217.131.59:9095 Kafka Version: 3.7.0 ``` ### event-service 설정 ```yaml 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 토큰 생성 ```python # 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 연결 로그 확인 **테스트 결과**: ✅ **성공** **로그 확인**: ```log 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 요청**: ```bash 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" }' ``` **테스트 결과**: ✅ **성공** **응답**: ```json { "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 요청**: ```bash 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"] }' ``` **테스트 결과**: ✅ **성공** **응답**: ```json { "success": true, "data": { "jobId": "JOB-IMG-1761750847428-b88d2f54", "eventId": "EVT-str_dev_test_001-20251030001311-70eea424", "status": "PENDING", "message": "이미지 생성 작업이 시작되었습니다." } } ``` **Kafka Producer 로그**: ```log 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 로그**: ```log 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. 테스트 데이터 ### 생성된 테스트 데이터 ```yaml 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