- 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>
349 lines
9.4 KiB
Markdown
349 lines
9.4 KiB
Markdown
# 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
|